}
>
{saveTemplate.isPending
- ? "Saving..."
+ ? 'Saving...'
: saveTemplate.isSuccess
- ? editGUID ? "Saved" : "Save Another"
- : `${editGUID ? "Update" : "Save"} Template (${getTotalApps()} app${getTotalApps() !== 1 ? "s" : ""})`}
+ ? editGUID
+ ? 'Saved'
+ : 'Save Another'
+ : `${editGUID ? 'Update' : 'Save'} Template (${getTotalApps()} app${getTotalApps() !== 1 ? 's' : ''})`}
+ {pageActions}
+
+ }
+ apiUrl={`/api/ListAssignmentFilters${useReportDB ? "?UseReportDB=true" : ""}`}
+ queryKey={`assignment-filters-${currentTenant}-${useReportDB}`}
+ actions={actions}
+ offCanvas={offCanvas}
+ simpleColumns={simpleColumns}
+ />
+
{
+ if (result?.Metadata?.QueueId) {
+ setSyncQueueId(result?.Metadata?.QueueId);
+ }
+ },
+ }}
+ />
+ >
);
};
diff --git a/src/pages/endpoint/MEM/devices/index.js b/src/pages/endpoint/MEM/devices/index.js
index e8e34e9338d5..5f1d42f3254e 100644
--- a/src/pages/endpoint/MEM/devices/index.js
+++ b/src/pages/endpoint/MEM/devices/index.js
@@ -4,9 +4,14 @@ import { CippApiDialog } from "../../../../components/CippComponents/CippApiDial
import { useSettings } from "../../../../hooks/use-settings";
import { useDialog } from "../../../../hooks/use-dialog.js";
import { EyeIcon } from "@heroicons/react/24/outline";
-import { Box, Button } from "@mui/material";
+import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { Stack } from "@mui/system";
+import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
+import { useEffect, useState } from "react";
import {
Sync,
+ CloudDone,
+ Bolt,
RestartAlt,
LocationOn,
Password,
@@ -25,7 +30,15 @@ import {
const Page = () => {
const pageTitle = "Devices";
const tenantFilter = useSettings().currentTenant;
+ const isAllTenants = tenantFilter === "AllTenants";
const depSyncDialog = useDialog();
+ const syncDialog = useDialog();
+ const [syncQueueId, setSyncQueueId] = useState(null);
+ const [useReportDB, setUseReportDB] = useState(isAllTenants);
+
+ useEffect(() => {
+ setUseReportDB(tenantFilter === "AllTenants");
+ }, [tenantFilter]);
const actions = [
{
@@ -385,6 +398,8 @@ const Page = () => {
};
const simpleColumns = [
+ ...(useReportDB ? ["CacheTimestamp"] : []),
+ ...(useReportDB && isAllTenants ? ["Tenant"] : []),
"deviceName",
"userPrincipalName",
"complianceState",
@@ -398,6 +413,53 @@ const Page = () => {
"joinType",
];
+ const pageActions = [
+
+ {useReportDB && (
+ <>
+
+
+
+
+ }
+ size="xs"
+ onClick={syncDialog.handleOpen}
+ >
+ Sync
+
+ >
+ )}
+
+
+ : }
+ label={useReportDB ? "Cached" : "Live"}
+ color="primary"
+ size="small"
+ onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
+ clickable={!isAllTenants}
+ disabled={isAllTenants}
+ variant="outlined"
+ />
+
+
+ ,
+ ];
+
return (
<>
{
apiUrl="/api/ListGraphRequest"
apiData={{
Endpoint: "deviceManagement/managedDevices",
+ ...(useReportDB ? { UseReportDB: true } : {}),
}}
apiDataKey="Results"
actions={actions}
- queryKey={`MEMDevices-${tenantFilter}`}
+ queryKey={`MEMDevices-${tenantFilter}-${useReportDB}`}
offCanvas={offCanvas}
simpleColumns={simpleColumns}
cardButton={
-
+
}>
Sync DEP
-
+ {pageActions}
+
}
/>
{
confirmText: `Are you sure you want to sync Apple Device Enrollment Program (DEP) tokens? This will sync all DEP tokens for ${tenantFilter}. This may take several minutes to complete in the background, and can only be done every 15 minutes.`,
}}
/>
+ {
+ if (result?.Metadata?.QueueId) {
+ setSyncQueueId(result?.Metadata?.QueueId);
+ }
+ },
+ }}
+ />
>
);
};
diff --git a/src/pages/endpoint/MEM/list-appprotection-policies/index.js b/src/pages/endpoint/MEM/list-appprotection-policies/index.js
index bcf12e6e4efd..f20bee7ffcc2 100644
--- a/src/pages/endpoint/MEM/list-appprotection-policies/index.js
+++ b/src/pages/endpoint/MEM/list-appprotection-policies/index.js
@@ -1,14 +1,29 @@
import { Layout as DashboardLayout } from '../../../../layouts/index.js'
import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog.jsx'
import { PermissionButton } from '../../../../utils/permissions.js'
import { CippPolicyDeployDrawer } from '../../../../components/CippComponents/CippPolicyDeployDrawer.jsx'
import { useSettings } from '../../../../hooks/use-settings.js'
import { useCippIntunePolicyActions } from '../../../../components/CippComponents/CippIntunePolicyActions.jsx'
+import { Sync, CloudDone, Bolt } from '@mui/icons-material'
+import { Button, Chip, SvgIcon, Tooltip } from '@mui/material'
+import { Stack } from '@mui/system'
+import { useDialog } from '../../../../hooks/use-dialog'
+import { CippQueueTracker } from '../../../../components/CippTable/CippQueueTracker'
+import { useEffect, useState } from 'react'
const Page = () => {
const pageTitle = 'App Protection & Configuration Policies'
const cardButtonPermissions = ['Endpoint.MEM.ReadWrite']
const tenant = useSettings().currentTenant
+ const isAllTenants = tenant === 'AllTenants'
+ const syncDialog = useDialog()
+ const [syncQueueId, setSyncQueueId] = useState(null)
+ const [useReportDB, setUseReportDB] = useState(isAllTenants)
+
+ useEffect(() => {
+ setUseReportDB(tenant === 'AllTenants')
+ }, [tenant])
const actions = useCippIntunePolicyActions(tenant, 'URLName', {
templateData: {
@@ -31,6 +46,8 @@ const Page = () => {
}
const simpleColumns = [
+ ...(useReportDB ? ['CacheTimestamp'] : []),
+ ...(useReportDB && isAllTenants ? ['Tenant'] : []),
'displayName',
'PolicyTypeName',
'PolicyAssignment',
@@ -38,21 +55,93 @@ const Page = () => {
'lastModifiedDateTime',
]
+ const pageActions = [
+
+ {useReportDB && (
+ <>
+
+
+
+
+ }
+ size="xs"
+ onClick={syncDialog.handleOpen}
+ >
+ Sync
+
+ >
+ )}
+
+
+ : }
+ label={useReportDB ? 'Cached' : 'Live'}
+ color="primary"
+ size="small"
+ onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
+ clickable={!isAllTenants}
+ disabled={isAllTenants}
+ variant="outlined"
+ />
+
+
+ ,
+ ]
+
return (
-
- }
- />
+ <>
+
+
+ {pageActions}
+
+ }
+ />
+ {
+ if (result?.Metadata?.QueueId) {
+ setSyncQueueId(result?.Metadata?.QueueId)
+ }
+ },
+ }}
+ />
+ >
)
}
diff --git a/src/pages/endpoint/MEM/list-compliance-policies/index.js b/src/pages/endpoint/MEM/list-compliance-policies/index.js
index b3394023c492..0b8e395c3db0 100644
--- a/src/pages/endpoint/MEM/list-compliance-policies/index.js
+++ b/src/pages/endpoint/MEM/list-compliance-policies/index.js
@@ -1,14 +1,29 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog.jsx";
import { PermissionButton } from "../../../../utils/permissions.js";
import { CippPolicyDeployDrawer } from "../../../../components/CippComponents/CippPolicyDeployDrawer.jsx";
import { useSettings } from "../../../../hooks/use-settings.js";
import { useCippIntunePolicyActions } from "../../../../components/CippComponents/CippIntunePolicyActions.jsx";
+import { Sync, CloudDone, Bolt } from "@mui/icons-material";
+import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { Stack } from "@mui/system";
+import { useDialog } from "../../../../hooks/use-dialog";
+import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
+import { useEffect, useState } from "react";
const Page = () => {
const pageTitle = "Intune Compliance Policies";
const cardButtonPermissions = ["Endpoint.MEM.ReadWrite"];
const tenant = useSettings().currentTenant;
+ const isAllTenants = tenant === "AllTenants";
+ const syncDialog = useDialog();
+ const [syncQueueId, setSyncQueueId] = useState(null);
+ const [useReportDB, setUseReportDB] = useState(isAllTenants);
+
+ useEffect(() => {
+ setUseReportDB(tenant === "AllTenants");
+ }, [tenant]);
const actions = useCippIntunePolicyActions(tenant, "deviceCompliancePolicies", {
templateData: {
@@ -29,6 +44,8 @@ const Page = () => {
};
const simpleColumns = [
+ ...(useReportDB ? ["CacheTimestamp"] : []),
+ ...(useReportDB && isAllTenants ? ["Tenant"] : []),
"displayName",
"PolicyTypeName",
"PolicyAssignment",
@@ -37,21 +54,93 @@ const Page = () => {
"lastModifiedDateTime",
];
+ const pageActions = [
+
+ {useReportDB && (
+ <>
+
+
+
+
+ }
+ size="xs"
+ onClick={syncDialog.handleOpen}
+ >
+ Sync
+
+ >
+ )}
+
+
+ : }
+ label={useReportDB ? "Cached" : "Live"}
+ color="primary"
+ size="small"
+ onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
+ clickable={!isAllTenants}
+ disabled={isAllTenants}
+ variant="outlined"
+ />
+
+
+ ,
+ ];
+
return (
-
- }
- />
+ <>
+
+
+ {pageActions}
+
+ }
+ />
+ {
+ if (result?.Metadata?.QueueId) {
+ setSyncQueueId(result?.Metadata?.QueueId);
+ }
+ },
+ }}
+ />
+ >
);
};
diff --git a/src/pages/endpoint/MEM/list-policies/index.js b/src/pages/endpoint/MEM/list-policies/index.js
index 1a78f45906cb..8c5d4782513c 100644
--- a/src/pages/endpoint/MEM/list-policies/index.js
+++ b/src/pages/endpoint/MEM/list-policies/index.js
@@ -4,8 +4,8 @@ import { PermissionButton } from '../../../../utils/permissions.js'
import { CippPolicyDeployDrawer } from '../../../../components/CippComponents/CippPolicyDeployDrawer.jsx'
import { useSettings } from '../../../../hooks/use-settings.js'
import { useCippIntunePolicyActions } from '../../../../components/CippComponents/CippIntunePolicyActions.jsx'
-import { Sync, Info, CloudDone, Bolt } from '@mui/icons-material'
-import { Button, SvgIcon, IconButton, Tooltip, Chip } from '@mui/material'
+import { Sync, CloudDone, Bolt } from '@mui/icons-material'
+import { Button, SvgIcon, Tooltip, Chip } from '@mui/material'
import { Stack } from '@mui/system'
import { useDialog } from '../../../../hooks/use-dialog'
import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog'
@@ -45,7 +45,8 @@ const Page = () => {
}
const simpleColumns = [
- ...(useReportDB ? ['Tenant', 'CacheTimestamp'] : []),
+ ...(useReportDB ? ['CacheTimestamp'] : []),
+ ...(useReportDB && isAllTenants ? ['Tenant'] : []),
'displayName',
'PolicyTypeName',
'PolicyAssignment',
@@ -81,8 +82,8 @@ const Page = () => {
isAllTenants
? 'AllTenants always uses cached data'
: useReportDB
- ? 'Showing cached data from the Reporting Database — click to switch to live'
- : 'Showing live data — click to switch to cache'
+ ? 'Showing cached data from the Reporting Database - click to switch to live'
+ : 'Showing live data - click to switch to cache'
}
>
diff --git a/src/pages/endpoint/MEM/list-scripts/index.jsx b/src/pages/endpoint/MEM/list-scripts/index.jsx
index 91eb0bf675a6..11b480fae484 100644
--- a/src/pages/endpoint/MEM/list-scripts/index.jsx
+++ b/src/pages/endpoint/MEM/list-scripts/index.jsx
@@ -1,5 +1,6 @@
import { Layout as DashboardLayout } from "../../../../layouts/index";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage";
+import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
import {
TrashIcon,
PencilIcon,
@@ -16,14 +17,19 @@ import {
IconButton,
CircularProgress,
DialogActions,
+ Chip,
+ SvgIcon,
+ Tooltip,
} from "@mui/material";
import { CippCodeBlock } from "../../../../components/CippComponents/CippCodeBlock";
import { useState, useEffect, useMemo } from "react";
import { useDispatch } from "react-redux";
-import { Close, Save, LaptopChromebook } from "@mui/icons-material";
+import { Close, Save, LaptopChromebook, Sync, CloudDone, Bolt } from "@mui/icons-material";
import { useSettings } from "../../../../hooks/use-settings";
+import { useDialog } from "../../../../hooks/use-dialog";
import { Stack } from "@mui/system";
import { useQuery, useQueryClient } from "@tanstack/react-query";
+import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
const assignmentModeOptions = [
{ label: "Replace existing assignments", value: "replace" },
@@ -39,6 +45,17 @@ const Page = () => {
const [codeContentChanged, setCodeContentChanged] = useState(false);
const [warnOpen, setWarnOpen] = useState(false);
const [currentScript, setCurrentScript] = useState(null);
+ const [scriptTenant, setScriptTenant] = useState(null);
+
+ const tenantFilter = useSettings().currentTenant;
+ const isAllTenants = tenantFilter === "AllTenants";
+ const syncDialog = useDialog();
+ const [syncQueueId, setSyncQueueId] = useState(null);
+ const [useReportDB, setUseReportDB] = useState(isAllTenants);
+
+ useEffect(() => {
+ setUseReportDB(tenantFilter === "AllTenants");
+ }, [tenantFilter]);
const dispatch = useDispatch();
@@ -48,17 +65,16 @@ const Page = () => {
: "powershell";
}, [currentScript?.scriptType]);
- const tenantFilter = useSettings().currentTenant;
const {
isLoading: scriptIsLoading,
isRefetching: scriptIsFetching,
refetch: scriptRefetch,
data,
} = useQuery({
- queryKey: ["script", { scriptId }],
+ queryKey: ["script", { scriptId, scriptTenant }],
queryFn: async () => {
const response = await fetch(
- `/api/EditIntuneScript?TenantFilter=${tenantFilter}&ScriptId=${scriptId}`
+ `/api/EditIntuneScript?TenantFilter=${scriptTenant || tenantFilter}&ScriptId=${scriptId}`
);
return response.json();
},
@@ -79,6 +95,7 @@ const Page = () => {
const handleScriptEdit = async (row, action) => {
setScriptId(row.id);
+ setScriptTenant(row?.Tenant || tenantFilter);
setCodeOpen(!codeOpen);
};
@@ -94,6 +111,7 @@ const Page = () => {
setCodeOpen(!codeOpen);
setCodeContentChanged(false);
setScriptId(null);
+ setScriptTenant(null);
setCodeContent("");
}
};
@@ -114,7 +132,7 @@ const Page = () => {
scriptType,
} = currentScript;
const patchData = {
- TenantFilter: tenantFilter,
+ TenantFilter: scriptTenant || tenantFilter,
ScriptId: id,
ScriptType: scriptType,
IntuneScript: JSON.stringify({
@@ -197,7 +215,7 @@ const Page = () => {
],
confirmText: 'Are you sure you want to assign "[displayName]" to all users?',
customDataformatter: (row, action, formData) => ({
- tenantFilter: tenantFilter,
+ tenantFilter: tenantFilter === "AllTenants" && row?.Tenant ? row.Tenant : tenantFilter,
ID: row?.id,
Type: getScriptEndpoint(row?.scriptType),
AssignTo: "allLicensedUsers",
@@ -223,7 +241,7 @@ const Page = () => {
],
confirmText: 'Are you sure you want to assign "[displayName]" to all devices?',
customDataformatter: (row, action, formData) => ({
- tenantFilter: tenantFilter,
+ tenantFilter: tenantFilter === "AllTenants" && row?.Tenant ? row.Tenant : tenantFilter,
ID: row?.id,
Type: getScriptEndpoint(row?.scriptType),
AssignTo: "AllDevices",
@@ -249,7 +267,7 @@ const Page = () => {
],
confirmText: 'Are you sure you want to assign "[displayName]" to all users and devices?',
customDataformatter: (row, action, formData) => ({
- tenantFilter: tenantFilter,
+ tenantFilter: tenantFilter === "AllTenants" && row?.Tenant ? row.Tenant : tenantFilter,
ID: row?.id,
Type: getScriptEndpoint(row?.scriptType),
AssignTo: "AllDevicesAndUsers",
@@ -305,7 +323,7 @@ const Page = () => {
customDataformatter: (row, action, formData) => {
const selectedGroups = Array.isArray(formData?.groupTargets) ? formData.groupTargets : [];
return {
- tenantFilter: tenantFilter,
+ tenantFilter: tenantFilter === "AllTenants" && row?.Tenant ? row.Tenant : tenantFilter,
ID: row?.id,
Type: getScriptEndpoint(row?.scriptType),
GroupIds: selectedGroups.map((group) => group.value).filter(Boolean),
@@ -354,6 +372,8 @@ const Page = () => {
};
const simpleColumns = [
+ ...(useReportDB ? ["CacheTimestamp"] : []),
+ ...(useReportDB && isAllTenants ? ["Tenant"] : []),
"scriptType",
"displayName",
"ScriptAssignment",
@@ -363,14 +383,63 @@ const Page = () => {
"lastModifiedDateTime",
];
+ const pageActions = [
+
+ {useReportDB && (
+ <>
+
+
+
+
+ }
+ size="xs"
+ onClick={syncDialog.handleOpen}
+ >
+ Sync
+
+ >
+ )}
+
+
+ : }
+ label={useReportDB ? "Cached" : "Live"}
+ color="primary"
+ size="small"
+ onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
+ clickable={!isAllTenants}
+ disabled={isAllTenants}
+ variant="outlined"
+ />
+
+
+ ,
+ ];
+
return (
<>
+ {
+ if (result?.Metadata?.QueueId) {
+ setSyncQueueId(result?.Metadata?.QueueId);
+ }
+ },
+ }}
+ />
>
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page};
export default Page;
diff --git a/src/pages/endpoint/MEM/reusable-settings/index.js b/src/pages/endpoint/MEM/reusable-settings/index.js
index c301082ea1f0..0c3837e51a0c 100644
--- a/src/pages/endpoint/MEM/reusable-settings/index.js
+++ b/src/pages/endpoint/MEM/reusable-settings/index.js
@@ -1,18 +1,34 @@
-import { Book, DeleteForever } from "@mui/icons-material";
+import { Book, DeleteForever, Sync, CloudDone, Bolt } from "@mui/icons-material";
import { CippReusableSettingsDeployDrawer } from "../../../../components/CippComponents/CippReusableSettingsDeployDrawer.jsx";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog.jsx";
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { useSettings } from "../../../../hooks/use-settings";
import CippJsonView from "../../../../components/CippFormPages/CippJSONView";
+import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { Stack } from "@mui/system";
+import { useDialog } from "../../../../hooks/use-dialog";
+import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
+import { useEffect, useState } from "react";
const Page = () => {
const { currentTenant } = useSettings();
const pageTitle = "Reusable Settings";
+ const isAllTenants = currentTenant === "AllTenants";
+ const syncDialog = useDialog();
+ const [syncQueueId, setSyncQueueId] = useState(null);
+ const [useReportDB, setUseReportDB] = useState(isAllTenants);
+
+ useEffect(() => {
+ setUseReportDB(currentTenant === "AllTenants");
+ }, [currentTenant]);
const actions = [
{
label: "Edit Reusable Setting",
- link: `/endpoint/MEM/reusable-settings/edit?id=[id]&tenant=${currentTenant}&tenantFilter=${currentTenant}`,
+ link: isAllTenants
+ ? "/endpoint/MEM/reusable-settings/edit?id=[id]&tenant=[Tenant]&tenantFilter=[Tenant]"
+ : `/endpoint/MEM/reusable-settings/edit?id=[id]&tenant=${currentTenant}&tenantFilter=${currentTenant}`,
},
{
label: "Delete Reusable Setting",
@@ -47,18 +63,98 @@ const Page = () => {
size: "lg",
};
+ const simpleColumns = [
+ ...(useReportDB ? ["CacheTimestamp"] : []),
+ ...(useReportDB && isAllTenants ? ["Tenant"] : []),
+ "displayName",
+ "description",
+ "id",
+ "version",
+ ];
+
+ const pageActions = [
+
+ {useReportDB && (
+ <>
+
+
+
+
+ }
+ size="xs"
+ onClick={syncDialog.handleOpen}
+ >
+ Sync
+
+ >
+ )}
+
+
+ : }
+ label={useReportDB ? "Cached" : "Live"}
+ color="primary"
+ size="small"
+ onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
+ clickable={!isAllTenants}
+ disabled={isAllTenants}
+ variant="outlined"
+ />
+
+
+ ,
+ ];
+
return (
-
- }
- apiUrl="/api/ListIntuneReusableSettings"
- queryKey={`ListIntuneReusableSettings-${currentTenant}`}
- actions={actions}
- offCanvas={offCanvas}
- simpleColumns={["displayName", "description", "id", "version"]}
- />
+ <>
+
+
+ {pageActions}
+
+ }
+ apiUrl={`/api/ListIntuneReusableSettings${useReportDB ? "?UseReportDB=true" : ""}`}
+ queryKey={`ListIntuneReusableSettings-${currentTenant}-${useReportDB}`}
+ actions={actions}
+ offCanvas={offCanvas}
+ simpleColumns={simpleColumns}
+ />
+ {
+ if (result?.Metadata?.QueueId) {
+ setSyncQueueId(result?.Metadata?.QueueId);
+ }
+ },
+ }}
+ />
+ >
);
};
diff --git a/src/pages/endpoint/applications/list/index.js b/src/pages/endpoint/applications/list/index.js
index 41671638cfce..4b8b60239a47 100644
--- a/src/pages/endpoint/applications/list/index.js
+++ b/src/pages/endpoint/applications/list/index.js
@@ -2,11 +2,14 @@ import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog.jsx";
import { GlobeAltIcon, TrashIcon, UserIcon, UserGroupIcon } from "@heroicons/react/24/outline";
-import { LaptopMac, Sync, BookmarkAdd } from "@mui/icons-material";
+import { LaptopMac, Sync, BookmarkAdd, CloudDone, Bolt } from "@mui/icons-material";
import { CippApplicationDeployDrawer } from "../../../../components/CippComponents/CippApplicationDeployDrawer";
-import { Button, Box } from "@mui/material";
+import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { Stack } from "@mui/system";
import { useSettings } from "../../../../hooks/use-settings.js";
import { useDialog } from "../../../../hooks/use-dialog.js";
+import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
+import { useEffect, useState } from "react";
const assignmentIntentOptions = [
{ label: "Required", value: "Required" },
@@ -44,8 +47,16 @@ const mapOdataToAppType = (odataType) => {
const Page = () => {
const pageTitle = "Applications";
- const syncDialog = useDialog();
+ const vppSyncDialog = useDialog();
+ const cacheSyncDialog = useDialog();
const tenant = useSettings().currentTenant;
+ const isAllTenants = tenant === "AllTenants";
+ const [syncQueueId, setSyncQueueId] = useState(null);
+ const [useReportDB, setUseReportDB] = useState(isAllTenants);
+
+ useEffect(() => {
+ setUseReportDB(tenant === "AllTenants");
+ }, [tenant]);
const getAssignmentFilterFields = () => [
{
@@ -291,6 +302,8 @@ const Page = () => {
};
const simpleColumns = [
+ ...(useReportDB ? ["CacheTimestamp"] : []),
+ ...(useReportDB && isAllTenants ? ["Tenant"] : []),
"displayName",
"AppAssignment",
"AppExclude",
@@ -299,26 +312,75 @@ const Page = () => {
"createdDateTime",
];
+ const pageActions = [
+
+ {useReportDB && (
+ <>
+
+
+
+
+ }
+ size="xs"
+ onClick={cacheSyncDialog.handleOpen}
+ >
+ Sync
+
+ >
+ )}
+
+
+ : }
+ label={useReportDB ? "Cached" : "Live"}
+ color="primary"
+ size="small"
+ onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
+ clickable={!isAllTenants}
+ disabled={isAllTenants}
+ variant="outlined"
+ />
+
+
+ ,
+ ];
+
return (
<>
+
- }>
+ }>
Sync VPP
-
+ {pageActions}
+
}
/>
{
confirmText: `Are you sure you want to sync Apple Volume Purchase Program (VPP) tokens? This will sync all VPP tokens for ${tenant}.`,
}}
/>
+ {
+ if (result?.Metadata?.QueueId) {
+ setSyncQueueId(result?.Metadata?.QueueId);
+ }
+ },
+ }}
+ />
>
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page};
export default Page;
From eb1b096f42539fe6a15b6e97c51edf01b8856a8a Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Sun, 26 Apr 2026 02:50:58 +0800
Subject: [PATCH 061/181] Feat: Central cached page component
---
.../CippComponents/CippReportDBControls.jsx | 195 ++++++++++++++++++
.../administration/mailbox-rules/index.js | 94 +++------
.../email/administration/mailboxes/index.js | 121 ++---------
.../reports/calendar-permissions/index.js | 120 +++--------
.../email/reports/mailbox-forwarding/index.js | 100 ++-------
.../reports/mailbox-permissions/index.js | 120 +++--------
src/pages/endpoint/MEM/list-policies/index.js | 98 ++-------
.../reports/inactive-users-report/index.js | 87 ++------
.../identity/reports/mfa-report/index.js | 135 +++---------
.../security/reports/mde-onboarding/index.js | 78 ++-----
.../reports/application-consent/index.js | 114 +++-------
11 files changed, 435 insertions(+), 827 deletions(-)
create mode 100644 src/components/CippComponents/CippReportDBControls.jsx
diff --git a/src/components/CippComponents/CippReportDBControls.jsx b/src/components/CippComponents/CippReportDBControls.jsx
new file mode 100644
index 000000000000..063fd386bb5b
--- /dev/null
+++ b/src/components/CippComponents/CippReportDBControls.jsx
@@ -0,0 +1,195 @@
+import { useState, useEffect, useMemo, useCallback } from "react";
+import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { Stack } from "@mui/system";
+import { Sync, CloudDone, Bolt } from "@mui/icons-material";
+import { useSettings } from "../../hooks/use-settings";
+import { useDialog } from "../../hooks/use-dialog";
+import { CippApiDialog } from "./CippApiDialog";
+import { CippQueueTracker } from "../CippTable/CippQueueTracker";
+
+/**
+ * Hook + UI component that encapsulates all CIPP Reporting DB cache/live mode logic.
+ *
+ * @param {Object} config
+ * @param {string} config.apiUrl - Base API URL without query params (e.g. "/api/ListMailboxes")
+ * @param {string} config.queryKey - Base query key (e.g. "ListMailboxes")
+ * @param {string} config.cacheName - Cache type name for sync (e.g. "Mailboxes", "IntunePolicies")
+ * @param {string} config.syncTitle - Title for the sync dialog (e.g. "Sync Mailboxes")
+ * @param {string} [config.syncConfirmText] - Custom confirm text. Default auto-generated from cacheName + tenant.
+ * @param {Object} [config.syncData] - Extra data to pass to ExecCIPPDBCache. Merged with { Name: cacheName }.
+ * @param {boolean} [config.allowToggle=true] - Whether the user can toggle between cached and live. False = always cached.
+ * @param {boolean} [config.defaultCached=true] - Initial cached state (when toggle is allowed).
+ * @param {string[]} [config.cacheColumns=["CacheTimestamp"]] - Extra columns to show when in cached mode.
+ * @param {string} [config.tenantColumn="Tenant"] - Column name for tenant (shown in AllTenants mode).
+ * @param {Object} [config.apiData] - Additional static API data to merge (e.g. extra params).
+ *
+ * @returns {Object}
+ * - useReportDB {boolean} - Current cache mode
+ * - setUseReportDB {Function} - Manual override (rarely needed)
+ * - isAllTenants {boolean} - Whether AllTenants is selected
+ * - resolvedApiUrl {string} - API URL with ?UseReportDB=true appended when needed
+ * - resolvedApiData {Object|undefined} - Merged apiData (for pages that use apiData instead of URL params)
+ * - resolvedQueryKey {string} - Query key including tenant and cache mode
+ * - cacheColumns {string[]} - Columns to prepend/append when cached (includes Tenant for AllTenants)
+ * - controls {JSX.Element} - Ready-to-render JSX for the cache toggle, sync button, and queue tracker
+ * - syncDialog {JSX.Element} - The CippApiDialog element to render alongside CippTablePage
+ */
+export function useCippReportDB(config) {
+ const {
+ apiUrl,
+ queryKey,
+ cacheName,
+ syncTitle,
+ syncConfirmText,
+ syncData,
+ allowToggle = true,
+ defaultCached = true,
+ cacheColumns = ["CacheTimestamp"],
+ tenantColumn = "Tenant",
+ apiData: extraApiData,
+ } = config;
+
+ const currentTenant = useSettings().currentTenant;
+ const isAllTenants = currentTenant === "AllTenants";
+ const dialog = useDialog();
+ const [syncQueueId, setSyncQueueId] = useState(null);
+ const [useReportDB, setUseReportDB] = useState(defaultCached);
+
+ // Reset to default whenever tenant changes; AllTenants always forces cached
+ useEffect(() => {
+ if (isAllTenants) {
+ setUseReportDB(true);
+ } else {
+ setUseReportDB(defaultCached);
+ }
+ }, [currentTenant, isAllTenants, defaultCached]);
+
+ // Whether the toggle is actually clickable
+ const canToggle = allowToggle && !isAllTenants;
+
+ // Resolved API URL — append UseReportDB param when cached
+ const resolvedApiUrl = useMemo(() => {
+ if (!useReportDB) return apiUrl;
+ const sep = apiUrl.includes("?") ? "&" : "?";
+ return `${apiUrl}${sep}UseReportDB=true`;
+ }, [apiUrl, useReportDB]);
+
+ // Alternative: for pages that pass apiData prop instead of URL params
+ const resolvedApiData = useMemo(() => {
+ if (!useReportDB && !extraApiData) return undefined;
+ return {
+ ...(extraApiData || {}),
+ ...(useReportDB ? { UseReportDB: true } : {}),
+ };
+ }, [useReportDB, extraApiData]);
+
+ // Query key that includes tenant + mode for proper cache separation
+ const resolvedQueryKey = useMemo(() => {
+ return `${queryKey}-${currentTenant}-${useReportDB}`;
+ }, [queryKey, currentTenant, useReportDB]);
+
+ // Extra columns to show when in cached mode
+ const extraColumns = useMemo(() => {
+ const cols = [];
+ if (useReportDB && isAllTenants) {
+ cols.push(tenantColumn);
+ }
+ if (useReportDB) {
+ cols.push(...cacheColumns);
+ }
+ return cols;
+ }, [useReportDB, isAllTenants, tenantColumn, cacheColumns]);
+
+ const handleSyncSuccess = useCallback((result) => {
+ if (result?.Metadata?.QueueId) {
+ setSyncQueueId(result.Metadata.QueueId);
+ }
+ }, []);
+
+ // Tooltip text
+ const tooltipText = !allowToggle
+ ? "This page always uses cached data from the CIPP reporting database."
+ : isAllTenants
+ ? "AllTenants always uses cached data"
+ : useReportDB
+ ? "Showing cached data — click to switch to live"
+ : "Showing live data — click to switch to cache";
+
+ const confirmText =
+ syncConfirmText ||
+ `Run ${cacheName} cache sync for ${currentTenant}? This will update data immediately.`;
+
+ // The controls JSX
+ const controls = (
+
+ {useReportDB && (
+ <>
+
+
+
+
+ }
+ size="xs"
+ onClick={dialog.handleOpen}
+ disabled={isAllTenants}
+ >
+ Sync
+
+ >
+ )}
+
+
+ : }
+ label={useReportDB ? "Cached" : "Live"}
+ color="primary"
+ size="small"
+ onClick={canToggle ? () => setUseReportDB((prev) => !prev) : undefined}
+ clickable={canToggle}
+ disabled={!canToggle}
+ variant="outlined"
+ />
+
+
+
+ );
+
+ // The sync dialog JSX — render alongside the table page
+ const syncDialogElement = (
+
+ );
+
+ return {
+ useReportDB,
+ setUseReportDB,
+ isAllTenants,
+ resolvedApiUrl,
+ resolvedApiData,
+ resolvedQueryKey,
+ cacheColumns: extraColumns,
+ controls,
+ syncDialog: syncDialogElement,
+ };
+}
diff --git a/src/pages/email/administration/mailbox-rules/index.js b/src/pages/email/administration/mailbox-rules/index.js
index eb414aae760e..4b9a9ece88cb 100644
--- a/src/pages/email/administration/mailbox-rules/index.js
+++ b/src/pages/email/administration/mailbox-rules/index.js
@@ -3,30 +3,31 @@ import { CippTablePage } from "../../../../components/CippComponents/CippTablePa
import { getCippTranslation } from "../../../../utils/get-cipp-translation";
import { getCippFormatting } from "../../../../utils/get-cipp-formatting";
import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard";
-import { Block, PlayArrow, DeleteForever, Sync, Info } from "@mui/icons-material";
-import { Button, SvgIcon, IconButton, Tooltip } from "@mui/material";
-import { Stack } from "@mui/system";
-import { useDialog } from "../../../../hooks/use-dialog";
-import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
-import { useSettings } from "../../../../hooks/use-settings";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
-import { useState } from "react";
+import { Block, PlayArrow, DeleteForever } from "@mui/icons-material";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const Page = () => {
const pageTitle = "Mailbox Rules";
- const currentTenant = useSettings().currentTenant;
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
- const isAllTenants = currentTenant === "AllTenants";
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListMailboxRules",
+ queryKey: "ListMailboxRules",
+ cacheName: "Mailboxes",
+ syncTitle: "Sync Mailbox Rules",
+ syncData: { Types: "Rules" },
+ allowToggle: false,
+ defaultCached: true,
+ });
- const apiData = {
- UseReportDB: true,
- };
-
- const simpleColumns = isAllTenants
- ? ["Tenant", "UserPrincipalName", "Name", "Priority", "Enabled", "From", "CacheTimestamp"]
- : ["UserPrincipalName", "Name", "Priority", "Enabled", "From", "CacheTimestamp"];
+ const simpleColumns = [
+ ...reportDB.cacheColumns.filter((c) => c === "Tenant"),
+ "UserPrincipalName",
+ "Name",
+ "Priority",
+ "Enabled",
+ "From",
+ ...reportDB.cacheColumns.filter((c) => c !== "Tenant"),
+ ];
const actions = [
{
@@ -96,64 +97,19 @@ const Page = () => {
},
};
- const pageActions = [
-
-
-
-
-
-
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- ,
- ];
-
return (
<>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result.Metadata.QueueId);
- }
- },
- url: "/api/ExecCIPPDBCache",
- confirmText: `Run mailbox rules cache sync for ${currentTenant}? This will update mailbox rules data immediately.`,
- relatedQueryKeys: [`ListMailboxRules-${currentTenant}`],
- data: {
- Name: "Mailboxes",
- Types: "Rules",
- },
- }}
+ cardButton={reportDB.controls}
/>
+ {reportDB.syncDialog}
>
);
};
diff --git a/src/pages/email/administration/mailboxes/index.js b/src/pages/email/administration/mailboxes/index.js
index bb3d72bb40fe..f0187d414983 100644
--- a/src/pages/email/administration/mailboxes/index.js
+++ b/src/pages/email/administration/mailboxes/index.js
@@ -3,27 +3,20 @@ import { CippTablePage } from '../../../../components/CippComponents/CippTablePa
import CippExchangeActions from '../../../../components/CippComponents/CippExchangeActions'
import { CippHVEUserDrawer } from '../../../../components/CippComponents/CippHVEUserDrawer.jsx'
import { CippSharedMailboxDrawer } from '../../../../components/CippComponents/CippSharedMailboxDrawer.jsx'
-import { Sync, CloudDone, Bolt } from '@mui/icons-material'
-import { Button, SvgIcon, Tooltip, Chip } from '@mui/material'
-import { useSettings } from '../../../../hooks/use-settings'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
import { Stack } from '@mui/system'
-import { useDialog } from '../../../../hooks/use-dialog'
-import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog'
-import { useState, useEffect } from 'react'
-import { CippQueueTracker } from '../../../../components/CippTable/CippQueueTracker'
const Page = () => {
const pageTitle = 'Mailboxes'
- const currentTenant = useSettings().currentTenant
- const syncDialog = useDialog()
- const [syncQueueId, setSyncQueueId] = useState(null)
- const isAllTenants = currentTenant === 'AllTenants'
- const [useReportDB, setUseReportDB] = useState(true)
-
- useEffect(() => {
- setUseReportDB(true)
- }, [currentTenant])
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListMailboxes',
+ queryKey: 'ListMailboxes',
+ cacheName: 'Mailboxes',
+ syncTitle: 'Sync Mailboxes',
+ allowToggle: true,
+ defaultCached: true,
+ })
// Define off-canvas details
const offCanvas = {
@@ -55,31 +48,22 @@ const Page = () => {
]
// Simplified columns for the table
- const simpleColumns = isAllTenants
- ? [
- 'Tenant', // Tenant
- 'displayName', // Display Name
- 'recipientTypeDetails', // Recipient Type Details
- 'UPN', // User Principal Name
- 'primarySmtpAddress', // Primary Email Address
- 'AdditionalEmailAddresses', // Additional Email Addresses
- 'CacheTimestamp', // Cache Timestamp
- ]
- : [
- 'displayName', // Display Name
- 'recipientTypeDetails', // Recipient Type Details
- 'UPN', // User Principal Name
- 'primarySmtpAddress', // Primary Email Address
- 'AdditionalEmailAddresses', // Additional Email Addresses
- 'CacheTimestamp', // Cache Timestamp
- ]
+ const simpleColumns = [
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
+ 'displayName',
+ 'recipientTypeDetails',
+ 'UPN',
+ 'primarySmtpAddress',
+ 'AdditionalEmailAddresses',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
+ ]
return (
<>
{
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- disabled={isAllTenants}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? 'Cached' : 'Live'}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
+ {reportDB.controls}
}
/>
- {
- if (response?.Metadata?.QueueId) {
- setSyncQueueId(response.Metadata.QueueId)
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
)
}
diff --git a/src/pages/email/reports/calendar-permissions/index.js b/src/pages/email/reports/calendar-permissions/index.js
index 6ca2faac6d0d..eb4620f1cf4f 100644
--- a/src/pages/email/reports/calendar-permissions/index.js
+++ b/src/pages/email/reports/calendar-permissions/index.js
@@ -1,54 +1,44 @@
import { Layout as DashboardLayout } from '../../../../layouts/index.js'
import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
import { useState } from 'react'
-import { Button, Alert, SvgIcon, Tooltip, Chip } from '@mui/material'
-import { useSettings } from '../../../../hooks/use-settings'
+import { Tooltip, Chip } from '@mui/material'
import { Stack } from '@mui/system'
-import { Sync, CloudDone, Person, CalendarMonth } from '@mui/icons-material'
-import { useDialog } from '../../../../hooks/use-dialog'
-import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog'
-import { CippQueueTracker } from '../../../../components/CippTable/CippQueueTracker'
+import { Person, CalendarMonth } from '@mui/icons-material'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
const Page = () => {
const [byUser, setByUser] = useState(true)
- const currentTenant = useSettings().currentTenant
- const syncDialog = useDialog()
- const [syncQueueId, setSyncQueueId] = useState(null)
- const isAllTenants = currentTenant === 'AllTenants'
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListCalendarPermissions',
+ queryKey: 'calendar-permissions',
+ cacheName: 'Mailboxes',
+ syncTitle: 'Sync Calendar Permissions Cache',
+ syncData: { Types: 'CalendarPermissions' },
+ allowToggle: false,
+ defaultCached: true,
+ cacheColumns: ['MailboxCacheTimestamp', 'PermissionCacheTimestamp'],
+ })
const columns = byUser
? [
- ...(isAllTenants ? ['Tenant'] : []),
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
'User',
'UserMailboxType',
'Permissions',
- 'MailboxCacheTimestamp',
- 'PermissionCacheTimestamp',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
]
: [
- ...(isAllTenants ? ['Tenant'] : []),
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
'CalendarUPN',
'CalendarDisplayName',
'CalendarType',
'Permissions',
- 'MailboxCacheTimestamp',
- 'PermissionCacheTimestamp',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
]
- // Compute apiData based on byUser directly (no useState needed)
- const apiData = {
- UseReportDB: true,
- ByUser: byUser,
- }
-
- const pageActions = [
-
-
+ const pageActions = (
+
{
variant="outlined"
/>
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- disabled={isAllTenants}
- >
- Sync
-
-
-
- }
- label="Cached"
- color="primary"
- size="small"
- disabled
- variant="outlined"
- />
-
-
- ,
- ]
+ {reportDB.controls}
+
+ )
return (
<>
- {currentTenant && currentTenant !== '' ? (
-
- ) : (
- Please select a tenant to view calendar permissions.
- )}
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result.Metadata.QueueId)
- }
- },
- }}
+
+ {reportDB.syncDialog}
>
)
}
diff --git a/src/pages/email/reports/mailbox-forwarding/index.js b/src/pages/email/reports/mailbox-forwarding/index.js
index 008637df1a97..a24c324f983f 100644
--- a/src/pages/email/reports/mailbox-forwarding/index.js
+++ b/src/pages/email/reports/mailbox-forwarding/index.js
@@ -1,36 +1,28 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { useState } from "react";
-import { Button, Alert, SvgIcon, IconButton, Tooltip } from "@mui/material";
-import { useSettings } from "../../../../hooks/use-settings";
-import { Stack } from "@mui/system";
-import { Sync, Info } from "@mui/icons-material";
-import { useDialog } from "../../../../hooks/use-dialog";
-import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const Page = () => {
- const currentTenant = useSettings().currentTenant;
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
-
- const isAllTenants = currentTenant === "AllTenants";
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListMailboxForwarding",
+ queryKey: "mailbox-forwarding",
+ cacheName: "Mailboxes",
+ syncTitle: "Sync Mailbox Cache",
+ allowToggle: false,
+ defaultCached: true,
+ });
const columns = [
- ...(isAllTenants ? ["Tenant"] : []),
+ ...reportDB.cacheColumns.filter((c) => c === "Tenant"),
"UPN",
"DisplayName",
"RecipientTypeDetails",
"ForwardingType",
"ForwardTo",
"DeliverToMailboxAndForward",
- "CacheTimestamp",
+ ...reportDB.cacheColumns.filter((c) => c !== "Tenant"),
];
- const apiData = {
- UseReportDB: true,
- };
-
const filters = [
{
filterName: "External Forwarding",
@@ -44,69 +36,19 @@ const Page = () => {
},
];
- const pageActions = [
-
-
-
-
-
-
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- disabled={isAllTenants}
- >
- Sync
-
- ,
- ];
-
return (
<>
- {currentTenant && currentTenant !== "" ? (
-
- ) : (
- Please select a tenant to view mailbox forwarding settings.
- )}
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result.Metadata.QueueId);
- }
- },
- }}
+
+ {reportDB.syncDialog}
>
);
};
diff --git a/src/pages/email/reports/mailbox-permissions/index.js b/src/pages/email/reports/mailbox-permissions/index.js
index cdeff1997a46..da771b6e90f0 100644
--- a/src/pages/email/reports/mailbox-permissions/index.js
+++ b/src/pages/email/reports/mailbox-permissions/index.js
@@ -1,54 +1,44 @@
import { Layout as DashboardLayout } from '../../../../layouts/index.js'
import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
import { useState } from 'react'
-import { Button, Alert, SvgIcon, Tooltip, Chip } from '@mui/material'
-import { useSettings } from '../../../../hooks/use-settings'
+import { Tooltip, Chip } from '@mui/material'
import { Stack } from '@mui/system'
-import { Sync, CloudDone, Person, Inbox } from '@mui/icons-material'
-import { useDialog } from '../../../../hooks/use-dialog'
-import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog'
-import { CippQueueTracker } from '../../../../components/CippTable/CippQueueTracker'
+import { Person, Inbox } from '@mui/icons-material'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
const Page = () => {
const [byUser, setByUser] = useState(true)
- const currentTenant = useSettings().currentTenant
- const syncDialog = useDialog()
- const [syncQueueId, setSyncQueueId] = useState(null)
- const isAllTenants = currentTenant === 'AllTenants'
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListMailboxPermissions',
+ queryKey: 'mailbox-permissions',
+ cacheName: 'Mailboxes',
+ syncTitle: 'Sync Mailbox Permissions Cache',
+ syncData: { Types: 'Permissions' },
+ allowToggle: false,
+ defaultCached: true,
+ cacheColumns: ['MailboxCacheTimestamp', 'PermissionCacheTimestamp'],
+ })
const columns = byUser
? [
- ...(isAllTenants ? ['Tenant'] : []),
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
'User',
'UserMailboxType',
'Permissions',
- 'MailboxCacheTimestamp',
- 'PermissionCacheTimestamp',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
]
: [
- ...(isAllTenants ? ['Tenant'] : []),
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
'MailboxUPN',
'MailboxDisplayName',
'MailboxType',
'Permissions',
- 'MailboxCacheTimestamp',
- 'PermissionCacheTimestamp',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
]
- // Compute apiData based on byUser directly (no useState needed)
- const apiData = {
- UseReportDB: true,
- ByUser: byUser,
- }
-
- const pageActions = [
-
-
+ const pageActions = (
+
{
variant="outlined"
/>
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- disabled={isAllTenants}
- >
- Sync
-
-
-
- }
- label="Cached"
- color="primary"
- size="small"
- disabled
- variant="outlined"
- />
-
-
- ,
- ]
+ {reportDB.controls}
+
+ )
return (
<>
- {currentTenant && currentTenant !== '' ? (
-
- ) : (
- Please select a tenant to view mailbox permissions.
- )}
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result.Metadata.QueueId)
- }
- },
- }}
+
+ {reportDB.syncDialog}
>
)
}
diff --git a/src/pages/endpoint/MEM/list-policies/index.js b/src/pages/endpoint/MEM/list-policies/index.js
index 1a78f45906cb..8cc3cd2cb653 100644
--- a/src/pages/endpoint/MEM/list-policies/index.js
+++ b/src/pages/endpoint/MEM/list-policies/index.js
@@ -4,27 +4,22 @@ import { PermissionButton } from '../../../../utils/permissions.js'
import { CippPolicyDeployDrawer } from '../../../../components/CippComponents/CippPolicyDeployDrawer.jsx'
import { useSettings } from '../../../../hooks/use-settings.js'
import { useCippIntunePolicyActions } from '../../../../components/CippComponents/CippIntunePolicyActions.jsx'
-import { Sync, Info, CloudDone, Bolt } from '@mui/icons-material'
-import { Button, SvgIcon, IconButton, Tooltip, Chip } from '@mui/material'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
import { Stack } from '@mui/system'
-import { useDialog } from '../../../../hooks/use-dialog'
-import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog'
-import { CippQueueTracker } from '../../../../components/CippTable/CippQueueTracker'
-import { useState, useEffect } from 'react'
const Page = () => {
const pageTitle = 'Configuration Policies'
const cardButtonPermissions = ['Endpoint.MEM.ReadWrite']
const tenant = useSettings().currentTenant
- const isAllTenants = tenant === 'AllTenants'
- const syncDialog = useDialog()
- const [syncQueueId, setSyncQueueId] = useState(null)
- const [useReportDB, setUseReportDB] = useState(isAllTenants)
- // Reset toggle whenever the tenant changes
- useEffect(() => {
- setUseReportDB(tenant === 'AllTenants')
- }, [tenant])
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListIntunePolicy',
+ queryKey: 'ListIntunePolicy',
+ cacheName: 'IntunePolicies',
+ syncTitle: 'Sync Intune Policy Report',
+ allowToggle: true,
+ defaultCached: false,
+ })
const actions = useCippIntunePolicyActions(tenant, 'URLName', {
templateData: {
@@ -45,7 +40,7 @@ const Page = () => {
}
const simpleColumns = [
- ...(useReportDB ? ['Tenant', 'CacheTimestamp'] : []),
+ ...reportDB.cacheColumns,
'displayName',
'PolicyTypeName',
'PolicyAssignment',
@@ -54,62 +49,15 @@ const Page = () => {
'lastModifiedDateTime',
]
- const pageActions = [
-
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? 'Cached' : 'Live'}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
- ,
- ]
-
return (
<>
{
requiredPermissions={cardButtonPermissions}
PermissionButton={PermissionButton}
/>
- {pageActions}
+ {reportDB.controls}
}
/>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId)
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
)
}
diff --git a/src/pages/identity/reports/inactive-users-report/index.js b/src/pages/identity/reports/inactive-users-report/index.js
index 168231bf6c26..8e8e7a0edc50 100644
--- a/src/pages/identity/reports/inactive-users-report/index.js
+++ b/src/pages/identity/reports/inactive-users-report/index.js
@@ -1,26 +1,21 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
import { EyeIcon, TrashIcon } from "@heroicons/react/24/outline";
-import { Edit, Block, Sync, Info } from "@mui/icons-material";
-import {
- Button,
- SvgIcon,
- IconButton,
- Tooltip,
- Alert,
-} from "@mui/material";
-import { Stack } from "@mui/system";
-import { useSettings } from "../../../../hooks/use-settings";
-import { useDialog } from "../../../../hooks/use-dialog";
-import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
+import { Edit, Block } from "@mui/icons-material";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const Page = () => {
const pageTitle = "Inactive users (6 months)";
- const apiUrl = "/api/ListInactiveAccounts";
- const currentTenant = useSettings().currentTenant;
- const syncDialog = useDialog();
- const isAllTenants = currentTenant === "AllTenants";
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListInactiveAccounts",
+ queryKey: "inactive-users",
+ cacheName: "Users",
+ syncTitle: "Sync User Cache",
+ allowToggle: false,
+ defaultCached: true,
+ cacheColumns: ["lastRefreshedDateTime"],
+ });
const actions = [
{
@@ -74,6 +69,7 @@ const Page = () => {
};
const simpleColumns = [
+ ...reportDB.cacheColumns.filter((c) => c === "Tenant"),
"tenantDisplayName",
"userPrincipalName",
"displayName",
@@ -81,60 +77,21 @@ const Page = () => {
"lastNonInteractiveSignInDateTime",
"numberOfAssignedLicenses",
"daysSinceLastSignIn",
- "lastRefreshedDateTime",
- ];
-
- const pageActions = [
-
-
-
-
-
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- disabled={isAllTenants}
- >
- Sync
-
- ,
+ ...reportDB.cacheColumns.filter((c) => c !== "Tenant"),
];
return (
<>
- {currentTenant && currentTenant !== "" ? (
-
- ) : (
- Please select a tenant to view inactive users.
- )}
-
+ {reportDB.syncDialog}
>
);
};
diff --git a/src/pages/identity/reports/mfa-report/index.js b/src/pages/identity/reports/mfa-report/index.js
index d6ee22e99081..668030f9f923 100644
--- a/src/pages/identity/reports/mfa-report/index.js
+++ b/src/pages/identity/reports/mfa-report/index.js
@@ -1,58 +1,39 @@
import { Layout as DashboardLayout } from '../../../../layouts/index.js'
import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
-import { LockPerson, Sync, CloudDone } from '@mui/icons-material'
-import { Button, Alert, SvgIcon, Tooltip, Chip } from '@mui/material'
-import { useSettings } from '../../../../hooks/use-settings'
-import { Stack } from '@mui/system'
-import { useDialog } from '../../../../hooks/use-dialog'
-import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog'
+import { LockPerson } from '@mui/icons-material'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
import { useRouter } from 'next/router'
-import { useMemo, useState } from 'react'
-import { CippQueueTracker } from '../../../../components/CippTable/CippQueueTracker'
+import { useMemo } from 'react'
const Page = () => {
const pageTitle = 'MFA Report'
- const apiUrl = '/api/ListMFAUsers'
- const currentTenant = useSettings().currentTenant
- const syncDialog = useDialog()
const router = useRouter()
- const [syncQueueId, setSyncQueueId] = useState(null)
- const isAllTenants = currentTenant === 'AllTenants'
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListMFAUsers',
+ queryKey: 'ListMFAUsers',
+ cacheName: 'MFAState',
+ syncTitle: 'Sync MFA Report',
+ allowToggle: false,
+ defaultCached: true,
+ })
+
+ const simpleColumns = [
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
+ 'UPN',
+ 'AccountEnabled',
+ 'isLicensed',
+ 'MFARegistration',
+ 'PerUser',
+ 'CoveredBySD',
+ 'CoveredByCA',
+ 'MFAMethods',
+ 'CAPolicies',
+ 'IsAdmin',
+ 'UserType',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
+ ]
- const apiData = {
- UseReportDB: true,
- }
- const simpleColumns = isAllTenants
- ? [
- 'Tenant',
- 'UPN',
- 'AccountEnabled',
- 'isLicensed',
- 'MFARegistration',
- 'PerUser',
- 'CoveredBySD',
- 'CoveredByCA',
- 'MFAMethods',
- 'CAPolicies',
- 'IsAdmin',
- 'UserType',
- 'CacheTimestamp',
- ]
- : [
- 'UPN',
- 'AccountEnabled',
- 'isLicensed',
- 'MFARegistration',
- 'PerUser',
- 'CoveredBySD',
- 'CoveredByCA',
- 'MFAMethods',
- 'CAPolicies',
- 'IsAdmin',
- 'UserType',
- 'CacheTimestamp',
- ]
const filters = [
{
filterName: 'Enabled, licensed users',
@@ -88,7 +69,6 @@ const Page = () => {
},
]
- // Parse filters from URL query parameters
const urlFilters = useMemo(() => {
if (router.query.filters) {
try {
@@ -127,71 +107,20 @@ const Page = () => {
},
]
- const pageActions = [
-
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
-
-
- }
- label="Cached"
- color="primary"
- size="small"
- disabled
- variant="outlined"
- />
-
-
- ,
- ]
-
return (
<>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId)
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
)
}
diff --git a/src/pages/security/reports/mde-onboarding/index.js b/src/pages/security/reports/mde-onboarding/index.js
index 015653b411c1..839d85f6906a 100644
--- a/src/pages/security/reports/mde-onboarding/index.js
+++ b/src/pages/security/reports/mde-onboarding/index.js
@@ -12,16 +12,15 @@ import {
CircularProgress,
Button,
SvgIcon,
- IconButton,
- Tooltip,
} from "@mui/material";
-import { Sync, Info, OpenInNew } from "@mui/icons-material";
+import { Sync, OpenInNew } from "@mui/icons-material";
import { ApiGetCall } from "../../../../api/ApiCall";
import { CippHead } from "../../../../components/CippComponents/CippHead";
import { useDialog } from "../../../../hooks/use-dialog";
import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
import { useState } from "react";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const statusColors = {
enabled: "success",
@@ -78,11 +77,6 @@ const SingleTenantView = ({ tenant }) => {
queryKey={`MDEOnboarding-${tenant}`}
title="MDE Onboarding Sync"
/>
-
-
-
-
-
@@ -163,73 +157,35 @@ const SingleTenantView = ({ tenant }) => {
const Page = () => {
const currentTenant = useSettings().currentTenant;
const isAllTenants = currentTenant === "AllTenants";
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
+
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListMDEOnboarding",
+ queryKey: "MDEOnboarding",
+ cacheName: "MDEOnboarding",
+ syncTitle: "Sync MDE Onboarding Status",
+ allowToggle: false,
+ defaultCached: true,
+ });
if (!isAllTenants) {
return ;
}
- const pageActions = [
-
-
-
-
-
-
-
-
-
-
- }
- size="small"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- ,
- ];
-
return (
<>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result.Metadata.QueueId);
- }
- },
- }}
+ cardButton={reportDB.controls}
/>
+ {reportDB.syncDialog}
>
);
};
Page.getLayout = (page) => {page};
-export default Page;
\ No newline at end of file
+export default Page;
diff --git a/src/pages/tenant/reports/application-consent/index.js b/src/pages/tenant/reports/application-consent/index.js
index 743b4226b763..08ac8b35d47c 100644
--- a/src/pages/tenant/reports/application-consent/index.js
+++ b/src/pages/tenant/reports/application-consent/index.js
@@ -1,107 +1,39 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { Sync, CloudDone, Bolt } from "@mui/icons-material";
-import { Button, SvgIcon, Tooltip, Chip } from "@mui/material";
-import { useSettings } from "../../../../hooks/use-settings";
-import { Stack } from "@mui/system";
-import { useDialog } from "../../../../hooks/use-dialog";
-import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
-import { useState, useEffect } from "react";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const pageTitle = "Consented Applications";
const Page = () => {
- const currentTenant = useSettings().currentTenant;
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
-
- const isAllTenants = currentTenant === "AllTenants";
- const [useReportDB, setUseReportDB] = useState(true);
-
- useEffect(() => {
- setUseReportDB(true);
- }, [currentTenant]);
-
- const simpleColumns = isAllTenants
- ? ["Tenant", "Name", "ApplicationID", "ObjectID", "Scope", "StartTime", "CacheTimestamp"]
- : ["Name", "ApplicationID", "ObjectID", "Scope", "StartTime", "CacheTimestamp"];
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListOAuthApps",
+ queryKey: "ListOAuthApps",
+ cacheName: "OAuth2PermissionGrants",
+ syncTitle: "Sync Consented Applications",
+ allowToggle: true,
+ defaultCached: true,
+ });
+
+ const simpleColumns = [
+ ...reportDB.cacheColumns.filter((c) => c === "Tenant"),
+ "Name",
+ "ApplicationID",
+ "ObjectID",
+ "Scope",
+ "StartTime",
+ ...reportDB.cacheColumns.filter((c) => c !== "Tenant"),
+ ];
return (
<>
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- disabled={isAllTenants}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? "Cached" : "Live"}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
-
- }
- />
- {
- if (response?.Metadata?.QueueId) {
- setSyncQueueId(response.Metadata.QueueId);
- }
- },
- }}
+ cardButton={reportDB.controls}
/>
+ {reportDB.syncDialog}
>
);
};
From 1707506b0a39fbf7c0154b9608b9d90a69c19331 Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Sat, 25 Apr 2026 21:22:00 +0200
Subject: [PATCH 062/181] feat: integrate useCippReportDB for data handling
- Replaced local state management for report database usage with useCippReportDB hook across multiple components.
- Simplified API calls and state management for caching and syncing data.
- Removed redundant code related to tenant checks and sync dialogs.
---
.../CippComponents/CippReportDBControls.jsx | 30 ++++--
.../endpoint/MEM/assignment-filters/index.js | 102 +++---------------
src/pages/endpoint/MEM/devices/index.js | 86 +--------------
.../MEM/list-appprotection-policies/index.js | 98 +++--------------
.../MEM/list-compliance-policies/index.js | 98 +++--------------
src/pages/endpoint/MEM/list-scripts/index.jsx | 101 +++--------------
.../endpoint/MEM/reusable-settings/index.js | 100 +++--------------
src/pages/endpoint/applications/list/index.js | 98 +++--------------
8 files changed, 112 insertions(+), 601 deletions(-)
diff --git a/src/components/CippComponents/CippReportDBControls.jsx b/src/components/CippComponents/CippReportDBControls.jsx
index 063fd386bb5b..889185e5bfad 100644
--- a/src/components/CippComponents/CippReportDBControls.jsx
+++ b/src/components/CippComponents/CippReportDBControls.jsx
@@ -1,4 +1,4 @@
-import { useState, useEffect, useMemo, useCallback } from "react";
+import { useState, useMemo, useCallback } from "react";
import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
import { Stack } from "@mui/system";
import { Sync, CloudDone, Bolt } from "@mui/icons-material";
@@ -53,16 +53,24 @@ export function useCippReportDB(config) {
const isAllTenants = currentTenant === "AllTenants";
const dialog = useDialog();
const [syncQueueId, setSyncQueueId] = useState(null);
- const [useReportDB, setUseReportDB] = useState(defaultCached);
+ const [cacheOverride, setCacheOverride] = useState({ tenant: null, value: null });
+ const useReportDB = isAllTenants
+ ? true
+ : cacheOverride.tenant === currentTenant
+ ? cacheOverride.value
+ : defaultCached;
+ const setUseReportDB = useCallback(
+ (valueOrUpdater) => {
+ setCacheOverride((prev) => {
+ const previousValue = prev.tenant === currentTenant ? prev.value : defaultCached;
+ const nextValue =
+ typeof valueOrUpdater === "function" ? valueOrUpdater(previousValue) : valueOrUpdater;
- // Reset to default whenever tenant changes; AllTenants always forces cached
- useEffect(() => {
- if (isAllTenants) {
- setUseReportDB(true);
- } else {
- setUseReportDB(defaultCached);
- }
- }, [currentTenant, isAllTenants, defaultCached]);
+ return { tenant: currentTenant, value: nextValue };
+ });
+ },
+ [currentTenant, defaultCached],
+ );
// Whether the toggle is actually clickable
const canToggle = allowToggle && !isAllTenants;
@@ -173,7 +181,7 @@ export function useCippReportDB(config) {
relatedQueryKeys: [`${queryKey}-${currentTenant}-true`],
data: {
Name: cacheName,
- Types: "None",
+ ...(cacheName === "Mailboxes" ? { Types: "None" } : {}),
...(syncData || {}),
},
onSuccess: handleSyncSuccess,
diff --git a/src/pages/endpoint/MEM/assignment-filters/index.js b/src/pages/endpoint/MEM/assignment-filters/index.js
index 32fd698663a2..bedf0ef1ada4 100644
--- a/src/pages/endpoint/MEM/assignment-filters/index.js
+++ b/src/pages/endpoint/MEM/assignment-filters/index.js
@@ -1,27 +1,23 @@
-import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { Button } from "@mui/material";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog.jsx";
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import Link from "next/link";
import { TrashIcon } from "@heroicons/react/24/outline";
-import { Edit, Add, Book, Sync, CloudDone, Bolt } from "@mui/icons-material";
+import { Edit, Add, Book } from "@mui/icons-material";
import { Stack } from "@mui/system";
-import { useSettings } from "../../../../hooks/use-settings";
-import { useDialog } from "../../../../hooks/use-dialog.js";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
-import { useEffect, useState } from "react";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const Page = () => {
const pageTitle = "Assignment Filters";
- const { currentTenant } = useSettings();
- const isAllTenants = currentTenant === "AllTenants";
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
- const [useReportDB, setUseReportDB] = useState(isAllTenants);
- useEffect(() => {
- setUseReportDB(currentTenant === "AllTenants");
- }, [currentTenant]);
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListAssignmentFilters",
+ queryKey: "assignment-filters",
+ cacheName: "IntuneAssignmentFilters",
+ syncTitle: "Sync Assignment Filters Report",
+ allowToggle: true,
+ defaultCached: false,
+ });
const actions = [
{
@@ -75,8 +71,7 @@ const Page = () => {
};
const simpleColumns = [
- ...(useReportDB ? ["CacheTimestamp"] : []),
- ...(useReportDB && isAllTenants ? ["Tenant"] : []),
+ ...reportDB.cacheColumns,
"displayName",
"description",
"platform",
@@ -84,53 +79,6 @@ const Page = () => {
"rule",
];
- const pageActions = [
-
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? "Cached" : "Live"}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
- ,
- ];
-
return (
<>
{
}>
Add Assignment Filter
- {pageActions}
+ {reportDB.controls}
}
- apiUrl={`/api/ListAssignmentFilters${useReportDB ? "?UseReportDB=true" : ""}`}
- queryKey={`assignment-filters-${currentTenant}-${useReportDB}`}
+ apiUrl={reportDB.resolvedApiUrl}
+ queryKey={reportDB.resolvedQueryKey}
actions={actions}
offCanvas={offCanvas}
simpleColumns={simpleColumns}
/>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId);
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
);
};
diff --git a/src/pages/endpoint/MEM/devices/index.js b/src/pages/endpoint/MEM/devices/index.js
index 5f1d42f3254e..087052560120 100644
--- a/src/pages/endpoint/MEM/devices/index.js
+++ b/src/pages/endpoint/MEM/devices/index.js
@@ -4,14 +4,10 @@ import { CippApiDialog } from "../../../../components/CippComponents/CippApiDial
import { useSettings } from "../../../../hooks/use-settings";
import { useDialog } from "../../../../hooks/use-dialog.js";
import { EyeIcon } from "@heroicons/react/24/outline";
-import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { Button } from "@mui/material";
import { Stack } from "@mui/system";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
-import { useEffect, useState } from "react";
import {
Sync,
- CloudDone,
- Bolt,
RestartAlt,
LocationOn,
Password,
@@ -30,15 +26,7 @@ import {
const Page = () => {
const pageTitle = "Devices";
const tenantFilter = useSettings().currentTenant;
- const isAllTenants = tenantFilter === "AllTenants";
const depSyncDialog = useDialog();
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
- const [useReportDB, setUseReportDB] = useState(isAllTenants);
-
- useEffect(() => {
- setUseReportDB(tenantFilter === "AllTenants");
- }, [tenantFilter]);
const actions = [
{
@@ -398,8 +386,6 @@ const Page = () => {
};
const simpleColumns = [
- ...(useReportDB ? ["CacheTimestamp"] : []),
- ...(useReportDB && isAllTenants ? ["Tenant"] : []),
"deviceName",
"userPrincipalName",
"complianceState",
@@ -413,53 +399,6 @@ const Page = () => {
"joinType",
];
- const pageActions = [
-
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? "Cached" : "Live"}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
- ,
- ];
-
return (
<>
{
apiUrl="/api/ListGraphRequest"
apiData={{
Endpoint: "deviceManagement/managedDevices",
- ...(useReportDB ? { UseReportDB: true } : {}),
}}
apiDataKey="Results"
actions={actions}
- queryKey={`MEMDevices-${tenantFilter}-${useReportDB}`}
+ queryKey={`MEMDevices-${tenantFilter}`}
offCanvas={offCanvas}
simpleColumns={simpleColumns}
cardButton={
@@ -479,7 +417,6 @@ const Page = () => {
}>
Sync DEP
- {pageActions}
}
/>
@@ -493,25 +430,6 @@ const Page = () => {
confirmText: `Are you sure you want to sync Apple Device Enrollment Program (DEP) tokens? This will sync all DEP tokens for ${tenantFilter}. This may take several minutes to complete in the background, and can only be done every 15 minutes.`,
}}
/>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId);
- }
- },
- }}
- />
>
);
};
diff --git a/src/pages/endpoint/MEM/list-appprotection-policies/index.js b/src/pages/endpoint/MEM/list-appprotection-policies/index.js
index f20bee7ffcc2..b864c1a0a447 100644
--- a/src/pages/endpoint/MEM/list-appprotection-policies/index.js
+++ b/src/pages/endpoint/MEM/list-appprotection-policies/index.js
@@ -1,29 +1,25 @@
import { Layout as DashboardLayout } from '../../../../layouts/index.js'
import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
-import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog.jsx'
import { PermissionButton } from '../../../../utils/permissions.js'
import { CippPolicyDeployDrawer } from '../../../../components/CippComponents/CippPolicyDeployDrawer.jsx'
import { useSettings } from '../../../../hooks/use-settings.js'
import { useCippIntunePolicyActions } from '../../../../components/CippComponents/CippIntunePolicyActions.jsx'
-import { Sync, CloudDone, Bolt } from '@mui/icons-material'
-import { Button, Chip, SvgIcon, Tooltip } from '@mui/material'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
import { Stack } from '@mui/system'
-import { useDialog } from '../../../../hooks/use-dialog'
-import { CippQueueTracker } from '../../../../components/CippTable/CippQueueTracker'
-import { useEffect, useState } from 'react'
const Page = () => {
const pageTitle = 'App Protection & Configuration Policies'
const cardButtonPermissions = ['Endpoint.MEM.ReadWrite']
const tenant = useSettings().currentTenant
- const isAllTenants = tenant === 'AllTenants'
- const syncDialog = useDialog()
- const [syncQueueId, setSyncQueueId] = useState(null)
- const [useReportDB, setUseReportDB] = useState(isAllTenants)
- useEffect(() => {
- setUseReportDB(tenant === 'AllTenants')
- }, [tenant])
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListAppProtectionPolicies',
+ queryKey: 'ListAppProtectionPolicies',
+ cacheName: 'IntuneAppProtectionPolicies',
+ syncTitle: 'Sync App Protection Policies Report',
+ allowToggle: true,
+ defaultCached: false,
+ })
const actions = useCippIntunePolicyActions(tenant, 'URLName', {
templateData: {
@@ -46,8 +42,7 @@ const Page = () => {
}
const simpleColumns = [
- ...(useReportDB ? ['CacheTimestamp'] : []),
- ...(useReportDB && isAllTenants ? ['Tenant'] : []),
+ ...reportDB.cacheColumns,
'displayName',
'PolicyTypeName',
'PolicyAssignment',
@@ -55,59 +50,12 @@ const Page = () => {
'lastModifiedDateTime',
]
- const pageActions = [
-
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? 'Cached' : 'Live'}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
- ,
- ]
-
return (
<>
{
requiredPermissions={cardButtonPermissions}
PermissionButton={PermissionButton}
/>
- {pageActions}
+ {reportDB.controls}
}
/>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId)
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
)
}
diff --git a/src/pages/endpoint/MEM/list-compliance-policies/index.js b/src/pages/endpoint/MEM/list-compliance-policies/index.js
index 0b8e395c3db0..32574567a0ff 100644
--- a/src/pages/endpoint/MEM/list-compliance-policies/index.js
+++ b/src/pages/endpoint/MEM/list-compliance-policies/index.js
@@ -1,29 +1,25 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog.jsx";
import { PermissionButton } from "../../../../utils/permissions.js";
import { CippPolicyDeployDrawer } from "../../../../components/CippComponents/CippPolicyDeployDrawer.jsx";
import { useSettings } from "../../../../hooks/use-settings.js";
import { useCippIntunePolicyActions } from "../../../../components/CippComponents/CippIntunePolicyActions.jsx";
-import { Sync, CloudDone, Bolt } from "@mui/icons-material";
-import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
import { Stack } from "@mui/system";
-import { useDialog } from "../../../../hooks/use-dialog";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
-import { useEffect, useState } from "react";
const Page = () => {
const pageTitle = "Intune Compliance Policies";
const cardButtonPermissions = ["Endpoint.MEM.ReadWrite"];
const tenant = useSettings().currentTenant;
- const isAllTenants = tenant === "AllTenants";
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
- const [useReportDB, setUseReportDB] = useState(isAllTenants);
- useEffect(() => {
- setUseReportDB(tenant === "AllTenants");
- }, [tenant]);
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListCompliancePolicies",
+ queryKey: "ListCompliancePolicies",
+ cacheName: "IntuneCompliancePolicies",
+ syncTitle: "Sync Compliance Policies Report",
+ allowToggle: true,
+ defaultCached: false,
+ });
const actions = useCippIntunePolicyActions(tenant, "deviceCompliancePolicies", {
templateData: {
@@ -44,8 +40,7 @@ const Page = () => {
};
const simpleColumns = [
- ...(useReportDB ? ["CacheTimestamp"] : []),
- ...(useReportDB && isAllTenants ? ["Tenant"] : []),
+ ...reportDB.cacheColumns,
"displayName",
"PolicyTypeName",
"PolicyAssignment",
@@ -54,59 +49,12 @@ const Page = () => {
"lastModifiedDateTime",
];
- const pageActions = [
-
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? "Cached" : "Live"}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
- ,
- ];
-
return (
<>
{
requiredPermissions={cardButtonPermissions}
PermissionButton={PermissionButton}
/>
- {pageActions}
+ {reportDB.controls}
}
/>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId);
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
);
};
diff --git a/src/pages/endpoint/MEM/list-scripts/index.jsx b/src/pages/endpoint/MEM/list-scripts/index.jsx
index 11b480fae484..07abf51f5fc1 100644
--- a/src/pages/endpoint/MEM/list-scripts/index.jsx
+++ b/src/pages/endpoint/MEM/list-scripts/index.jsx
@@ -1,6 +1,5 @@
import { Layout as DashboardLayout } from "../../../../layouts/index";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage";
-import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
import {
TrashIcon,
PencilIcon,
@@ -17,19 +16,15 @@ import {
IconButton,
CircularProgress,
DialogActions,
- Chip,
- SvgIcon,
- Tooltip,
} from "@mui/material";
import { CippCodeBlock } from "../../../../components/CippComponents/CippCodeBlock";
import { useState, useEffect, useMemo } from "react";
import { useDispatch } from "react-redux";
-import { Close, Save, LaptopChromebook, Sync, CloudDone, Bolt } from "@mui/icons-material";
+import { Close, Save, LaptopChromebook } from "@mui/icons-material";
import { useSettings } from "../../../../hooks/use-settings";
-import { useDialog } from "../../../../hooks/use-dialog";
import { Stack } from "@mui/system";
import { useQuery, useQueryClient } from "@tanstack/react-query";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const assignmentModeOptions = [
{ label: "Replace existing assignments", value: "replace" },
@@ -48,14 +43,14 @@ const Page = () => {
const [scriptTenant, setScriptTenant] = useState(null);
const tenantFilter = useSettings().currentTenant;
- const isAllTenants = tenantFilter === "AllTenants";
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
- const [useReportDB, setUseReportDB] = useState(isAllTenants);
-
- useEffect(() => {
- setUseReportDB(tenantFilter === "AllTenants");
- }, [tenantFilter]);
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListIntuneScript",
+ queryKey: "ListIntuneScript",
+ cacheName: "IntuneScripts",
+ syncTitle: "Sync Intune Scripts Report",
+ allowToggle: true,
+ defaultCached: false,
+ });
const dispatch = useDispatch();
@@ -372,8 +367,7 @@ const Page = () => {
};
const simpleColumns = [
- ...(useReportDB ? ["CacheTimestamp"] : []),
- ...(useReportDB && isAllTenants ? ["Tenant"] : []),
+ ...reportDB.cacheColumns,
"scriptType",
"displayName",
"ScriptAssignment",
@@ -383,63 +377,16 @@ const Page = () => {
"lastModifiedDateTime",
];
- const pageActions = [
-
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? "Cached" : "Live"}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
- ,
- ];
-
return (
<>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId);
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
);
};
diff --git a/src/pages/endpoint/MEM/reusable-settings/index.js b/src/pages/endpoint/MEM/reusable-settings/index.js
index 0c3837e51a0c..75219f0d4136 100644
--- a/src/pages/endpoint/MEM/reusable-settings/index.js
+++ b/src/pages/endpoint/MEM/reusable-settings/index.js
@@ -1,27 +1,25 @@
-import { Book, DeleteForever, Sync, CloudDone, Bolt } from "@mui/icons-material";
+import { Book, DeleteForever } from "@mui/icons-material";
import { CippReusableSettingsDeployDrawer } from "../../../../components/CippComponents/CippReusableSettingsDeployDrawer.jsx";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog.jsx";
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { useSettings } from "../../../../hooks/use-settings";
import CippJsonView from "../../../../components/CippFormPages/CippJSONView";
-import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
import { Stack } from "@mui/system";
-import { useDialog } from "../../../../hooks/use-dialog";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
-import { useEffect, useState } from "react";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const Page = () => {
const { currentTenant } = useSettings();
const pageTitle = "Reusable Settings";
- const isAllTenants = currentTenant === "AllTenants";
- const syncDialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
- const [useReportDB, setUseReportDB] = useState(isAllTenants);
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListIntuneReusableSettings",
+ queryKey: "ListIntuneReusableSettings",
+ cacheName: "IntuneReusableSettings",
+ syncTitle: "Sync Reusable Settings Report",
+ allowToggle: true,
+ defaultCached: false,
+ });
+ const isAllTenants = reportDB.isAllTenants;
- useEffect(() => {
- setUseReportDB(currentTenant === "AllTenants");
- }, [currentTenant]);
const actions = [
{
@@ -64,61 +62,13 @@ const Page = () => {
};
const simpleColumns = [
- ...(useReportDB ? ["CacheTimestamp"] : []),
- ...(useReportDB && isAllTenants ? ["Tenant"] : []),
+ ...reportDB.cacheColumns,
"displayName",
"description",
"id",
"version",
];
- const pageActions = [
-
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? "Cached" : "Live"}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
- ,
- ];
-
return (
<>
{
cardButton={
- {pageActions}
+ {reportDB.controls}
}
- apiUrl={`/api/ListIntuneReusableSettings${useReportDB ? "?UseReportDB=true" : ""}`}
- queryKey={`ListIntuneReusableSettings-${currentTenant}-${useReportDB}`}
+ apiUrl={reportDB.resolvedApiUrl}
+ queryKey={reportDB.resolvedQueryKey}
actions={actions}
offCanvas={offCanvas}
simpleColumns={simpleColumns}
/>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId);
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
);
};
diff --git a/src/pages/endpoint/applications/list/index.js b/src/pages/endpoint/applications/list/index.js
index 4b8b60239a47..fec79a4cf7f9 100644
--- a/src/pages/endpoint/applications/list/index.js
+++ b/src/pages/endpoint/applications/list/index.js
@@ -2,14 +2,13 @@ import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog.jsx";
import { GlobeAltIcon, TrashIcon, UserIcon, UserGroupIcon } from "@heroicons/react/24/outline";
-import { LaptopMac, Sync, BookmarkAdd, CloudDone, Bolt } from "@mui/icons-material";
+import { LaptopMac, Sync, BookmarkAdd } from "@mui/icons-material";
import { CippApplicationDeployDrawer } from "../../../../components/CippComponents/CippApplicationDeployDrawer";
-import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
+import { Button } from "@mui/material";
import { Stack } from "@mui/system";
import { useSettings } from "../../../../hooks/use-settings.js";
import { useDialog } from "../../../../hooks/use-dialog.js";
-import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
-import { useEffect, useState } from "react";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const assignmentIntentOptions = [
{ label: "Required", value: "Required" },
@@ -48,15 +47,16 @@ const mapOdataToAppType = (odataType) => {
const Page = () => {
const pageTitle = "Applications";
const vppSyncDialog = useDialog();
- const cacheSyncDialog = useDialog();
const tenant = useSettings().currentTenant;
- const isAllTenants = tenant === "AllTenants";
- const [syncQueueId, setSyncQueueId] = useState(null);
- const [useReportDB, setUseReportDB] = useState(isAllTenants);
- useEffect(() => {
- setUseReportDB(tenant === "AllTenants");
- }, [tenant]);
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListApps",
+ queryKey: "ListApps",
+ cacheName: "IntuneApplications",
+ syncTitle: "Sync Intune Applications Report",
+ allowToggle: true,
+ defaultCached: false,
+ });
const getAssignmentFilterFields = () => [
{
@@ -302,8 +302,7 @@ const Page = () => {
};
const simpleColumns = [
- ...(useReportDB ? ["CacheTimestamp"] : []),
- ...(useReportDB && isAllTenants ? ["Tenant"] : []),
+ ...reportDB.cacheColumns,
"displayName",
"AppAssignment",
"AppExclude",
@@ -312,69 +311,22 @@ const Page = () => {
"createdDateTime",
];
- const pageActions = [
-
- {useReportDB && (
- <>
-
-
-
-
- }
- size="xs"
- onClick={cacheSyncDialog.handleOpen}
- >
- Sync
-
- >
- )}
-
-
- : }
- label={useReportDB ? "Cached" : "Live"}
- color="primary"
- size="small"
- onClick={isAllTenants ? undefined : () => setUseReportDB((prev) => !prev)}
- clickable={!isAllTenants}
- disabled={isAllTenants}
- variant="outlined"
- />
-
-
- ,
- ];
-
return (
<>
}>
Sync VPP
- {pageActions}
+ {reportDB.controls}
}
/>
@@ -388,25 +340,7 @@ const Page = () => {
confirmText: `Are you sure you want to sync Apple Volume Purchase Program (VPP) tokens? This will sync all VPP tokens for ${tenant}.`,
}}
/>
- {
- if (result?.Metadata?.QueueId) {
- setSyncQueueId(result?.Metadata?.QueueId);
- }
- },
- }}
- />
+ {reportDB.syncDialog}
>
);
};
From d7d36a31eb86f6b6f011d483862024515f63757d Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Sun, 26 Apr 2026 19:13:54 +0200
Subject: [PATCH 063/181] feat: Add allTenants support for all the Teams
SharePoint pages
---
src/pages/teams-share/onedrive/index.js | 51 ++++++++----
src/pages/teams-share/sharepoint/index.js | 82 +++++++++++--------
.../teams-share/teams/business-voice/index.js | 68 +++++++++------
.../teams-share/teams/list-team/index.js | 51 ++++++++----
.../teams-share/teams/teams-activity/index.js | 34 ++++++--
5 files changed, 191 insertions(+), 95 deletions(-)
diff --git a/src/pages/teams-share/onedrive/index.js b/src/pages/teams-share/onedrive/index.js
index 8d279cffaf73..82c89d2c2072 100644
--- a/src/pages/teams-share/onedrive/index.js
+++ b/src/pages/teams-share/onedrive/index.js
@@ -1,10 +1,21 @@
import { Layout as DashboardLayout } from "../../../layouts/index.js";
import { CippTablePage } from "../../../components/CippComponents/CippTablePage.jsx";
+import { useCippReportDB } from "../../../components/CippComponents/CippReportDBControls";
import { PersonAdd, PersonRemove } from "@mui/icons-material";
const Page = () => {
const pageTitle = "OneDrive";
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListSites?type=OneDriveUsageAccount",
+ queryKey: "ListSites-OneDriveUsageAccount",
+ cacheName: "Sites",
+ syncTitle: "Sync OneDrive Report",
+ syncData: { Types: "OneDriveUsageAccount" },
+ allowToggle: true,
+ defaultCached: false,
+ });
+
const actions = [
{
label: "Add permissions to OneDrive",
@@ -77,25 +88,31 @@ const Page = () => {
];
return (
-
+ <>
+
+ {reportDB.syncDialog}
+ >
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page};
export default Page;
diff --git a/src/pages/teams-share/sharepoint/index.js b/src/pages/teams-share/sharepoint/index.js
index 21cefc406ca4..0e751f10aa49 100644
--- a/src/pages/teams-share/sharepoint/index.js
+++ b/src/pages/teams-share/sharepoint/index.js
@@ -1,6 +1,7 @@
import { Layout as DashboardLayout } from "../../../layouts/index.js";
import { CippTablePage } from "../../../components/CippComponents/CippTablePage.jsx";
import { Button } from "@mui/material";
+import { Stack } from "@mui/system";
import {
Add,
AddToPhotos,
@@ -13,11 +14,22 @@ import {
import Link from "next/link";
import { CippDataTable } from "../../../components/CippTable/CippDataTable";
import { useSettings } from "../../../hooks/use-settings";
+import { useCippReportDB } from "../../../components/CippComponents/CippReportDBControls";
const Page = () => {
const pageTitle = "SharePoint Sites";
const tenantFilter = useSettings().currentTenant;
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListSites?type=SharePointSiteUsage",
+ queryKey: "ListSites-SharePointSiteUsage",
+ cacheName: "Sites",
+ syncTitle: "Sync SharePoint Sites Report",
+ syncData: { Types: "SharePointSiteUsage" },
+ allowToggle: true,
+ defaultCached: true,
+ });
+
const actions = [
{
label: "Add Member",
@@ -213,40 +225,46 @@ const Page = () => {
};
return (
-
- }>
- Add Site
-
- }
- >
- Bulk Add Sites
-
- >
- }
- />
+ <>
+
+ }>
+ Add Site
+
+ }
+ >
+ Bulk Add Sites
+
+ {reportDB.controls}
+
+ }
+ />
+ {reportDB.syncDialog}
+ >
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page};
export default Page;
diff --git a/src/pages/teams-share/teams/business-voice/index.js b/src/pages/teams-share/teams/business-voice/index.js
index a3aa56764153..3c9354706147 100644
--- a/src/pages/teams-share/teams/business-voice/index.js
+++ b/src/pages/teams-share/teams/business-voice/index.js
@@ -1,10 +1,20 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
import { PersonAdd, PersonRemove, LocationOn } from "@mui/icons-material";
const Page = () => {
const pageTitle = "Teams Business Voice";
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListTeamsVoice",
+ queryKey: "ListTeamsVoice",
+ cacheName: "TeamsVoice",
+ syncTitle: "Sync Teams Business Voice Report",
+ allowToggle: true,
+ defaultCached: false,
+ });
+
const actions = [
// the modal dropdowns that were added below may not exist yet, and will need to be tested.
{
@@ -81,34 +91,40 @@ const Page = () => {
};
return (
-
+ <>
+
+ {reportDB.syncDialog}
+ >
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page};
export default Page;
diff --git a/src/pages/teams-share/teams/list-team/index.js b/src/pages/teams-share/teams/list-team/index.js
index bf48cccb08a3..99b51994bafe 100644
--- a/src/pages/teams-share/teams/list-team/index.js
+++ b/src/pages/teams-share/teams/list-team/index.js
@@ -1,13 +1,24 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
import { Button } from "@mui/material";
+import { Stack } from "@mui/system";
import { Delete, GroupAdd } from "@mui/icons-material";
import Link from "next/link";
import { Edit } from "@mui/icons-material";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const Page = () => {
const pageTitle = "Teams";
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListTeams?type=list",
+ queryKey: "ListTeams-list",
+ cacheName: "Teams",
+ syncTitle: "Sync Teams Report",
+ allowToggle: true,
+ defaultCached: false,
+ });
+
const actions = [
{
label: "Edit Group",
@@ -32,22 +43,34 @@ const Page = () => {
];
return (
-
- }>
- Add Team
-
- >
- }
- />
+ <>
+
+ }>
+ Add Team
+
+ {reportDB.controls}
+
+ }
+ />
+ {reportDB.syncDialog}
+ >
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page};
export default Page;
diff --git a/src/pages/teams-share/teams/teams-activity/index.js b/src/pages/teams-share/teams/teams-activity/index.js
index 2f2797a57cbb..f5fb2bb53754 100644
--- a/src/pages/teams-share/teams/teams-activity/index.js
+++ b/src/pages/teams-share/teams/teams-activity/index.js
@@ -1,18 +1,40 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
const Page = () => {
const pageTitle = "Teams Activity List";
+ const reportDB = useCippReportDB({
+ apiUrl: "/api/ListTeamsActivity?type=TeamsUserActivityUser",
+ queryKey: "ListTeamsActivity-TeamsUserActivityUser",
+ cacheName: "TeamsActivity",
+ syncTitle: "Sync Teams Activity Report",
+ allowToggle: true,
+ defaultCached: false,
+ });
+
return (
-
+ <>
+
+ {reportDB.syncDialog}
+ >
);
};
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page};
export default Page;
From 2ed1760a5b4795cc5267679fa30616a8dd39bcc1 Mon Sep 17 00:00:00 2001
From: Chris Dewey <142454021+chris-dewey-1991@users.noreply.github.com>
Date: Sun, 26 Apr 2026 18:32:42 +0100
Subject: [PATCH 064/181] Add OME Encrypted Message Branding standard
Added 10x configurable fields (background colour, logo URL, introduction text, read button text, email text, privacy statement URL, disclaimer text, portal text, OTP enabled, social ID sign-in) and a helpText link to the Microsoft Purview branding documentation.
Signed-off-by: Chris Dewey <142454021+chris-dewey-1991@users.noreply.github.com>
---
src/data/standards.json | 123 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 123 insertions(+)
diff --git a/src/data/standards.json b/src/data/standards.json
index 07bff3d77f06..25052a9b610c 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -6304,5 +6304,128 @@
"EXCHANGE_S_ENTERPRISE_GOV",
"EXCHANGE_LITE"
]
+ },,
+ {
+ "name": "standards.OMEBranding",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Configures the branding applied to Microsoft Purview (OME) encrypted emails, including the logo, background color, and the text recipients see when viewing a protected message. [Read more](https://learn.microsoft.com/en-us/purview/add-your-organization-brand-to-encrypted-messages)",
+ "docsDescription": "Configures Office Message Encryption (OME) branding settings for the tenant default configuration. Allows organizations to apply a custom logo (via URL), background color, button text, and portal text to encrypted emails viewed by external recipients.",
+ "executiveText": "Applies organizational branding to encrypted emails so recipients see a professional, on-brand experience when viewing protected messages. Reinforces brand identity while preserving security compliance.",
+ "addedComponent": [
+ {
+ "type": "textField",
+ "name": "standards.OMEBranding.BackgroundColor",
+ "label": "Background Color - Optional",
+ "placeholder": "#ffffff",
+ "helpText": "The background color of the encrypted message wrapper. Enter an HTML hex color code (e.g. #ffffff) or a named color value (e.g. white).",
+ "required": false
+ },
+ {
+ "type": "textField",
+ "name": "standards.OMEBranding.LogoUrl",
+ "label": "Logo Image URL - Optional (Less than 40kb 170x70 pixels)",
+ "placeholder": "https://example.com/logo.png or %CustomVarable%",
+ "helpText": "URL to your organization's logo displayed in the encrypted email and the reading portal. Supported formats: PNG, JPG, BMP, TIFF. Optimal size: 170x70 px, max 40 KB.",
+ "required": false
+ },
+ {
+ "type": "textField",
+ "name": "standards.OMEBranding.IntroductionText",
+ "label": "Text next to the sender's name and email address - Optional",
+ "placeholder": "has sent you a secure message.",
+ "helpText": "Text that appears next to the sender's name and email address. Maximum 1024 characters.",
+ "required": false
+ },
+ {
+ "type": "textField",
+ "name": "standards.OMEBranding.ReadButtonText",
+ "label": "Read Button Text - Optional",
+ "placeholder": "Read Secure Message.",
+ "helpText": "Text that appears on the 'Read Message' button. Maximum 1024 characters.",
+ "required": false
+ },
+ {
+ "type": "textField",
+ "name": "standards.OMEBranding.EmailText",
+ "label": "Email Text below the button - Optional",
+ "placeholder": "Encrypted message from Contoso secure messaging system.",
+ "helpText": "Text that appears below the 'Read Message' button. Maximum 1024 characters.",
+ "required": false
+ },
+ {
+ "type": "textField",
+ "name": "standards.OMEBranding.PrivacyStatementUrl",
+ "label": "Privacy Statement URL - Optional",
+ "placeholder": "https://contoso.com/privacystatement.html",
+ "helpText": "URL for the Privacy Statement link in the encrypted email notification. Leave blank to use Microsoft's default privacy statement.",
+ "required": false
+ },
+ {
+ "type": "textField",
+ "name": "standards.OMEBranding.DisclaimerText",
+ "label": "Disclaimer Statement - Optional",
+ "placeholder": "This message is confidential for the use of the addressee only.",
+ "helpText": "Disclaimer statement shown in the email that contains the encrypted message. Maximum 1024 characters.",
+ "required": false
+ },
+ {
+ "type": "textField",
+ "name": "standards.OMEBranding.PortalText",
+ "label": "Text appears at the top of the encrypted mail viewing portal - Optional",
+ "placeholder": "Contoso secure email portal.",
+ "helpText": "Text that appears at the top of the encrypted mail viewing portal. Maximum 128 characters.",
+ "required": false
+ },
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "name": "standards.OMEBranding.OTPEnabled",
+ "label": "One-Time Pass Code - Required",
+ "helpText": "Enable or disable authentication with a one-time pass code. When enabled, recipients without a Microsoft account can verify their identity via a code sent to their email.",
+ "options": [
+ {
+ "label": "Enabled",
+ "value": true
+ },
+ {
+ "label": "Disabled",
+ "value": false
+ }
+ ]
+ },
+ {
+ "type": "autoComplete",
+ "multiple": false,
+ "creatable": false,
+ "name": "standards.OMEBranding.SocialIdSignIn",
+ "label": "Social ID Sign-In - Required",
+ "helpText": "Enable or disable authentication with Microsoft, Google, or Yahoo identities. When enabled, recipients can sign in with an existing social account to view the encrypted message.",
+ "options": [
+ {
+ "label": "Enabled",
+ "value": true
+ },
+ {
+ "label": "Disabled",
+ "value": false
+ }
+ ]
+ }
+ ],
+ "label": "Configure Encrypted Message Branding (OME)",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2026-04-25",
+ "powershellEquivalent": "Set-OMEConfiguration",
+ "recommendedBy": [],
+ "requiredCapabilities": [
+ "EXCHANGE_S_STANDARD",
+ "EXCHANGE_S_ENTERPRISE",
+ "EXCHANGE_S_STANDARD_GOV",
+ "EXCHANGE_S_ENTERPRISE_GOV",
+ "EXCHANGE_LITE"
+ ]
}
]
From 9154580e2cb9f4fdfcee6f12d7c6d12585d5cff6 Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Sun, 26 Apr 2026 20:01:06 +0200
Subject: [PATCH 065/181] feat: enhance ISO 8601 duration formatting logic
Updated duration formatting to automatically handle any property ending with "Duration". Improved error handling for non-ISO 8601 fields and removed specific property names from the duration array.
---
src/utils/get-cipp-formatting.js | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js
index b900905202ca..2c5886cf5fab 100644
--- a/src/utils/get-cipp-formatting.js
+++ b/src/utils/get-cipp-formatting.js
@@ -982,17 +982,13 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr
}
// ISO 8601 Duration Formatting
- // Add property names here to automatically format ISO 8601 duration strings (e.g., "PT1H23M30S")
- // into human-readable format (e.g., "1 hour 23 minutes 30 seconds") across all CIPP tables.
- // This works for any API response property that contains ISO 8601 duration format.
+ // Any property whose name ends in "Duration" is auto-formatted from ISO 8601 (e.g. "PT1H23M30S")
+ // into human-readable form (e.g. "1 hour 23 minutes 30 seconds") across all CIPP tables.
+ // The try/catch below handles same-suffixed fields that are not actually ISO 8601.
+ // Add explicit entries below for fields that don't follow the *Duration naming convention.
const durationArray = [
- 'autoExtendDuration', // GDAP page (/tenant/gdap-management/relationships)
- 'deploymentDuration', // AutoPilot deployments (/endpoint/reports/autopilot-deployment)
- 'deploymentTotalDuration', // AutoPilot deployments (/endpoint/reports/autopilot-deployment)
- 'deviceSetupDuration', // AutoPilot deployments (/endpoint/reports/autopilot-deployment)
- 'accountSetupDuration', // AutoPilot deployments (/endpoint/reports/autopilot-deployment)
]
- if (durationArray.includes(cellName)) {
+ if (durationArray.includes(cellName) || cellName.endsWith('Duration')) {
isoDuration.setLocales(
{
en,
@@ -1001,8 +997,15 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr
fallbackLocale: 'en',
}
)
- const duration = isoDuration(data)
- return duration.humanize('en')
+ try {
+ const duration = isoDuration(data)
+ const formattedDuration = duration.humanize('en')
+ if (formattedDuration) {
+ return formattedDuration
+ }
+ } catch {
+ // Fall through to the default formatter when a Duration-suffixed field is not ISO 8601.
+ }
}
//if string starts with http, return a link
From fbd50ab2dbcad4ea040231b6a132a5276d50732a Mon Sep 17 00:00:00 2001
From: James Tarran
Date: Mon, 27 Apr 2026 12:36:24 +0100
Subject: [PATCH 066/181] Use 'at Risk' for riskState filters
Added required space for atRisk users to appear correctly in the pre-defined filter
---
src/pages/identity/administration/risky-users/index.js | 2 +-
src/pages/identity/reports/risk-detections/index.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/pages/identity/administration/risky-users/index.js b/src/pages/identity/administration/risky-users/index.js
index d3ff4080d112..12171bfa32ee 100644
--- a/src/pages/identity/administration/risky-users/index.js
+++ b/src/pages/identity/administration/risky-users/index.js
@@ -50,7 +50,7 @@ const Page = () => {
const filterList = [
{
filterName: "Users at Risk",
- value: [{ id: "riskState", value: "atRisk" }],
+ value: [{ id: "riskState", value: "at Risk" }],
type: "column",
},
{
diff --git a/src/pages/identity/reports/risk-detections/index.js b/src/pages/identity/reports/risk-detections/index.js
index ef62600025d3..cd68e4eb13ed 100644
--- a/src/pages/identity/reports/risk-detections/index.js
+++ b/src/pages/identity/reports/risk-detections/index.js
@@ -52,7 +52,7 @@ const Page = () => {
const filterList = [
{
filterName: "Users at Risk",
- value: [{ id: "riskState", value: "atRisk" }],
+ value: [{ id: "riskState", value: "at Risk" }],
type: "column",
},
{
From 3e88968a2311b6e8d2a78ff64697951b602d1c44 Mon Sep 17 00:00:00 2001
From: Brian Simpson <50429915+bmsimp@users.noreply.github.com>
Date: Mon, 27 Apr 2026 11:05:22 -0500
Subject: [PATCH 067/181] Fix: Update notification message to include
instruction for reviewing new permissions
---
src/components/CippSettings/CippPermissionResults.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/CippSettings/CippPermissionResults.jsx b/src/components/CippSettings/CippPermissionResults.jsx
index bd8e37000c0e..d5f0636a479c 100644
--- a/src/components/CippSettings/CippPermissionResults.jsx
+++ b/src/components/CippSettings/CippPermissionResults.jsx
@@ -133,7 +133,7 @@ export const CippPermissionResults = (props) => {
- There are new permissions to apply.
+ There are new permissions to apply. Please click "Details" to review and apply the new permissions.
)}
From dd06564fca5949b69446ded55a79d0019b62180a Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Mon, 27 Apr 2026 18:14:38 +0200
Subject: [PATCH 068/181] feat(mde-onboarding): show full connector details on
single tenant view
Adds three property cards (Platform Support, App Management & Attach,
Data Collection & Compliance) below the status header, surfacing every
connector property returned by Graph. Expands the AllTenants table
columns to match. Last heartbeat is shown alongside the status chip.
---
.../security/reports/mde-onboarding/index.js | 298 ++++++++++++++----
1 file changed, 237 insertions(+), 61 deletions(-)
diff --git a/src/pages/security/reports/mde-onboarding/index.js b/src/pages/security/reports/mde-onboarding/index.js
index 839d85f6906a..955ec17fa66a 100644
--- a/src/pages/security/reports/mde-onboarding/index.js
+++ b/src/pages/security/reports/mde-onboarding/index.js
@@ -14,11 +14,14 @@ import {
SvgIcon,
} from "@mui/material";
import { Sync, OpenInNew } from "@mui/icons-material";
+import { Grid } from "@mui/system";
import { ApiGetCall } from "../../../../api/ApiCall";
import { CippHead } from "../../../../components/CippComponents/CippHead";
import { useDialog } from "../../../../hooks/use-dialog";
import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog";
import { CippQueueTracker } from "../../../../components/CippTable/CippQueueTracker";
+import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard";
+import { getCippFormatting } from "../../../../utils/get-cipp-formatting";
import { useState } from "react";
import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
@@ -63,73 +66,232 @@ const SingleTenantView = ({ tenant }) => {
const item = Array.isArray(data) ? data[0] : data;
const status = item?.partnerState || "Unknown";
+ const platformItems = [
+ {
+ label: "Windows",
+ value: getCippFormatting(item?.windowsEnabled, "windowsEnabled"),
+ },
+ {
+ label: "iOS",
+ value: getCippFormatting(item?.iosEnabled, "iosEnabled"),
+ },
+ {
+ label: "Android",
+ value: getCippFormatting(item?.androidEnabled, "androidEnabled"),
+ },
+ {
+ label: "macOS",
+ value: getCippFormatting(item?.macEnabled, "macEnabled"),
+ },
+ ];
+
+ const mamItems = [
+ {
+ label: "iOS MAM",
+ value: getCippFormatting(
+ item?.iosMobileApplicationManagementEnabled,
+ "iosMobileApplicationManagementEnabled"
+ ),
+ },
+ {
+ label: "Android MAM",
+ value: getCippFormatting(
+ item?.androidMobileApplicationManagementEnabled,
+ "androidMobileApplicationManagementEnabled"
+ ),
+ },
+ {
+ label: "Windows MAM",
+ value: getCippFormatting(
+ item?.windowsMobileApplicationManagementEnabled,
+ "windowsMobileApplicationManagementEnabled"
+ ),
+ },
+ {
+ label: "MDE Attach",
+ value: getCippFormatting(
+ item?.microsoftDefenderForEndpointAttachEnabled,
+ "microsoftDefenderForEndpointAttachEnabled"
+ ),
+ },
+ ];
+
+ const dataCollectionItems = [
+ {
+ label: "Block iOS on missing partner data",
+ value: getCippFormatting(
+ item?.iosDeviceBlockedOnMissingPartnerData,
+ "iosDeviceBlockedOnMissingPartnerData"
+ ),
+ },
+ {
+ label: "Block Android on missing partner data",
+ value: getCippFormatting(
+ item?.androidDeviceBlockedOnMissingPartnerData,
+ "androidDeviceBlockedOnMissingPartnerData"
+ ),
+ },
+ {
+ label: "Block Windows on missing partner data",
+ value: getCippFormatting(
+ item?.windowsDeviceBlockedOnMissingPartnerData,
+ "windowsDeviceBlockedOnMissingPartnerData"
+ ),
+ },
+ {
+ label: "Block macOS on missing partner data",
+ value: getCippFormatting(
+ item?.macDeviceBlockedOnMissingPartnerData,
+ "macDeviceBlockedOnMissingPartnerData"
+ ),
+ },
+ {
+ label: "Block unsupported OS versions",
+ value: getCippFormatting(
+ item?.partnerUnsupportedOsVersionBlocked,
+ "partnerUnsupportedOsVersionBlocked"
+ ),
+ },
+ {
+ label: "Unresponsiveness threshold (days)",
+ value:
+ item?.partnerUnresponsivenessThresholdInDays ??
+ getCippFormatting(null, "partnerUnresponsivenessThresholdInDays"),
+ },
+ {
+ label: "Collect iOS app metadata",
+ value: getCippFormatting(
+ item?.allowPartnerToCollectIOSApplicationMetadata,
+ "allowPartnerToCollectIOSApplicationMetadata"
+ ),
+ },
+ {
+ label: "Collect iOS personal app metadata",
+ value: getCippFormatting(
+ item?.allowPartnerToCollectIOSPersonalApplicationMetadata,
+ "allowPartnerToCollectIOSPersonalApplicationMetadata"
+ ),
+ },
+ {
+ label: "Collect iOS certificate metadata",
+ value: getCippFormatting(
+ item?.allowPartnerToCollectIosCertificateMetadata,
+ "allowPartnerToCollectIosCertificateMetadata"
+ ),
+ },
+ {
+ label: "Collect iOS personal certificate metadata",
+ value: getCippFormatting(
+ item?.allowPartnerToCollectIosPersonalCertificateMetadata,
+ "allowPartnerToCollectIosPersonalCertificateMetadata"
+ ),
+ },
+ ];
+
return (
<>
-
-
-
-
-
-
-
- }
- size="small"
- onClick={syncDialog.handleOpen}
- >
- Sync
-
-
- }
- />
-
- {isFetching ? (
-
- ) : (
-
-
- Status:
-
+
+
+
+
-
- {item?.CacheTimestamp && (
-
- Last synced: {new Date(item.CacheTimestamp).toLocaleString()}
-
- )}
- {item?.error && (
-
- {item.error}
-
- )}
- {tenantId && status !== "enabled" && status !== "available" && (
}
- href={`https://security.microsoft.com/securitysettings/endpoints/onboarding?tid=${tenantId}`}
- target="_blank"
- rel="noopener noreferrer"
- sx={{ alignSelf: "flex-start" }}
+ startIcon={
+
+
+
+ }
+ size="small"
+ onClick={syncDialog.handleOpen}
>
- Start Onboarding
+ Sync
- )}
-
- )}
-
-
+
+ }
+ />
+
+ {isFetching ? (
+
+ ) : (
+
+
+ Status:
+
+
+ {item?.lastHeartbeatDateTime && (
+
+ Last heartbeat:{" "}
+ {new Date(item.lastHeartbeatDateTime).toLocaleString()}
+
+ )}
+ {item?.CacheTimestamp && (
+
+ Last synced: {new Date(item.CacheTimestamp).toLocaleString()}
+
+ )}
+ {item?.error && (
+
+ {item.error}
+
+ )}
+ {tenantId && status !== "enabled" && status !== "available" && (
+ }
+ href={`https://security.microsoft.com/securitysettings/endpoints/onboarding?tid=${tenantId}`}
+ target="_blank"
+ rel="noopener noreferrer"
+ sx={{ alignSelf: "flex-start" }}
+ >
+ Start Onboarding
+
+ )}
+
+ )}
+
+
+
+ {!isFetching && item && (
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
{
apiUrl={reportDB.resolvedApiUrl}
apiData={reportDB.resolvedApiData}
queryKey={reportDB.resolvedQueryKey}
- simpleColumns={["Tenant", "partnerState", "CacheTimestamp"]}
+ simpleColumns={[
+ "Tenant",
+ "partnerState",
+ "lastHeartbeatDateTime",
+ "microsoftDefenderForEndpointAttachEnabled",
+ "windowsEnabled",
+ "iosEnabled",
+ "androidEnabled",
+ "macEnabled",
+ "iosMobileApplicationManagementEnabled",
+ "androidMobileApplicationManagementEnabled",
+ "windowsMobileApplicationManagementEnabled",
+ "partnerUnresponsivenessThresholdInDays",
+ "CacheTimestamp",
+ ]}
cardButton={reportDB.controls}
/>
{reportDB.syncDialog}
From a37e5d30f9eafc2784922f5e3013aef8cc8ba85b Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 27 Apr 2026 14:40:33 -0400
Subject: [PATCH 069/181] fix: update role exclusions in cipp-roles.json
Co-authored-by: Copilot
---
src/data/cipp-roles.json | 29 ++++++++++++++++++++++-------
1 file changed, 22 insertions(+), 7 deletions(-)
diff --git a/src/data/cipp-roles.json b/src/data/cipp-roles.json
index f95e32fa18c6..ac3c389f65a2 100644
--- a/src/data/cipp-roles.json
+++ b/src/data/cipp-roles.json
@@ -1,10 +1,19 @@
{
"readonly": {
- "include": ["*.Read"],
- "exclude": ["CIPP.SuperAdmin.*"]
+ "include": [
+ "*.Read"
+ ],
+ "exclude": [
+ "CIPP.SuperAdmin.*",
+ "CIPP.Admin.*",
+ "CIPP.AppSettings.*"
+ ]
},
"editor": {
- "include": ["*.Read", "*.ReadWrite"],
+ "include": [
+ "*.Read",
+ "*.ReadWrite"
+ ],
"exclude": [
"CIPP.SuperAdmin.*",
"CIPP.Admin.*",
@@ -13,11 +22,17 @@
]
},
"admin": {
- "include": ["*"],
- "exclude": ["CIPP.SuperAdmin.*"]
+ "include": [
+ "*"
+ ],
+ "exclude": [
+ "CIPP.SuperAdmin.*"
+ ]
},
"superadmin": {
- "include": ["*"],
+ "include": [
+ "*"
+ ],
"exclude": []
}
-}
+}
\ No newline at end of file
From 7d8d7cb843dafcae2cb46cc7cee8033fa3bbc872 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Tue, 28 Apr 2026 16:57:04 +0800
Subject: [PATCH 070/181] Add SharePoint and Exchange standards
Add three new standards:
- standards.SPDisableCustomScripts: Prevents custom scripts on SharePoint/OneDrive (high impact).
- standards.SPDisableStoreAccess: Disables SharePoint Store access for end users (low impact).
- standards.DisableEWS: Disables Exchange Web Services org-wide to reduce legacy API attack surface (high impact).
---
src/data/standards.json | 68 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/src/data/standards.json b/src/data/standards.json
index 07bff3d77f06..44a0c52d15e8 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -6304,5 +6304,73 @@
"EXCHANGE_S_ENTERPRISE_GOV",
"EXCHANGE_LITE"
]
+ },
+ {
+ "name": "standards.SPDisableCustomScripts",
+ "cat": "SharePoint Standards",
+ "tag": [],
+ "helpText": "Prevents users from running custom scripts on SharePoint and OneDrive sites. Custom scripts can modify site behaviors and bypass governance controls.",
+ "docsDescription": "Disables the ability to add and run custom scripts on SharePoint and OneDrive sites at the tenant level. When custom scripts are allowed, governance cannot be enforced, and the capabilities of inserted code cannot be scoped or blocked. Microsoft recommends using the SharePoint Framework instead of custom scripts.",
+ "executiveText": "Blocks custom scripts from being added to SharePoint and OneDrive sites, enforcing governance controls and preventing unscoped code execution. This aligns with Microsoft's Baseline Security Mode recommendation to permanently remove the ability to add new custom scripts, directing organizations to use the SharePoint Framework instead.",
+ "addedComponent": [],
+ "label": "Disable custom scripts on SharePoint sites",
+ "impact": "High Impact",
+ "impactColour": "danger",
+ "addedDate": "2026-04-28",
+ "powershellEquivalent": "Set-SPOTenant -CustomScriptsRestrictMode $true",
+ "recommendedBy": ["CIPP"],
+ "requiredCapabilities": [
+ "SHAREPOINTWAC",
+ "SHAREPOINTSTANDARD",
+ "SHAREPOINTENTERPRISE",
+ "SHAREPOINTENTERPRISE_EDU",
+ "ONEDRIVE_BASIC",
+ "ONEDRIVE_ENTERPRISE"
+ ]
+ },
+ {
+ "name": "standards.SPDisableStoreAccess",
+ "cat": "SharePoint Standards",
+ "tag": [],
+ "helpText": "Disables end users from installing applications from the Microsoft Store into SharePoint sites.",
+ "docsDescription": "Removes the ability for end users to install applications directly from the Microsoft Store into SharePoint. This prevents uncontrolled app installations that can increase governance costs and go against organizational policies.",
+ "executiveText": "Prevents end users from installing applications from the Microsoft Store into SharePoint sites, ensuring that only approved applications are available. This reduces governance overhead and aligns with Microsoft's Baseline Security Mode recommendations.",
+ "addedComponent": [],
+ "label": "Disable SharePoint Store access",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2026-04-28",
+ "powershellEquivalent": "Set-SPOTenant -DisableSharePointStoreAccess $true",
+ "recommendedBy": ["CIPP"],
+ "requiredCapabilities": [
+ "SHAREPOINTWAC",
+ "SHAREPOINTSTANDARD",
+ "SHAREPOINTENTERPRISE",
+ "SHAREPOINTENTERPRISE_EDU",
+ "ONEDRIVE_BASIC",
+ "ONEDRIVE_ENTERPRISE"
+ ]
+ },
+ {
+ "name": "standards.DisableEWS",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Disables Exchange Web Services (EWS) organization-wide. This reduces the attack surface by blocking legacy API access to mailbox data. Warning: This may break Office web add-ins on builds older than 16.0.19127.",
+ "docsDescription": "Disables Exchange Web Services (EWS) at the organization level to reduce attack surface. EWS provides cross-platform API access to sensitive Exchange Online data such as emails, meetings, and contacts. If compromised, attackers can access confidential data, send phishing emails, or spoof identities. Disabling EWS also reduces legacy app usage and minimizes exploitable endpoints. Note that this may break first-party features including web add-ins for Word, Excel, PowerPoint, and Outlook on builds older than 16.0.19127.",
+ "executiveText": "Disables Exchange Web Services (EWS) across the organization to reduce attack surface and prevent legacy API access to sensitive mailbox data. This aligns with Microsoft's Baseline Security Mode recommendation to minimize exploitable endpoints while requiring updates to applications that depend on EWS.",
+ "addedComponent": [],
+ "label": "Disable Exchange Web Services",
+ "impact": "High Impact",
+ "impactColour": "danger",
+ "addedDate": "2026-04-28",
+ "powershellEquivalent": "Set-OrganizationConfig -EwsEnabled $false",
+ "recommendedBy": ["CIPP"],
+ "requiredCapabilities": [
+ "EXCHANGE_S_STANDARD",
+ "EXCHANGE_S_ENTERPRISE",
+ "EXCHANGE_S_STANDARD_GOV",
+ "EXCHANGE_S_ENTERPRISE_GOV",
+ "EXCHANGE_LITE"
+ ]
}
]
From 88105826f7d179cb66ee7eef6b6b47ce3e242a79 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Tue, 28 Apr 2026 11:00:22 +0200
Subject: [PATCH 071/181] remove logbook tenantinTitle
---
src/pages/cipp/logs/index.js | 192 +++++++++++++++++------------------
1 file changed, 96 insertions(+), 96 deletions(-)
diff --git a/src/pages/cipp/logs/index.js b/src/pages/cipp/logs/index.js
index 1cbd2fa8e02d..1896cf3e2349 100644
--- a/src/pages/cipp/logs/index.js
+++ b/src/pages/cipp/logs/index.js
@@ -1,6 +1,6 @@
-import { useState } from "react";
-import { Layout as DashboardLayout } from "../../../layouts/index.js";
-import { CippTablePage } from "../../../components/CippComponents/CippTablePage.jsx";
+import { useState } from 'react'
+import { Layout as DashboardLayout } from '../../../layouts/index.js'
+import { CippTablePage } from '../../../components/CippComponents/CippTablePage.jsx'
import {
Button,
Accordion,
@@ -11,73 +11,73 @@ import {
Stack,
Alert,
Box,
-} from "@mui/material";
-import { Grid } from "@mui/system";
-import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
-import { useForm } from "react-hook-form";
-import CippFormComponent from "../../../components/CippComponents/CippFormComponent";
-import { FunnelIcon, XMarkIcon } from "@heroicons/react/24/outline";
-import { EyeIcon } from "@heroicons/react/24/outline";
-import { useSettings } from "../../../hooks/use-settings.js";
+} from '@mui/material'
+import { Grid } from '@mui/system'
+import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
+import { useForm } from 'react-hook-form'
+import CippFormComponent from '../../../components/CippComponents/CippFormComponent'
+import { FunnelIcon, XMarkIcon } from '@heroicons/react/24/outline'
+import { EyeIcon } from '@heroicons/react/24/outline'
+import { useSettings } from '../../../hooks/use-settings.js'
const simpleColumns = [
- "DateTime",
- "Tenant",
- "User",
- "Message",
- "API",
- "Severity",
- "AppId",
- "IP",
- "LogData",
-];
+ 'DateTime',
+ 'Tenant',
+ 'User',
+ 'Message',
+ 'API',
+ 'Severity',
+ 'AppId',
+ 'IP',
+ 'LogData',
+]
const offcanvas = {
- extendedInfoFields: ["DateTime", "API", "Severity", "Message", "User", "AppId", "IP", "LogData"],
-};
+ extendedInfoFields: ['DateTime', 'API', 'Severity', 'Message', 'User', 'AppId', 'IP', 'LogData'],
+}
-const apiUrl = "/api/Listlogs";
-const pageTitle = "Logbook Results";
+const apiUrl = '/api/Listlogs'
+const pageTitle = 'Logbook Results'
const actions = [
{
- label: "View Log Entry",
- link: "/cipp/logs/logentry?logentry=[RowKey]&dateFilter=[DateFilter]",
+ label: 'View Log Entry',
+ link: '/cipp/logs/logentry?logentry=[RowKey]&dateFilter=[DateFilter]',
icon: ,
- color: "primary",
+ color: 'primary',
},
-];
+]
const Page = () => {
const formControl = useForm({
defaultValues: {
startDate: null,
endDate: null,
- username: "",
+ username: '',
severity: [],
},
- });
+ })
- const [expanded, setExpanded] = useState(false); // State for Accordion
- const [filterEnabled, setFilterEnabled] = useState(false); // State for filter toggle
- const [startDate, setStartDate] = useState(null); // State for start date filter
- const [endDate, setEndDate] = useState(null); // State for end date filter
- const [username, setUsername] = useState(null); // State for username filter
- const [severity, setSeverity] = useState(null); // State for severity filter
- const settings = useSettings(); // Hook to access settings
- const currentTenant = settings?.currentTenant;
+ const [expanded, setExpanded] = useState(false) // State for Accordion
+ const [filterEnabled, setFilterEnabled] = useState(false) // State for filter toggle
+ const [startDate, setStartDate] = useState(null) // State for start date filter
+ const [endDate, setEndDate] = useState(null) // State for end date filter
+ const [username, setUsername] = useState(null) // State for username filter
+ const [severity, setSeverity] = useState(null) // State for severity filter
+ const settings = useSettings() // Hook to access settings
+ const currentTenant = settings?.currentTenant
// Watch date fields to show warning for large date ranges
- const watchStartDate = formControl.watch("startDate");
- const watchEndDate = formControl.watch("endDate");
+ const watchStartDate = formControl.watch('startDate')
+ const watchEndDate = formControl.watch('endDate')
// Component to display warning for large date ranges
const DateRangeWarning = () => {
- if (!watchStartDate || !watchEndDate) return null;
+ if (!watchStartDate || !watchEndDate) return null
- const startDateMs = new Date(watchStartDate * 1000);
- const endDateMs = new Date(watchEndDate * 1000);
- const daysDifference = (endDateMs - startDateMs) / (1000 * 60 * 60 * 24);
+ const startDateMs = new Date(watchStartDate * 1000)
+ const endDateMs = new Date(watchEndDate * 1000)
+ const daysDifference = (endDateMs - startDateMs) / (1000 * 60 * 60 * 24)
if (daysDifference > 10) {
return (
@@ -88,11 +88,11 @@ const Page = () => {
narrowing your date range if you encounter issues.
- );
+ )
}
- return null;
- };
+ return null
+ }
const onSubmit = (data) => {
// Check if any filter is applied
@@ -100,51 +100,51 @@ const Page = () => {
data.startDate !== null ||
data.endDate !== null ||
data.username !== null ||
- data.severity?.length > 0;
- setFilterEnabled(hasFilter);
+ data.severity?.length > 0
+ setFilterEnabled(hasFilter)
// Format start date if available
setStartDate(
data.startDate
- ? new Date(data.startDate * 1000).toISOString().split("T")[0].replace(/-/g, "")
- : null,
- );
+ ? new Date(data.startDate * 1000).toISOString().split('T')[0].replace(/-/g, '')
+ : null
+ )
// Format end date if available
setEndDate(
data.endDate
- ? new Date(data.endDate * 1000).toISOString().split("T")[0].replace(/-/g, "")
- : null,
- );
+ ? new Date(data.endDate * 1000).toISOString().split('T')[0].replace(/-/g, '')
+ : null
+ )
// Set username filter if available
- setUsername(data.username || null);
+ setUsername(data.username || null)
// Set severity filter if available (convert array to comma-separated string)
setSeverity(
data.severity && data.severity.length > 0
- ? data.severity.map((item) => item.value).join(",")
- : null,
- );
+ ? data.severity.map((item) => item.value).join(',')
+ : null
+ )
// Close the accordion after applying filters
- setExpanded(false);
- };
+ setExpanded(false)
+ }
const clearFilters = () => {
formControl.reset({
startDate: null,
endDate: null,
- username: "",
+ username: '',
severity: [],
- });
- setFilterEnabled(false);
- setStartDate(null);
- setEndDate(null);
- setUsername(null);
- setSeverity(null);
- setExpanded(false); // Close the accordion when clearing filters
- };
+ })
+ setFilterEnabled(false)
+ setStartDate(null)
+ setEndDate(null)
+ setUsername(null)
+ setSeverity(null)
+ setExpanded(false) // Close the accordion when clearing filters
+ }
return (
{
Logbook Filters
{filterEnabled ? (
-
+
(
{startDate || endDate ? (
<>
{startDate
? new Date(
- startDate.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3") + "T00:00:00",
+ startDate.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3') + 'T00:00:00'
).toLocaleDateString()
: new Date().toLocaleDateString()}
- {startDate && endDate ? " - " : ""}
+ {startDate && endDate ? ' - ' : ''}
{endDate
? new Date(
- endDate.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3") + "T00:00:00",
+ endDate.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3') + 'T00:00:00'
).toLocaleDateString()
- : ""}
+ : ''}
>
) : null}
- {username && (startDate || endDate) && " | "}
+ {username && (startDate || endDate) && ' | '}
{username && <>User: {username}>}
- {severity && (username || startDate || endDate) && " | "}
- {severity && <>Severity: {severity.replace(/,/g, ", ")}>})
+ {severity && (username || startDate || endDate) && ' | '}
+ {severity && <>Severity: {severity.replace(/,/g, ', ')}>})
) : (
-
+
(Today: {new Date().toLocaleDateString()})
)}
@@ -196,7 +196,7 @@ const Page = () => {
Use the filters below to narrow down your logbook results. You can filter by
date range, username, and severity levels. By default, the logbook shows the
- current day based on UTC time. Your local time is{" "}
+ current day based on UTC time. Your local time is{' '}
{new Date().getTimezoneOffset() / -60} hours offset from UTC.
@@ -220,18 +220,18 @@ const Page = () => {
formControl={formControl}
validators={{
validate: (value) => {
- const startDate = formControl.getValues("startDate");
+ const startDate = formControl.getValues('startDate')
if (value && !startDate) {
- return "Start date must be set when using an end date";
+ return 'Start date must be set when using an end date'
}
if (
startDate &&
value &&
new Date(value * 1000) < new Date(startDate * 1000)
) {
- return "End date must be after start date";
+ return 'End date must be after start date'
}
- return true;
+ return true
},
}}
/>
@@ -263,12 +263,12 @@ const Page = () => {
formControl={formControl}
multiple={true}
options={[
- { value: "Info", label: "Info" },
- { value: "Warn", label: "Warning" },
- { value: "Error", label: "Error" },
- { value: "Critical", label: "Critical" },
- { value: "Alert", label: "Alert" },
- { value: "Debug", label: "Debug" },
+ { value: 'Info', label: 'Info' },
+ { value: 'Warn', label: 'Warning' },
+ { value: 'Error', label: 'Error' },
+ { value: 'Critical', label: 'Critical' },
+ { value: 'Alert', label: 'Alert' },
+ { value: 'Debug', label: 'Debug' },
]}
placeholder="Select severity levels"
/>
@@ -312,7 +312,7 @@ const Page = () => {
apiUrl={apiUrl}
simpleColumns={simpleColumns}
queryKey={`Listlogs-${startDate}-${endDate}-${username}-${severity}-${filterEnabled}-${currentTenant}`}
- tenantInTitle={true}
+ tenantInTitle={false}
apiData={{
StartDate: startDate, // Pass start date filter from state
EndDate: endDate, // Pass end date filter from state
@@ -324,9 +324,9 @@ const Page = () => {
actions={actions}
offCanvas={offcanvas}
/>
- );
-};
+ )
+}
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page}
-export default Page;
+export default Page
From e0bc9303c78c9303afb3897330496f30ab2dd48b Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Tue, 28 Apr 2026 17:01:17 +0800
Subject: [PATCH 072/181] Update add.jsx
---
src/pages/tools/custom-tests/add.jsx | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/pages/tools/custom-tests/add.jsx b/src/pages/tools/custom-tests/add.jsx
index 6951fe57c507..df7fe5f1cd50 100644
--- a/src/pages/tools/custom-tests/add.jsx
+++ b/src/pages/tools/custom-tests/add.jsx
@@ -300,6 +300,7 @@ const Page = () => {
label: 'Category',
type: 'autoComplete',
required: true,
+ multiple: false,
placeholder: 'Select or enter a category',
options: categoryOptions,
creatable: true,
From 21057020d6ae50519d8c002cb7f40512e2d3aed4 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Tue, 28 Apr 2026 17:23:46 +0800
Subject: [PATCH 073/181] Fix password settings to bool values
---
.../cipp/settings/password-config/index.js | 38 +++++++++----------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/src/pages/cipp/settings/password-config/index.js b/src/pages/cipp/settings/password-config/index.js
index 540dd2853b2f..06d2c452a60a 100644
--- a/src/pages/cipp/settings/password-config/index.js
+++ b/src/pages/cipp/settings/password-config/index.js
@@ -41,32 +41,32 @@ function normalizeConfigForBackend(config) {
return {
passwordType: String(config.passwordType || PASSWORD_TYPES.CLASSIC),
charCount: String(parseInt(config.charCount, 10) || DEFAULT_VALUES.CHAR_COUNT),
- includeUppercase: String(Boolean(config.includeUppercase)),
- includeLowercase: String(Boolean(config.includeLowercase)),
- includeDigits: String(Boolean(config.includeDigits)),
- includeSpecialChars: String(Boolean(config.includeSpecialChars)),
+ includeUppercase: Boolean(config.includeUppercase),
+ includeLowercase: Boolean(config.includeLowercase),
+ includeDigits: Boolean(config.includeDigits),
+ includeSpecialChars: Boolean(config.includeSpecialChars),
specialCharSet: String(config.specialCharSet || DEFAULT_VALUES.SPECIAL_CHAR_SET),
wordCount: String(parseInt(config.wordCount, 10) || DEFAULT_VALUES.WORD_COUNT),
separator: config.separator !== undefined && config.separator !== null ? String(config.separator) : DEFAULT_VALUES.SEPARATOR,
- capitalizeWords: String(Boolean(config.capitalizeWords)),
- appendNumber: String(Boolean(config.appendNumber)),
- appendSpecialChar: String(Boolean(config.appendSpecialChar)),
+ capitalizeWords: Boolean(config.capitalizeWords),
+ appendNumber: Boolean(config.appendNumber),
+ appendSpecialChar: Boolean(config.appendSpecialChar),
};
}
const DEFAULT_CONFIG = {
- passwordType: PASSWORD_TYPES.CLASSIC,
+ passwordType: PASSWORD_TYPES.CLASSIC,
charCount: String(DEFAULT_VALUES.CHAR_COUNT),
- includeUppercase: true,
- includeLowercase: true,
+ includeUppercase: true,
+ includeLowercase: true,
includeDigits: true,
- includeSpecialChars: true,
+ includeSpecialChars: true,
specialCharSet: DEFAULT_VALUES.SPECIAL_CHAR_SET,
- wordCount: String(DEFAULT_VALUES.WORD_COUNT),
+ wordCount: String(DEFAULT_VALUES.WORD_COUNT),
separator: DEFAULT_VALUES.SEPARATOR,
- capitalizeWords: false,
- appendNumber: false,
+ capitalizeWords: false,
+ appendNumber: false,
appendSpecialChar: false,
};
@@ -89,7 +89,7 @@ const Page = () => {
if (typeof v === 'number') return v === 1;
return def;
};
-
+
setConfig({
passwordType: r.passwordType || DEFAULT_CONFIG.passwordType,
charCount: String(parseInt(r.charCount, 10) || DEFAULT_CONFIG.charCount),
@@ -115,11 +115,11 @@ const Page = () => {
const handleSave = () => {
const normalizedConfig = normalizeConfigForBackend(config);
-
+
passwordSave.mutate(
- {
- url: "/api/ExecPasswordConfig",
- data: normalizedConfig,
+ {
+ url: "/api/ExecPasswordConfig",
+ data: normalizedConfig,
queryKey: "PasswordSettingsPost",
}
);
From 24304c6db3dcfe8b0302b3eb527d7e75757e2fa6 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Tue, 28 Apr 2026 23:50:12 +0800
Subject: [PATCH 074/181] Fix for tenant group being set as an object rather
than an array
---
.../administration/alert-configuration/alert.jsx | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/pages/tenant/administration/alert-configuration/alert.jsx b/src/pages/tenant/administration/alert-configuration/alert.jsx
index dff059067894..d9af06f2b549 100644
--- a/src/pages/tenant/administration/alert-configuration/alert.jsx
+++ b/src/pages/tenant/administration/alert-configuration/alert.jsx
@@ -166,12 +166,14 @@ const AlertWizard = () => {
} else if (alert.RawAlert.TenantGroup) {
try {
const tenantGroupObject = JSON.parse(alert.RawAlert.TenantGroup)
- tenantFilterForForm = {
- value: tenantGroupObject.value,
- label: tenantGroupObject.label,
- type: 'Group',
- addedFields: tenantGroupObject,
- }
+ tenantFilterForForm = [
+ {
+ value: tenantGroupObject.value,
+ label: tenantGroupObject.label,
+ type: 'Group',
+ addedFields: tenantGroupObject,
+ },
+ ]
} catch (error) {
console.error('Error parsing tenant group:', error)
tenantFilterForForm = [
From 4a30f432757a4b007887f226d51f562276dac017 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 28 Apr 2026 12:03:08 -0400
Subject: [PATCH 075/181] fix: GDAP overview page
---
src/pages/tenant/gdap-management/index.js | 134 +++++++++++-----------
1 file changed, 69 insertions(+), 65 deletions(-)
diff --git a/src/pages/tenant/gdap-management/index.js b/src/pages/tenant/gdap-management/index.js
index 25e1a1308489..f1bde321dd71 100644
--- a/src/pages/tenant/gdap-management/index.js
+++ b/src/pages/tenant/gdap-management/index.js
@@ -1,99 +1,103 @@
-import { TabbedLayout } from "../../../layouts/TabbedLayout";
-import { Layout as DashboardLayout } from "../../../layouts/index.js";
-import tabOptions from "./tabOptions";
-import { Container } from "@mui/system";
-import { Grid } from "@mui/system";
-import { CippInfoBar } from "../../../components/CippCards/CippInfoBar";
-import { ApiPostCall, ApiGetCallWithPagination } from "../../../api/ApiCall";
+import { TabbedLayout } from '../../../layouts/TabbedLayout'
+import { Layout as DashboardLayout } from '../../../layouts/index.js'
+import tabOptions from './tabOptions'
+import { Container } from '@mui/system'
+import { Grid } from '@mui/system'
+import { CippInfoBar } from '../../../components/CippCards/CippInfoBar'
+import { ApiPostCall, ApiGetCallWithPagination } from '../../../api/ApiCall'
import {
Add,
AdminPanelSettings,
HourglassBottom,
Layers,
SupervisorAccount,
-} from "@mui/icons-material";
-import CippPermissionCheck from "../../../components/CippSettings/CippPermissionCheck";
-import { Button } from "@mui/material";
-import { useEffect, useState } from "react";
-import CippButtonCard from "../../../components/CippCards/CippButtonCard";
-import { WizardSteps } from "../../../components/CippWizard/wizard-steps";
-import Link from "next/link";
-import { CippHead } from "../../../components/CippComponents/CippHead";
-import { usePermissions } from "../../../hooks/use-permissions";
+} from '@mui/icons-material'
+import CippPermissionCheck from '../../../components/CippSettings/CippPermissionCheck'
+import { Button } from '@mui/material'
+import { useEffect, useState } from 'react'
+import CippButtonCard from '../../../components/CippCards/CippButtonCard'
+import { WizardSteps } from '../../../components/CippWizard/wizard-steps'
+import Link from 'next/link'
+import { CippHead } from '../../../components/CippComponents/CippHead'
+import { usePermissions } from '../../../hooks/use-permissions'
const Page = () => {
- const [createDefaults, setCreateDefaults] = useState(false);
- const [activeStep, setActiveStep] = useState(0);
- const { checkRoles } = usePermissions();
- const canViewGdapChecks = checkRoles(["CIPP.AppSettings.Read"]);
+ const [createDefaults, setCreateDefaults] = useState(false)
+ const [activeStep, setActiveStep] = useState(0)
+ const { checkPermissions } = usePermissions()
+ const canViewGdapChecks = checkPermissions(['CIPP.AppSettings.Read'])
const relationships = ApiGetCallWithPagination({
- url: "/api/ListGDAPRelationships",
- queryKey: "ListGDAPRelationships",
- });
+ url: '/api/ListGDAPRelationships',
+ queryKey: 'ListGDAPRelationships',
+ waiting: true,
+ })
const mappedRoles = ApiGetCallWithPagination({
- url: "/api/ListGDAPRoles",
- queryKey: "ListGDAPRoles",
- });
+ url: '/api/ListGDAPRoles',
+ queryKey: 'ListGDAPRoles',
+ waiting: true,
+ })
const roleTemplates = ApiGetCallWithPagination({
- url: "/api/ExecGDAPRoleTemplate",
- queryKey: "ListGDAPRoleTemplates",
- });
+ url: '/api/ExecGDAPRoleTemplate',
+ queryKey: 'ListGDAPRoleTemplates',
+ waiting: true,
+ })
const pendingInvites = ApiGetCallWithPagination({
- url: "/api/ListGDAPInvite",
- queryKey: "ListGDAPInvite",
- });
+ url: '/api/ListGDAPInvite',
+ queryKey: 'ListGDAPInvite',
+ waiting: true,
+ })
const createCippDefaults = ApiPostCall({
urlFromData: true,
- relatedQueryKeys: ["ListGDAPRoleTemplates", "ListGDAPRoles"],
- });
+ relatedQueryKeys: ['ListGDAPRoleTemplates', 'ListGDAPRoles'],
+ })
useEffect(() => {
if (roleTemplates.isSuccess) {
- var promptCreateDefaults = true;
+ var promptCreateDefaults = true
// check templates for CIPP Defaults
- const firstPageResults = roleTemplates?.data?.pages?.[0]?.Results;
+ const firstPageResults = roleTemplates?.data?.pages?.[0]?.Results
if (
firstPageResults &&
Array.isArray(firstPageResults) &&
firstPageResults.length > 0 &&
- firstPageResults.find((t) => t?.TemplateId === "CIPP Defaults")
+ firstPageResults.find((t) => t?.TemplateId === 'CIPP Defaults')
) {
- promptCreateDefaults = false;
+ promptCreateDefaults = false
}
- setCreateDefaults(promptCreateDefaults);
+ setCreateDefaults(promptCreateDefaults)
}
- }, [roleTemplates]);
+ }, [roleTemplates])
useEffect(() => {
if (mappedRoles.isSuccess && roleTemplates.isSuccess && pendingInvites.isSuccess) {
- const mappedRolesFirstPage = mappedRoles?.data?.pages?.[0];
+ const mappedRolesFirstPage = mappedRoles?.data?.pages?.[0]
if (
mappedRolesFirstPage &&
Array.isArray(mappedRolesFirstPage) &&
mappedRolesFirstPage.length > 0
) {
- setActiveStep(1);
+ setActiveStep(1)
- const roleTemplatesFirstPage = roleTemplates?.data?.pages?.[0]?.Results;
+ const roleTemplatesFirstPage = roleTemplates?.data?.pages?.[0]?.Results
if (
roleTemplatesFirstPage &&
Array.isArray(roleTemplatesFirstPage) &&
roleTemplatesFirstPage.length > 0
) {
- setActiveStep(2);
+ setActiveStep(2)
- const pendingInvitesFirstPage = pendingInvites?.data?.pages?.[0];
+ const pendingInvitesFirstPage = pendingInvites?.data?.pages?.[0]
if (
pendingInvitesFirstPage &&
Array.isArray(pendingInvitesFirstPage) &&
pendingInvitesFirstPage.length > 0
) {
- setActiveStep(4);
+ setActiveStep(4)
}
}
}
@@ -104,7 +108,7 @@ const Page = () => {
roleTemplates.isSuccess,
roleTemplates.isFetching,
pendingInvites.isSuccess,
- ]);
+ ])
return (
{
relationships.data?.pages
?.map((page) => page?.Results?.length || 0)
.reduce((a, b) => (a || 0) + (b || 0), 0) ?? 0,
- name: "GDAP Relationships",
- color: "secondary",
+ name: 'GDAP Relationships',
+ color: 'secondary',
},
{
icon: ,
@@ -140,8 +144,8 @@ const Page = () => {
mappedRoles.data?.pages
?.map((page) => page?.length || 0)
.reduce((a, b) => (a || 0) + (b || 0), 0) ?? 0,
- name: "Mapped Admin Roles",
- color: "green",
+ name: 'Mapped Admin Roles',
+ color: 'green',
},
{
icon: ,
@@ -149,7 +153,7 @@ const Page = () => {
roleTemplates.data?.pages
?.map((page) => page?.Results?.length || 0)
.reduce((a, b) => (a || 0) + (b || 0), 0) ?? 0,
- name: "Role Templates",
+ name: 'Role Templates',
},
{
icon: ,
@@ -157,7 +161,7 @@ const Page = () => {
pendingInvites.data?.pages
?.map((page) => page?.length || 0)
.reduce((a, b) => (a || 0) + (b || 0), 0) ?? 0,
- name: "Pending Invites",
+ name: 'Pending Invites',
},
]}
/>
@@ -177,27 +181,27 @@ const Page = () => {
{
)}
- );
-};
+ )
+}
Page.getLayout = (page) => (
{page}
-);
+)
-export default Page;
+export default Page
From 9346fe7f48ec34666b3a1b2adb87d4318a37a1de Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 28 Apr 2026 16:21:50 -0400
Subject: [PATCH 076/181] fix: add caching to onedrive/sharepoint site lists
---
.../CippComponents/CippReportDBControls.jsx | 100 ++++---
src/data/CIPPDBCacheTypes.json | 15 +
src/pages/teams-share/onedrive/index.js | 121 ++++----
src/pages/teams-share/sharepoint/index.js | 269 ++++++++++--------
4 files changed, 280 insertions(+), 225 deletions(-)
diff --git a/src/components/CippComponents/CippReportDBControls.jsx b/src/components/CippComponents/CippReportDBControls.jsx
index 063fd386bb5b..84e7955830db 100644
--- a/src/components/CippComponents/CippReportDBControls.jsx
+++ b/src/components/CippComponents/CippReportDBControls.jsx
@@ -1,11 +1,11 @@
-import { useState, useEffect, useMemo, useCallback } from "react";
-import { Button, Chip, SvgIcon, Tooltip } from "@mui/material";
-import { Stack } from "@mui/system";
-import { Sync, CloudDone, Bolt } from "@mui/icons-material";
-import { useSettings } from "../../hooks/use-settings";
-import { useDialog } from "../../hooks/use-dialog";
-import { CippApiDialog } from "./CippApiDialog";
-import { CippQueueTracker } from "../CippTable/CippQueueTracker";
+import { useState, useEffect, useMemo, useCallback } from 'react'
+import { Button, Chip, SvgIcon, Tooltip } from '@mui/material'
+import { Stack } from '@mui/system'
+import { Sync, CloudDone, Bolt } from '@mui/icons-material'
+import { useSettings } from '../../hooks/use-settings'
+import { useDialog } from '../../hooks/use-dialog'
+import { CippApiDialog } from './CippApiDialog'
+import { CippQueueTracker } from '../CippTable/CippQueueTracker'
/**
* Hook + UI component that encapsulates all CIPP Reporting DB cache/live mode logic.
@@ -44,80 +44,79 @@ export function useCippReportDB(config) {
syncData,
allowToggle = true,
defaultCached = true,
- cacheColumns = ["CacheTimestamp"],
- tenantColumn = "Tenant",
+ cacheColumns = ['CacheTimestamp'],
+ tenantColumn = 'Tenant',
apiData: extraApiData,
- } = config;
+ } = config
- const currentTenant = useSettings().currentTenant;
- const isAllTenants = currentTenant === "AllTenants";
- const dialog = useDialog();
- const [syncQueueId, setSyncQueueId] = useState(null);
- const [useReportDB, setUseReportDB] = useState(defaultCached);
+ const currentTenant = useSettings().currentTenant
+ const isAllTenants = currentTenant === 'AllTenants'
+ const dialog = useDialog()
+ const [syncQueueId, setSyncQueueId] = useState(null)
+ const [useReportDB, setUseReportDB] = useState(defaultCached)
// Reset to default whenever tenant changes; AllTenants always forces cached
useEffect(() => {
if (isAllTenants) {
- setUseReportDB(true);
+ setUseReportDB(true)
} else {
- setUseReportDB(defaultCached);
+ setUseReportDB(defaultCached)
}
- }, [currentTenant, isAllTenants, defaultCached]);
+ }, [currentTenant, isAllTenants, defaultCached])
// Whether the toggle is actually clickable
- const canToggle = allowToggle && !isAllTenants;
+ const canToggle = allowToggle && !isAllTenants
// Resolved API URL — append UseReportDB param when cached
const resolvedApiUrl = useMemo(() => {
- if (!useReportDB) return apiUrl;
- const sep = apiUrl.includes("?") ? "&" : "?";
- return `${apiUrl}${sep}UseReportDB=true`;
- }, [apiUrl, useReportDB]);
+ if (!useReportDB) return apiUrl
+ const sep = apiUrl.includes('?') ? '&' : '?'
+ return `${apiUrl}${sep}UseReportDB=true`
+ }, [apiUrl, useReportDB])
- // Alternative: for pages that pass apiData prop instead of URL params
+ // Keep mode flag in the URL only; CippTablePage merges apiData into query params.
const resolvedApiData = useMemo(() => {
- if (!useReportDB && !extraApiData) return undefined;
+ if (!extraApiData) return undefined
return {
- ...(extraApiData || {}),
- ...(useReportDB ? { UseReportDB: true } : {}),
- };
- }, [useReportDB, extraApiData]);
+ ...extraApiData,
+ }
+ }, [extraApiData])
// Query key that includes tenant + mode for proper cache separation
const resolvedQueryKey = useMemo(() => {
- return `${queryKey}-${currentTenant}-${useReportDB}`;
- }, [queryKey, currentTenant, useReportDB]);
+ return `${queryKey}-${currentTenant}-${useReportDB}`
+ }, [queryKey, currentTenant, useReportDB])
// Extra columns to show when in cached mode
const extraColumns = useMemo(() => {
- const cols = [];
+ const cols = []
if (useReportDB && isAllTenants) {
- cols.push(tenantColumn);
+ cols.push(tenantColumn)
}
if (useReportDB) {
- cols.push(...cacheColumns);
+ cols.push(...cacheColumns)
}
- return cols;
- }, [useReportDB, isAllTenants, tenantColumn, cacheColumns]);
+ return cols
+ }, [useReportDB, isAllTenants, tenantColumn, cacheColumns])
const handleSyncSuccess = useCallback((result) => {
if (result?.Metadata?.QueueId) {
- setSyncQueueId(result.Metadata.QueueId);
+ setSyncQueueId(result.Metadata.QueueId)
}
- }, []);
+ }, [])
// Tooltip text
const tooltipText = !allowToggle
- ? "This page always uses cached data from the CIPP reporting database."
+ ? 'This page always uses cached data from the CIPP reporting database.'
: isAllTenants
- ? "AllTenants always uses cached data"
+ ? 'AllTenants always uses cached data'
: useReportDB
- ? "Showing cached data — click to switch to live"
- : "Showing live data — click to switch to cache";
+ ? 'Showing cached data — click to switch to live'
+ : 'Showing live data — click to switch to cache'
const confirmText =
syncConfirmText ||
- `Run ${cacheName} cache sync for ${currentTenant}? This will update data immediately.`;
+ `Run ${cacheName} cache sync for ${currentTenant}? This will update data immediately.`
// The controls JSX
const controls = (
@@ -147,7 +146,7 @@ export function useCippReportDB(config) {
: }
- label={useReportDB ? "Cached" : "Live"}
+ label={useReportDB ? 'Cached' : 'Live'}
color="primary"
size="small"
onClick={canToggle ? () => setUseReportDB((prev) => !prev) : undefined}
@@ -158,7 +157,7 @@ export function useCippReportDB(config) {
- );
+ )
// The sync dialog JSX — render alongside the table page
const syncDialogElement = (
@@ -167,19 +166,18 @@ export function useCippReportDB(config) {
title={syncTitle}
fields={[]}
api={{
- type: "GET",
- url: "/api/ExecCIPPDBCache",
+ type: 'GET',
+ url: '/api/ExecCIPPDBCache',
confirmText,
relatedQueryKeys: [`${queryKey}-${currentTenant}-true`],
data: {
Name: cacheName,
- Types: "None",
...(syncData || {}),
},
onSuccess: handleSyncSuccess,
}}
/>
- );
+ )
return {
useReportDB,
@@ -191,5 +189,5 @@ export function useCippReportDB(config) {
cacheColumns: extraColumns,
controls,
syncDialog: syncDialogElement,
- };
+ }
}
diff --git a/src/data/CIPPDBCacheTypes.json b/src/data/CIPPDBCacheTypes.json
index 8ff123ff4aff..8742001441cd 100644
--- a/src/data/CIPPDBCacheTypes.json
+++ b/src/data/CIPPDBCacheTypes.json
@@ -254,11 +254,26 @@
"friendlyName": "Mailbox Usage",
"description": "Exchange Online mailbox usage statistics"
},
+ {
+ "type": "OneDriveSiteListing",
+ "friendlyName": "OneDrive Site Listing",
+ "description": "OneDrive personal site listing details used for usage reporting"
+ },
{
"type": "OneDriveUsage",
"friendlyName": "OneDrive Usage",
"description": "OneDrive usage statistics"
},
+ {
+ "type": "SharePointSiteListing",
+ "friendlyName": "SharePoint Site Listing",
+ "description": "SharePoint site listing details used for usage reporting"
+ },
+ {
+ "type": "SharePointSiteUsage",
+ "friendlyName": "SharePoint Site Usage",
+ "description": "SharePoint site usage statistics"
+ },
{
"type": "ConditionalAccessPolicies",
"friendlyName": "Conditional Access Policies",
diff --git a/src/pages/teams-share/onedrive/index.js b/src/pages/teams-share/onedrive/index.js
index 8d279cffaf73..b5ef1f7a2792 100644
--- a/src/pages/teams-share/onedrive/index.js
+++ b/src/pages/teams-share/onedrive/index.js
@@ -1,43 +1,52 @@
-import { Layout as DashboardLayout } from "../../../layouts/index.js";
-import { CippTablePage } from "../../../components/CippComponents/CippTablePage.jsx";
-import { PersonAdd, PersonRemove } from "@mui/icons-material";
+import { Layout as DashboardLayout } from '../../../layouts/index.js'
+import { CippTablePage } from '../../../components/CippComponents/CippTablePage.jsx'
+import { PersonAdd, PersonRemove } from '@mui/icons-material'
+import { useCippReportDB } from '../../../components/CippComponents/CippReportDBControls'
const Page = () => {
- const pageTitle = "OneDrive";
+ const pageTitle = 'OneDrive'
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListSites?type=OneDriveUsageAccount',
+ queryKey: 'ListSites-OneDriveUsageAccount',
+ cacheName: 'OneDriveUsage',
+ syncTitle: 'Sync OneDrive Usage',
+ allowToggle: true,
+ defaultCached: false,
+ })
const actions = [
{
- label: "Add permissions to OneDrive",
+ label: 'Add permissions to OneDrive',
icon: ,
- type: "POST",
- url: "/api/ExecSharePointPerms",
+ type: 'POST',
+ url: '/api/ExecSharePointPerms',
data: {
- UPN: "ownerPrincipalName",
- URL: "webUrl",
+ UPN: 'ownerPrincipalName',
+ URL: 'webUrl',
RemovePermission: false,
},
confirmText: "Select the User to add to this user's OneDrive permissions",
fields: [
{
- type: "autoComplete",
- name: "onedriveAccessUser",
- label: "Select User",
+ type: 'autoComplete',
+ name: 'onedriveAccessUser',
+ label: 'Select User',
multiple: false,
creatable: false,
api: {
- url: "/api/ListGraphRequest",
+ url: '/api/ListGraphRequest',
data: {
- Endpoint: "users",
- $select: "id,displayName,userPrincipalName",
+ Endpoint: 'users',
+ $select: 'id,displayName,userPrincipalName',
$top: 999,
$count: true,
},
- queryKey: "ListUsersAutoComplete",
- dataKey: "Results",
+ queryKey: 'ListUsersAutoComplete',
+ dataKey: 'Results',
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
- valueField: "userPrincipalName",
+ valueField: 'userPrincipalName',
addedField: {
- id: "id",
+ id: 'id',
},
showRefresh: true,
},
@@ -45,57 +54,67 @@ const Page = () => {
],
},
{
- label: "Remove permissions from OneDrive",
+ label: 'Remove permissions from OneDrive',
icon: ,
- type: "POST",
- url: "/api/ExecSharePointPerms",
+ type: 'POST',
+ url: '/api/ExecSharePointPerms',
data: {
- UPN: "ownerPrincipalName",
- URL: "webUrl",
+ UPN: 'ownerPrincipalName',
+ URL: 'webUrl',
RemovePermission: true,
},
confirmText: "Select the User to remove from this user's OneDrive permissions",
fields: [
{
- type: "autoComplete",
- name: "onedriveAccessUser",
- label: "Select User",
+ type: 'autoComplete',
+ name: 'onedriveAccessUser',
+ label: 'Select User',
multiple: false,
creatable: false,
api: {
- url: "/api/listUsers",
+ url: '/api/listUsers',
labelField: (onedriveAccessUser) =>
`${onedriveAccessUser.displayName} (${onedriveAccessUser.userPrincipalName})`,
- valueField: "userPrincipalName",
+ valueField: 'userPrincipalName',
addedField: {
- displayName: "displayName",
+ displayName: 'displayName',
},
},
},
],
},
- ];
+ ]
+
+ const simpleColumns = [
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
+ 'displayName',
+ 'createdDateTime',
+ 'ownerPrincipalName',
+ 'lastActivityDate',
+ 'fileCount',
+ 'storageUsedInGigabytes',
+ 'storageAllocatedInGigabytes',
+ 'reportRefreshDate',
+ 'webUrl',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
+ ]
return (
-
- );
-};
+ <>
+
+ {reportDB.syncDialog}
+ >
+ )
+}
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page}
-export default Page;
+export default Page
diff --git a/src/pages/teams-share/sharepoint/index.js b/src/pages/teams-share/sharepoint/index.js
index 21cefc406ca4..ac08cec280cd 100644
--- a/src/pages/teams-share/sharepoint/index.js
+++ b/src/pages/teams-share/sharepoint/index.js
@@ -1,6 +1,6 @@
-import { Layout as DashboardLayout } from "../../../layouts/index.js";
-import { CippTablePage } from "../../../components/CippComponents/CippTablePage.jsx";
-import { Button } from "@mui/material";
+import { Layout as DashboardLayout } from '../../../layouts/index.js'
+import { CippTablePage } from '../../../components/CippComponents/CippTablePage.jsx'
+import { Button } from '@mui/material'
import {
Add,
AddToPhotos,
@@ -9,49 +9,59 @@ import {
AdminPanelSettings,
NoAccounts,
Delete,
-} from "@mui/icons-material";
-import Link from "next/link";
-import { CippDataTable } from "../../../components/CippTable/CippDataTable";
-import { useSettings } from "../../../hooks/use-settings";
+} from '@mui/icons-material'
+import Link from 'next/link'
+import { Stack } from '@mui/system'
+import { CippDataTable } from '../../../components/CippTable/CippDataTable'
+import { useSettings } from '../../../hooks/use-settings'
+import { useCippReportDB } from '../../../components/CippComponents/CippReportDBControls'
const Page = () => {
- const pageTitle = "SharePoint Sites";
- const tenantFilter = useSettings().currentTenant;
+ const pageTitle = 'SharePoint Sites'
+ const tenantFilter = useSettings().currentTenant
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListSites?type=SharePointSiteUsage',
+ queryKey: 'ListSites-SharePointSiteUsage',
+ cacheName: 'SharePointSiteUsage',
+ syncTitle: 'Sync SharePoint Site Usage',
+ allowToggle: true,
+ defaultCached: false,
+ })
const actions = [
{
- label: "Add Member",
- type: "POST",
+ label: 'Add Member',
+ type: 'POST',
icon: ,
- url: "/api/ExecSetSharePointMember",
+ url: '/api/ExecSetSharePointMember',
data: {
- groupId: "ownerPrincipalName",
+ groupId: 'ownerPrincipalName',
add: true,
- URL: "webUrl",
- SharePointType: "rootWebTemplate",
+ URL: 'webUrl',
+ SharePointType: 'rootWebTemplate',
},
- confirmText: "Select the User to add as a member.",
+ confirmText: 'Select the User to add as a member.',
fields: [
{
- type: "autoComplete",
- name: "user",
- label: "Select User",
+ type: 'autoComplete',
+ name: 'user',
+ label: 'Select User',
multiple: false,
creatable: false,
api: {
- url: "/api/ListGraphRequest",
+ url: '/api/ListGraphRequest',
data: {
- Endpoint: "users",
- $select: "id,displayName,userPrincipalName",
+ Endpoint: 'users',
+ $select: 'id,displayName,userPrincipalName',
$top: 999,
$count: true,
},
- queryKey: "ListUsersAutoComplete",
- dataKey: "Results",
+ queryKey: 'ListUsersAutoComplete',
+ dataKey: 'Results',
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
- valueField: "userPrincipalName",
+ valueField: 'userPrincipalName',
addedField: {
- id: "id",
+ id: 'id',
},
showRefresh: true,
},
@@ -60,38 +70,38 @@ const Page = () => {
multiPost: false,
},
{
- label: "Remove Member",
- type: "POST",
+ label: 'Remove Member',
+ type: 'POST',
icon: ,
- url: "/api/ExecSetSharePointMember",
+ url: '/api/ExecSetSharePointMember',
data: {
- groupId: "ownerPrincipalName",
+ groupId: 'ownerPrincipalName',
add: false,
- URL: "URL",
- SharePointType: "rootWebTemplate",
+ URL: 'URL',
+ SharePointType: 'rootWebTemplate',
},
- confirmText: "Select the User to remove as a member.",
+ confirmText: 'Select the User to remove as a member.',
fields: [
{
- type: "autoComplete",
- name: "user",
- label: "Select User",
+ type: 'autoComplete',
+ name: 'user',
+ label: 'Select User',
multiple: false,
creatable: false,
api: {
- url: "/api/ListGraphRequest",
+ url: '/api/ListGraphRequest',
data: {
- Endpoint: "users",
- $select: "id,displayName,userPrincipalName",
+ Endpoint: 'users',
+ $select: 'id,displayName,userPrincipalName',
$top: 999,
$count: true,
},
- queryKey: "ListUsersAutoComplete",
- dataKey: "Results",
+ queryKey: 'ListUsersAutoComplete',
+ dataKey: 'Results',
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
- valueField: "userPrincipalName",
+ valueField: 'userPrincipalName',
addedField: {
- id: "id",
+ id: 'id',
},
showRefresh: true,
},
@@ -100,37 +110,37 @@ const Page = () => {
multiPost: false,
},
{
- label: "Add Site Admin",
- type: "POST",
+ label: 'Add Site Admin',
+ type: 'POST',
icon: ,
- url: "/api/ExecSharePointPerms",
+ url: '/api/ExecSharePointPerms',
data: {
- UPN: "ownerPrincipalName",
+ UPN: 'ownerPrincipalName',
RemovePermission: false,
- URL: "webUrl",
+ URL: 'webUrl',
},
- confirmText: "Select the User to add to the Site Admins permissions",
+ confirmText: 'Select the User to add to the Site Admins permissions',
fields: [
{
- type: "autoComplete",
- name: "user",
- label: "Select User",
+ type: 'autoComplete',
+ name: 'user',
+ label: 'Select User',
multiple: false,
creatable: false,
api: {
- url: "/api/ListGraphRequest",
+ url: '/api/ListGraphRequest',
data: {
- Endpoint: "users",
- $select: "id,displayName,userPrincipalName",
+ Endpoint: 'users',
+ $select: 'id,displayName,userPrincipalName',
$top: 999,
$count: true,
},
- queryKey: "ListUsersAutoComplete",
- dataKey: "Results",
+ queryKey: 'ListUsersAutoComplete',
+ dataKey: 'Results',
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
- valueField: "userPrincipalName",
+ valueField: 'userPrincipalName',
addedField: {
- id: "id",
+ id: 'id',
},
showRefresh: true,
},
@@ -139,37 +149,37 @@ const Page = () => {
multiPost: false,
},
{
- label: "Remove Site Admin",
- type: "POST",
+ label: 'Remove Site Admin',
+ type: 'POST',
icon: ,
- url: "/api/ExecSharePointPerms",
+ url: '/api/ExecSharePointPerms',
data: {
- UPN: "ownerPrincipalName",
+ UPN: 'ownerPrincipalName',
RemovePermission: true,
- URL: "webUrl",
+ URL: 'webUrl',
},
- confirmText: "Select the User to remove from the Site Admins permissions",
+ confirmText: 'Select the User to remove from the Site Admins permissions',
fields: [
{
- type: "autoComplete",
- name: "user",
- label: "Select User",
+ type: 'autoComplete',
+ name: 'user',
+ label: 'Select User',
multiple: false,
creatable: false,
api: {
- url: "/api/ListGraphRequest",
+ url: '/api/ListGraphRequest',
data: {
- Endpoint: "users",
- $select: "id,displayName,userPrincipalName",
+ Endpoint: 'users',
+ $select: 'id,displayName,userPrincipalName',
$top: 999,
$count: true,
},
- queryKey: "ListUsersAutoComplete",
- dataKey: "Results",
+ queryKey: 'ListUsersAutoComplete',
+ dataKey: 'Results',
labelField: (user) => `${user.displayName} (${user.userPrincipalName})`,
- valueField: "userPrincipalName",
+ valueField: 'userPrincipalName',
addedField: {
- id: "id",
+ id: 'id',
},
showRefresh: true,
},
@@ -178,75 +188,88 @@ const Page = () => {
multiPost: false,
},
{
- label: "Delete Site",
- type: "POST",
+ label: 'Delete Site',
+ type: 'POST',
icon: ,
- url: "/api/DeleteSharepointSite",
+ url: '/api/DeleteSharepointSite',
data: {
- SiteId: "siteId",
+ SiteId: 'siteId',
},
- confirmText: "Are you sure you want to delete this SharePoint site? This action cannot be undone.",
- color: "error",
+ confirmText:
+ 'Are you sure you want to delete this SharePoint site? This action cannot be undone.',
+ color: 'error',
multiPost: false,
},
- ];
+ ]
const offCanvas = {
- extendedInfoFields: ["displayName", "description", "webUrl"],
+ extendedInfoFields: ['displayName', 'description', 'webUrl'],
actions: actions,
children: (row) => (
),
- size: "lg", // Make the offcanvas extra large
- };
+ size: 'lg', // Make the offcanvas extra large
+ }
+
+ const simpleColumns = [
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
+ 'displayName',
+ 'createdDateTime',
+ 'ownerPrincipalName',
+ 'lastActivityDate',
+ 'fileCount',
+ 'storageUsedInGigabytes',
+ 'storageAllocatedInGigabytes',
+ 'reportRefreshDate',
+ 'webUrl',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
+ ]
+
+ const pageActions = (
+
+ }>
+ Add Site
+
+ }
+ >
+ Bulk Add Sites
+
+ {reportDB.controls}
+
+ )
return (
-
- }>
- Add Site
-
- }
- >
- Bulk Add Sites
-
- >
- }
- />
- );
-};
+ <>
+
+ {reportDB.syncDialog}
+ >
+ )
+}
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page}
-export default Page;
+export default Page
From 1eddb9f141ae4931883ab533e56c60f3169ddfdd Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 28 Apr 2026 17:01:31 -0400
Subject: [PATCH 077/181] fix: add corrupt bookmark sanitization
---
src/hooks/use-user-bookmarks.js | 40 +++++++++++++++++++++++++--------
1 file changed, 31 insertions(+), 9 deletions(-)
diff --git a/src/hooks/use-user-bookmarks.js b/src/hooks/use-user-bookmarks.js
index 0e6b1512bb35..7427ea5c06f0 100644
--- a/src/hooks/use-user-bookmarks.js
+++ b/src/hooks/use-user-bookmarks.js
@@ -4,18 +4,40 @@ import { ApiGetCall, ApiPostCall } from "../api/ApiCall";
const SETTINGS_STORAGE_KEY = "app.settings";
+const sanitizeBookmark = (bookmark) => {
+ if (!bookmark || typeof bookmark !== "object") {
+ return null;
+ }
+
+ if (typeof bookmark.path !== "string") {
+ return null;
+ }
+
+ const path = bookmark.path.trim();
+ if (!path) {
+ return null;
+ }
+
+ const label =
+ typeof bookmark.label === "string" && bookmark.label.trim()
+ ? bookmark.label.trim()
+ : path;
+
+ return {
+ ...bookmark,
+ path,
+ label,
+ };
+};
+
const normalizeBookmarks = (value) => {
if (Array.isArray(value)) {
- return value;
+ return value.map(sanitizeBookmark).filter(Boolean);
}
- if (
- value &&
- typeof value === "object" &&
- typeof value.path === "string" &&
- typeof value.label === "string"
- ) {
- return [value];
+ const singleBookmark = sanitizeBookmark(value);
+ if (singleBookmark) {
+ return [singleBookmark];
}
return [];
@@ -103,7 +125,7 @@ export const useUserBookmarks = () => {
const persistBookmarks = useCallback(
(nextBookmarks, callbacks = {}) => {
- const safeBookmarks = Array.isArray(nextBookmarks) ? nextBookmarks : [];
+ const safeBookmarks = normalizeBookmarks(nextBookmarks);
queryClient.setQueryData(["userSettings"], (previous) => ({
...(previous || {}),
From e48cbe6e860bb9477a8ef22caf0224cc6bcf6970 Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Tue, 28 Apr 2026 22:53:09 +0200
Subject: [PATCH 078/181] feat: update intuneCollection with new properties
---
src/data/intuneCollection.json | 257817 +-----------------------------
1 file changed, 1 insertion(+), 257816 deletions(-)
diff --git a/src/data/intuneCollection.json b/src/data/intuneCollection.json
index c6d19ca27858..879a69a8f4dd 100644
--- a/src/data/intuneCollection.json
+++ b/src/data/intuneCollection.json
@@ -1,257816 +1 @@
-[
- {
- "id": ".globalpreferences_.globalpreferences",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": ".globalpreferences_com.apple.autologout.autologoutdelay",
- "displayName": "Auto Log Out Delay",
- "options": null
- },
- {
- "id": ".globalpreferences_multiplesessionenabled",
- "displayName": "Multiple Session Enabled",
- "options": [
- {
- "id": ".globalpreferences_multiplesessionenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": ".globalpreferences_multiplesessionenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedge_pol_targetversionprefixmicrosoftedge",
- "displayName": "Target version override",
- "options": [
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedge_pol_targetversionprefixmicrosoftedge_0",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedge_pol_targetversionprefixmicrosoftedge_1",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedge_pol_targetversionprefixmicrosoftedge_part_targetversionprefix",
- "displayName": "Target version (Device)",
- "options": null
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgebeta_pol_targetversionprefixmicrosoftedgebeta",
- "displayName": "Target version override",
- "options": [
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgebeta_pol_targetversionprefixmicrosoftedgebeta_0",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgebeta_pol_targetversionprefixmicrosoftedgebeta_1",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgebeta_pol_targetversionprefixmicrosoftedgebeta_part_targetversionprefix",
- "displayName": "Target version (Device)",
- "options": null
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgecanary_pol_targetversionprefixmicrosoftedgecanary",
- "displayName": "Target version override",
- "options": [
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgecanary_pol_targetversionprefixmicrosoftedgecanary_0",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgecanary_pol_targetversionprefixmicrosoftedgecanary_1",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgecanary_pol_targetversionprefixmicrosoftedgecanary_part_targetversionprefix",
- "displayName": "Target version (Device)",
- "options": null
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgedev_pol_targetversionprefixmicrosoftedgedev",
- "displayName": "Target version override",
- "options": [
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgedev_pol_targetversionprefixmicrosoftedgedev_0",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgedev_pol_targetversionprefixmicrosoftedgedev_1",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "~policy~cat_edgeupdate~cat_applications~cat_microsoftedgedev_pol_targetversionprefixmicrosoftedgedev_part_targetversionprefix",
- "displayName": "Target version (Device)",
- "options": null
- },
- {
- "id": "3~policy~microsoft_edge_targetblankimpliesnoopener",
- "displayName": "Do not set window.opener for links targeting _blank (obsolete) (User)",
- "options": [
- {
- "id": "3~policy~microsoft_edge_targetblankimpliesnoopener_0",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "3~policy~microsoft_edge_targetblankimpliesnoopener_1",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "3~policy~microsoft_edge~httpauthentication_basicauthoverhttpenabled",
- "displayName": "Allow Basic authentication for HTTP (User)",
- "options": [
- {
- "id": "3~policy~microsoft_edge~httpauthentication_basicauthoverhttpenabled_0",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "3~policy~microsoft_edge~httpauthentication_basicauthoverhttpenabled_1",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "ade_activatecellulardata",
- "displayName": "Carrier activation server URL",
- "options": null
- },
- {
- "id": "ade_activatecellulardatachoices",
- "displayName": "Activate cellular data",
- "options": [
- {
- "id": "ade_activatecellulardatachoices_0",
- "displayName": "No",
- "description": null
- },
- {
- "id": "ade_activatecellulardatachoices_1",
- "displayName": "Yes",
- "description": null
- }
- ]
- },
- {
- "id": "ade_appledevicenametemplate",
- "displayName": "Device name template",
- "options": null
- },
- {
- "id": "ade_authenticationmethod",
- "displayName": "Intune authentication method",
- "options": {
- "id": "ade_authenticationmethod_2",
- "displayName": "Setup Assistant with modern authentication",
- "description": null
- }
- },
- {
- "id": "ade_awaitconfiguration_basic",
- "displayName": "Await final configuration",
- "options": [
- {
- "id": "ade_awaitconfiguration_basic_0",
- "displayName": "No",
- "description": null
- },
- {
- "id": "ade_awaitconfiguration_basic_1",
- "displayName": "Yes",
- "description": null
- }
- ]
- },
- {
- "id": "ade_devicenametemplatechoices",
- "displayName": "Apple device name template",
- "options": [
- {
- "id": "ade_devicenametemplatechoices_0",
- "displayName": "No",
- "description": null
- },
- {
- "id": "ade_devicenametemplatechoices_1",
- "displayName": "Yes",
- "description": null
- }
- ]
- },
- {
- "id": "ade_lockedenrollment",
- "displayName": "Locked enrollment",
- "options": [
- {
- "id": "ade_lockedenrollment_0",
- "displayName": "No",
- "description": null
- },
- {
- "id": "ade_lockedenrollment_1",
- "displayName": "Yes",
- "description": null
- }
- ]
- },
- {
- "id": "ade_maximumcachedusers",
- "displayName": "Maximum cached users",
- "options": null
- },
- {
- "id": "ade_maximumsecondsafterscreenlockbeofrepasswordisrequired",
- "displayName": "Maximum seconds after screen lock before password is required",
- "options": null
- },
- {
- "id": "ade_maximumsecondsinactivityuntiltemporarysessionlogsout",
- "displayName": "Maximum seconds of inactivity until temporary session logs out",
- "options": null
- },
- {
- "id": "ade_maximumsecondsinactivityuntiluserlogsout",
- "displayName": "Maximum seconds of inactivity until user session logs out",
- "options": null
- },
- {
- "id": "ade_modernauth_awaitfinalconfiguration",
- "displayName": "Await final configuration",
- "options": [
- {
- "id": "ade_modernauth_awaitfinalconfiguration_0",
- "displayName": "No",
- "description": null
- },
- {
- "id": "ade_modernauth_awaitfinalconfiguration_1",
- "displayName": "Yes",
- "description": null
- }
- ]
- },
- {
- "id": "ade_requiresharedipadtemporarysessiononly",
- "displayName": "Require Shared iPad temporary session only",
- "options": [
- {
- "id": "ade_requiresharedipadtemporarysessiononly_0",
- "displayName": "Not configured",
- "description": null
- },
- {
- "id": "ade_requiresharedipadtemporarysessiononly_1",
- "displayName": "Yes",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_actionbutton",
- "displayName": "Action Button",
- "options": [
- {
- "id": "ade_setupassistant_actionbutton_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_actionbutton_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_androidmigration",
- "displayName": "Android migration",
- "options": [
- {
- "id": "ade_setupassistant_androidmigration_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_androidmigration_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_appearance",
- "displayName": "Appearance",
- "options": [
- {
- "id": "ade_setupassistant_appearance_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_appearance_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_appleid",
- "displayName": "Apple ID",
- "options": [
- {
- "id": "ade_setupassistant_appleid_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_appleid_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_applepay",
- "displayName": "Apple Pay",
- "options": [
- {
- "id": "ade_setupassistant_applepay_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_applepay_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_department",
- "displayName": "Department",
- "options": null
- },
- {
- "id": "ade_setupassistant_departmentphone",
- "displayName": "Department phone",
- "options": null
- },
- {
- "id": "ade_setupassistant_devicemigration",
- "displayName": "Device to device migration",
- "options": [
- {
- "id": "ade_setupassistant_devicemigration_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_devicemigration_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_diagnosticsdata",
- "displayName": "Diagnostics Data",
- "options": [
- {
- "id": "ade_setupassistant_diagnosticsdata_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_diagnosticsdata_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_enablelockdownmode",
- "displayName": "Enable Lock down Mode",
- "options": [
- {
- "id": "ade_setupassistant_enablelockdownmode_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_enablelockdownmode_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_getstarted",
- "displayName": "Get Started",
- "options": [
- {
- "id": "ade_setupassistant_getstarted_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_getstarted_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_imessagefacetime",
- "displayName": "iMessage and FaceTime",
- "options": [
- {
- "id": "ade_setupassistant_imessagefacetime_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_imessagefacetime_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_intelligence",
- "displayName": "Intelligence",
- "options": [
- {
- "id": "ade_setupassistant_intelligence_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_intelligence_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_locationservices",
- "displayName": "Location services",
- "options": [
- {
- "id": "ade_setupassistant_locationservices_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_locationservices_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_passcode",
- "displayName": "Passcode",
- "options": [
- {
- "id": "ade_setupassistant_passcode_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_passcode_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_privacy",
- "displayName": "Privacy",
- "options": [
- {
- "id": "ade_setupassistant_privacy_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_privacy_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_restore",
- "displayName": "Restore",
- "options": [
- {
- "id": "ade_setupassistant_restore_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_restore_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_restorecompleted",
- "displayName": "Restore completed",
- "options": [
- {
- "id": "ade_setupassistant_restorecompleted_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_restorecompleted_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_safety",
- "displayName": "Emergency SOS",
- "options": [
- {
- "id": "ade_setupassistant_safety_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_safety_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_screentime",
- "displayName": "Screen Time",
- "options": [
- {
- "id": "ade_setupassistant_screentime_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_screentime_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_simsetup",
- "displayName": "SIM setup",
- "options": [
- {
- "id": "ade_setupassistant_simsetup_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_simsetup_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_siri",
- "displayName": "Siri",
- "options": [
- {
- "id": "ade_setupassistant_siri_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_siri_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_softwareupdate",
- "displayName": "Software Update",
- "options": [
- {
- "id": "ade_setupassistant_softwareupdate_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_softwareupdate_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_softwareupdatecompleted",
- "displayName": "Software Update completed",
- "options": [
- {
- "id": "ade_setupassistant_softwareupdatecompleted_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_softwareupdatecompleted_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_termsandconditions",
- "displayName": "Terms and conditions",
- "options": [
- {
- "id": "ade_setupassistant_termsandconditions_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_termsandconditions_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_termsofaddress",
- "displayName": "Terms of Address",
- "options": [
- {
- "id": "ade_setupassistant_termsofaddress_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_termsofaddress_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_touchfaceid",
- "displayName": "Touch ID and Face ID",
- "options": [
- {
- "id": "ade_setupassistant_touchfaceid_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_touchfaceid_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_voiceselection",
- "displayName": "Voice selection",
- "options": [
- {
- "id": "ade_setupassistant_voiceselection_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_voiceselection_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_setupassistant_watchmigration",
- "displayName": "Watch migration",
- "options": [
- {
- "id": "ade_setupassistant_watchmigration_0",
- "displayName": "Hide",
- "description": null
- },
- {
- "id": "ade_setupassistant_watchmigration_1",
- "displayName": "Show",
- "description": null
- }
- ]
- },
- {
- "id": "ade_useraffinity",
- "displayName": "User affinity",
- "options": [
- {
- "id": "ade_useraffinity_1",
- "displayName": "Enroll with user affinity",
- "description": null
- },
- {
- "id": "ade_useraffinity_0",
- "displayName": "Enroll without user affinity",
- "description": null
- },
- {
- "id": "ade_useraffinity_2",
- "displayName": "Enroll with Microsoft Entra ID shared mode",
- "description": null
- },
- {
- "id": "ade_useraffinity_3",
- "displayName": "Enroll with Shared iPad",
- "description": null
- }
- ]
- },
- {
- "id": "ade_useraffinity_awaitfinalconfiguration",
- "displayName": "Await final configuration",
- "options": [
- {
- "id": "ade_useraffinity_awaitfinalconfiguration_0",
- "displayName": "No",
- "description": null
- },
- {
- "id": "ade_useraffinity_awaitfinalconfiguration_1",
- "displayName": "Yes",
- "description": null
- }
- ]
- },
- {
- "id": "ade_useraffinitybasic",
- "displayName": "User affinity",
- "options": {
- "id": "ade_useraffinitybasic_0",
- "displayName": "Enroll without user affinity",
- "description": null
- }
- },
- {
- "id": "apple_customprofile_profile",
- "displayName": "Profile",
- "options": null
- },
- {
- "id": "audioaccessory_audioaccessory",
- "displayName": "com.apple.configuration.audio-accessory.settings",
- "options": null
- },
- {
- "id": "audioaccessory_temporarypairing",
- "displayName": "Temporary Pairing",
- "options": null
- },
- {
- "id": "audioaccessory_temporarypairing_configuration",
- "displayName": "Configuration",
- "options": null
- },
- {
- "id": "audioaccessory_temporarypairing_configuration_unpairingtime",
- "displayName": "Unpairing Time",
- "options": null
- },
- {
- "id": "audioaccessory_temporarypairing_configuration_unpairingtime_hour",
- "displayName": "Hour",
- "options": null
- },
- {
- "id": "audioaccessory_temporarypairing_configuration_unpairingtime_policy",
- "displayName": "Policy",
- "options": [
- {
- "id": "audioaccessory_temporarypairing_configuration_unpairingtime_policy_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "audioaccessory_temporarypairing_configuration_unpairingtime_policy_1",
- "displayName": "Hour",
- "description": null
- }
- ]
- },
- {
- "id": "audioaccessory_temporarypairing_disabled",
- "displayName": "Disabled",
- "options": [
- {
- "id": "audioaccessory_temporarypairing_disabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "audioaccessory_temporarypairing_disabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.accountsblockmodification",
- "displayName": "Block account changes",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.accountsblockmodification_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.accountsblockmodification_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsallowinstallfromunknownsources",
- "displayName": "Allow installation from unknown sources",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.appsallowinstallfromunknownsources_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsallowinstallfromunknownsources_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsautoupdatepolicy",
- "displayName": "App auto-updates (work profile-level)",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.appsautoupdatepolicy_notconfigured",
- "displayName": "Not configured",
- "description": "Not configured; this value is ignored."
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsautoupdatepolicy_userchoice",
- "displayName": "User choice",
- "description": "The user can control auto-updates."
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsautoupdatepolicy_never",
- "displayName": "Never",
- "description": "Apps are never auto-updated."
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsautoupdatepolicy_wifionly",
- "displayName": "Wi-Fi only",
- "description": "Apps are auto-updated over Wi-Fi only."
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsautoupdatepolicy_always",
- "displayName": "Always",
- "description": "Apps are auto-updated at any time. Data charges may apply."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsblockinstallfromunknownsourcesaosp",
- "displayName": "Block user from turning on unknown sources",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.appsblockinstallfromunknownsourcesaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsblockinstallfromunknownsourcesaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsdefaultpermissionpolicy",
- "displayName": "Default permission policy (work profile-level)",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.appsdefaultpermissionpolicy_devicedefault",
- "displayName": "Device default",
- "description": "Device default value, no intent."
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsdefaultpermissionpolicy_prompt",
- "displayName": "Prompt",
- "description": "Prompt."
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsdefaultpermissionpolicy_autogrant",
- "displayName": "Auto grant",
- "description": "Auto grant."
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsdefaultpermissionpolicy_autodeny",
- "displayName": "Auto deny",
- "description": "Auto deny."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsrecommendskippingfirstusehints",
- "displayName": "Skip first use hints",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.appsrecommendskippingfirstusehints_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.appsrecommendskippingfirstusehints_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.assistcontentpolicy",
- "displayName": "Block assist content sharing with privileged apps",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.assistcontentpolicy_false",
- "displayName": "False",
- "description": "Assist content is allowed to be sent to a privileged app."
- },
- {
- "id": "com.android.devicerestrictionpolicy.assistcontentpolicy_true",
- "displayName": "True",
- "description": "Assist content is blocked from being sent to a privileged app."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockconfiguration",
- "displayName": "Block Bluetooth configuration",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockconfiguration_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockconfiguration_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockconfigurationaosp",
- "displayName": "Block Bluetooth configuration",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockconfigurationaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockconfigurationaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockcontactsharing",
- "displayName": "Block contact sharing via Bluetooth (work profile-level)",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockcontactsharing_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockcontactsharing_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblocked",
- "displayName": "Block Bluetooth",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblocked_true",
- "displayName": "True",
- "description": "True"
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblocked_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockedaosp",
- "displayName": "Block Bluetooth",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockedaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.bluetoothblockedaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.camerablocked",
- "displayName": "Block access to camera (work profile-level)",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.camerablocked_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.camerablocked_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.camerablockedaosp",
- "displayName": "Block access to camera",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.camerablockedaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.camerablockedaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.cellularblockwifitethering",
- "displayName": "Block tethering and access to hotspots",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.cellularblockwifitethering_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.cellularblockwifitethering_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.certificatecredentialconfigurationdisabled",
- "displayName": "Block users from configuring credentials (work profile-level)",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.certificatecredentialconfigurationdisabled_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.certificatecredentialconfigurationdisabled_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesallowcopypaste",
- "displayName": "Allow copy and paste between work and personal profiles ",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesallowcopypaste_false",
- "displayName": "False",
- "description": "false"
- },
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesallowcopypaste_true",
- "displayName": "True",
- "description": "true"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesallowdatasharing",
- "displayName": "Data sharing between work and personal profile",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesallowdatasharing_notconfigured",
- "displayName": "Device default",
- "description": "Not configured; this value defaults to CROSS_PROFILE_DATA_SHARING_UNSPECIFIED."
- },
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesallowdatasharing_crossprofiledatasharingblocked",
- "displayName": "Block all sharing between profiles",
- "description": "Data cannot be shared from both the personal profile to work profile and the work profile to the personal profile."
- },
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesallowdatasharing_datasharingfromworktopersonalblocked",
- "displayName": "Block sharing from work to personal profile",
- "description": "Prevents users from sharing data from the work profile to apps in the personal profile. Personal data can be shared with work apps."
- },
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesallowdatasharing_crossprofiledatasharingallowed",
- "displayName": "No restrictions on sharing",
- "description": "Data from either profile can be shared with the other profile."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesshowworkcontactsinpersonalprofile",
- "displayName": "Block searching of work contacts and displaying work contact caller-id in personal profile",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesshowworkcontactsinpersonalprofile_false",
- "displayName": "False",
- "description": "false"
- },
- {
- "id": "com.android.devicerestrictionpolicy.crossprofilepoliciesshowworkcontactsinpersonalprofile_true",
- "displayName": "True",
- "description": "true"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.dataroamingblocked",
- "displayName": "Block roaming data services",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.dataroamingblocked_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.dataroamingblocked_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.datetimeconfigurationblocked",
- "displayName": "Block date and time changes",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.datetimeconfigurationblocked_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.datetimeconfigurationblocked_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.enterprisedisplaynamevisibility",
- "displayName": "Hide organization name",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.enterprisedisplaynamevisibility_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.enterprisedisplaynamevisibility_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.factoryresetblocked",
- "displayName": "Block factory reset",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.factoryresetblocked_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.factoryresetblocked_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.factoryresetblockedaosp",
- "displayName": "Block factory reset",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.factoryresetblockedaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.factoryresetblockedaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.locationmode",
- "displayName": "Block location",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.locationmode_notconfigured",
- "displayName": "False",
- "description": "No restrictions on the location setting and no specific behavior is set or enforced. This is the default."
- },
- {
- "id": "com.android.devicerestrictionpolicy.locationmode_disabled",
- "displayName": "True",
- "description": "Location setting is disabled on the device."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.microphoneforcemute",
- "displayName": "Block microphone adjustment",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.microphoneforcemute_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.microphoneforcemute_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.networkescapehatchallowed",
- "displayName": "Allow network escape hatch",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.networkescapehatchallowed_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.networkescapehatchallowed_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.nfcblockoutgoingbeam",
- "displayName": "Block beaming data from apps using NFC (work profile-level)",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.nfcblockoutgoingbeam_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.nfcblockoutgoingbeam_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordblockkeyguard",
- "displayName": "Disable lock screen",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.passwordblockkeyguard_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordblockkeyguard_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordexpirationdays",
- "displayName": "Number of days until password expires",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminimumlength",
- "displayName": "Minimum password length",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminimumlengthaosp",
- "displayName": "Minimum password length",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminimumlettercharacters",
- "displayName": "Number of characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminimumlowercasecharacters",
- "displayName": "Number of lowercase characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminimumnonlettercharacters",
- "displayName": "Number of non-letter characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminimumnumericcharacters",
- "displayName": "Number of numeric characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminimumsymbolcharacters",
- "displayName": "Number of symbol characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminimumuppercasecharacters",
- "displayName": "Number of uppercase characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminutesofinactivitybeforescreentimeoutaosp",
- "displayName": "Maximum minutes of inactivity until screen locks",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.passwordminutesofinactivitybeforescreentimeoutaosp_1minute",
- "displayName": "1 Minute",
- "description": "Screen Timeout after 1 Minute of Inactivity"
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminutesofinactivitybeforescreentimeoutaosp_5minutes",
- "displayName": "5 Minutes",
- "description": "Screen Timeout after 5 Minutes of Inactivity"
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminutesofinactivitybeforescreentimeoutaosp_15minutes",
- "displayName": "15 Minutes",
- "description": "Screen Timeout after 15 Minutes of Inactivity"
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminutesofinactivitybeforescreentimeoutaosp_30minutes",
- "displayName": "30 Minutes",
- "description": "Screen Timeout after 30 Minutes of Inactivity"
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordminutesofinactivitybeforescreentimeoutaosp_1hour",
- "displayName": "1 Hour",
- "description": "Screen Timeout after 1 Hour of Inactivity"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordpreviouspasswordcounttoblock",
- "displayName": "Number of passwords required before user can reuse a password",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype",
- "displayName": "Required password type",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype_devicedefault",
- "displayName": "Device default",
- "description": "Device default value, no intent."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype_required",
- "displayName": "Password required, no restrictions",
- "description": "There must be a password set, but there are no restrictions on type."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype_lowsecuritybiometric",
- "displayName": "Weak Biometric",
- "description": "Low security biometrics based password required."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype_numeric",
- "displayName": "Numeric",
- "description": "At least numeric."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype_numericcomplex",
- "displayName": "Numeric Complex",
- "description": "At least numeric with no repeating or ordered sequences."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype_alphabetic",
- "displayName": "Alphabetic",
- "description": "At least alphabetic password."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype_alphanumeric",
- "displayName": "Alphanumeric",
- "description": "At least alphanumeric password"
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtype_alphanumericwithsymbols",
- "displayName": "Alphanumeric with symbols",
- "description": "At least alphanumeric with symbols."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp",
- "displayName": "Required password type",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp_devicedefault",
- "displayName": "Device default",
- "description": "Device default value, no intent."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp_required",
- "displayName": "Password required, no restrictions",
- "description": "There must be a password set, but there are no restrictions on type."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp_lowsecuritybiometric",
- "displayName": "Weak Biometric",
- "description": "Low security biometrics based password required."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp_numeric",
- "displayName": "Numeric",
- "description": "At least numeric."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp_numericcomplex",
- "displayName": "Numeric Complex",
- "description": "At least numeric with no repeating or ordered sequences."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp_alphabetic",
- "displayName": "Alphabetic",
- "description": "At least alphabetic password."
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp_alphanumeric",
- "displayName": "Alphanumeric",
- "description": "At least alphanumeric password"
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequiredtypeaosp_alphanumericwithsymbols",
- "displayName": "Alphanumeric with symbols",
- "description": "At least alphanumeric with symbols."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequireunlock",
- "displayName": "Required unlock frequency",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequireunlock_devicedefault",
- "displayName": "Device default",
- "description": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordrequireunlock_requiredpasswordunlockdailyoption",
- "displayName": "24 hours since last PIN, password, or pattern unlock",
- "description": null
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordsigninfailurecountbeforefactoryreset",
- "displayName": "Number of sign-in failures before wiping device",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.passwordsigninfailurecountbeforefactoryresetaosp",
- "displayName": "Number of sign-in failures before wiping device",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.personalprofileappsallowinstallfromunknownsources",
- "displayName": "Allow users to enable app installation from unknown sources in the personal profile",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.personalprofileappsallowinstallfromunknownsources_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.personalprofileappsallowinstallfromunknownsources_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.personalprofilecamerablocked",
- "displayName": "Block camera",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.personalprofilecamerablocked_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.personalprofilecamerablocked_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.personalprofilescreencaptureblocked",
- "displayName": "Block screen capture",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.personalprofilescreencaptureblocked_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.personalprofilescreencaptureblocked_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.privatespacepolicy",
- "displayName": "Block private space",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.privatespacepolicy_allowed",
- "displayName": "False",
- "description": "Users can create a private space profile."
- },
- {
- "id": "com.android.devicerestrictionpolicy.privatespacepolicy_disallowed",
- "displayName": "True",
- "description": "Users cannot create a private space profile. Supported only for company-owned devices with a work profile. Caution: Any existing private space will be removed."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.screencaptureblocked",
- "displayName": "Block screen capture",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.screencaptureblocked_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.screencaptureblocked_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.screencaptureblockedaosp",
- "displayName": "Block screen capture",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.screencaptureblockedaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.screencaptureblockedaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.securityallowdebuggingfeaturesaosp",
- "displayName": "Allow users to turn on debugging features",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.securityallowdebuggingfeaturesaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.securityallowdebuggingfeaturesaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.securitycommoncriteriamodeenabled",
- "displayName": "Require Common Criteria mode",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.securitycommoncriteriamodeenabled_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.securitycommoncriteriamodeenabled_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.securitydevelopersettingsenabled",
- "displayName": "Allow access to developer settings",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.securitydevelopersettingsenabled_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.securitydevelopersettingsenabled_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.securityrequireverifyapps",
- "displayName": "Require threat scan on apps",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.securityrequireverifyapps_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.securityrequireverifyapps_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.statusbarblocked",
- "displayName": "Block access to status bar",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.statusbarblocked_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.statusbarblocked_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.storageallowusb",
- "displayName": "Allow USB storage",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.storageallowusb_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.storageallowusb_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.storageblockexternalmedia",
- "displayName": "Block mounting of external media",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.storageblockexternalmedia_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.storageblockexternalmedia_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.storageblockexternalmediaaosp",
- "displayName": "Block mounting of external media",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.storageblockexternalmediaaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.storageblockexternalmediaaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.storageblockusbfiletransferaosp",
- "displayName": "Block USB file transfer",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.storageblockusbfiletransferaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.storageblockusbfiletransferaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.systemwindowsblocked",
- "displayName": "Block notification windows",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.systemwindowsblocked_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.systemwindowsblocked_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.usbdataaccess",
- "displayName": "USB access",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.usbdataaccess_allowusbdatatransfer",
- "displayName": "Allow USB data transfer",
- "description": "All types of USB data transfers are allowed. usbFileTransferDisabled is ignored."
- },
- {
- "id": "com.android.devicerestrictionpolicy.usbdataaccess_disallowusbfiletransfer",
- "displayName": "Disallow USB file transfer",
- "description": "Transferring files over USB is disallowed. Other types of USB data connections, such as mouse and keyboard connection, are allowed. usbFileTransferDisabled is ignored."
- },
- {
- "id": "com.android.devicerestrictionpolicy.usbdataaccess_disallowusbdatatransfer",
- "displayName": "Disallow USB data transfer",
- "description": "When set, all types of USB data transfers are prohibited. Supported for devices running Android 12 or above with USB HAL 1.3 or above. If the setting is not supported, DISALLOW_USB_FILE_TRANSFER will be set. A NonComplianceDetail with API_LEVEL is reported if the Android version is less than 12. A NonComplianceDetail with DEVICE_INCOMPATIBLE is reported if the device does not have USB HAL 1.3 or above. usbFileTransferDisabled is ignored."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.volumeblockadjustment",
- "displayName": "Block volume changes",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.volumeblockadjustment_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.volumeblockadjustment_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditconfigurations",
- "displayName": "Block Wi-Fi access point configuration",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditconfigurations_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditconfigurations_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditconfigurationsaosp",
- "displayName": "Block Wi-Fi setting changes",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditconfigurationsaosp_false",
- "displayName": "False",
- "description": "False"
- },
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditconfigurationsaosp_true",
- "displayName": "True",
- "description": "True"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditpolicydefinedconfigurations",
- "displayName": "Block Wi-Fi setting changes",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditpolicydefinedconfigurations_true",
- "displayName": "True",
- "description": "true"
- },
- {
- "id": "com.android.devicerestrictionpolicy.wifiblockeditpolicydefinedconfigurations_false",
- "displayName": "False",
- "description": "false"
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.wifidirectsettings",
- "displayName": "Block Wi-Fi Direct",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.wifidirectsettings_allowed",
- "displayName": "False",
- "description": "The user is allowed to use Wi-Fi direct."
- },
- {
- "id": "com.android.devicerestrictionpolicy.wifidirectsettings_disallowed",
- "displayName": "True",
- "description": "The user is not allowed to use Wi-Fi direct. A NonComplianceDetail with API_LEVEL is reported if the Android version is less than 13."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordexpirationdays",
- "displayName": "Number of days until password expires",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordminimumlength",
- "displayName": "Minimum password length",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordminimumlettercharacters",
- "displayName": "Number of characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordminimumlowercasecharacters",
- "displayName": "Number of lowercase characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordminimumnonlettercharacters",
- "displayName": "Number of non-letter characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordminimumnumericcharacters",
- "displayName": "Number of numeric characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordminimumsymbolcharacters",
- "displayName": "Number of symbol characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordminimumuppercasecharacters",
- "displayName": "Number of uppercase characters required",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordpreviouspasswordcounttoblock",
- "displayName": "Number of passwords required before user can reuse a password",
- "options": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype",
- "displayName": "Required password type",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype_devicedefault",
- "displayName": "Device default",
- "description": "Device default value, no intent."
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype_required",
- "displayName": "Password required, no restrictions",
- "description": "There must be a password set, but there are no restrictions on type."
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype_lowsecuritybiometric",
- "displayName": "Weak Biometric",
- "description": "Low security biometrics based password required."
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype_numeric",
- "displayName": "Numeric",
- "description": "At least numeric."
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype_numericcomplex",
- "displayName": "Numeric Complex",
- "description": "At least numeric with no repeating or ordered sequences."
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype_alphabetic",
- "displayName": "Alphabetic",
- "description": "At least alphabetic password."
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype_alphanumeric",
- "displayName": "Alphanumeric",
- "description": "At least alphanumeric password"
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequiredtype_alphanumericwithsymbols",
- "displayName": "Alphanumeric with symbols",
- "description": "At least alphanumeric with symbols."
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequireunlock",
- "displayName": "Required unlock frequency",
- "options": [
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequireunlock_devicedefault",
- "displayName": "Device default",
- "description": null
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordrequireunlock_requiredpasswordunlockdailyoption",
- "displayName": "24 hours since last PIN, password, or pattern unlock",
- "description": null
- }
- ]
- },
- {
- "id": "com.android.devicerestrictionpolicy.workprofilepasswordsigninfailurecountbeforefactoryreset",
- "displayName": "Number of sign-in failures before wiping device",
- "options": null
- },
- {
- "id": "com.apple.airplay_allowlist",
- "displayName": "Allow List",
- "options": null
- },
- {
- "id": "com.apple.airplay_allowlist_item_deviceid",
- "displayName": "Device ID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.airplay_allowlist_item_devicename",
- "displayName": "Device Name",
- "options": null
- },
- {
- "id": "com.apple.airplay_com.apple.airplay",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.airplay_passwords",
- "displayName": "Password",
- "options": null
- },
- {
- "id": "com.apple.airplay_passwords_item_deviceid",
- "displayName": "Device ID",
- "options": null
- },
- {
- "id": "com.apple.airplay_passwords_item_devicename",
- "displayName": "Device Name",
- "options": null
- },
- {
- "id": "com.apple.airplay_passwords_item_password",
- "displayName": "Password",
- "options": null
- },
- {
- "id": "com.apple.airprint_airprint",
- "displayName": "Printers",
- "options": null
- },
- {
- "id": "com.apple.airprint_airprint_item_forcetls",
- "displayName": "Force TLS",
- "options": [
- {
- "id": "com.apple.airprint_airprint_item_forcetls_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.airprint_airprint_item_forcetls_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.airprint_airprint_item_ipaddress",
- "displayName": "IP Address",
- "options": null
- },
- {
- "id": "com.apple.airprint_airprint_item_port",
- "displayName": "Port",
- "options": null
- },
- {
- "id": "com.apple.airprint_airprint_item_resourcepath",
- "displayName": "Resource Path",
- "options": null
- },
- {
- "id": "com.apple.airprint_com.apple.airprint",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.app.lock_app",
- "displayName": "App",
- "options": null
- },
- {
- "id": "com.apple.app.lock_app_identifier",
- "displayName": "App Identifier",
- "options": null
- },
- {
- "id": "com.apple.app.lock_app_options",
- "displayName": "Options",
- "options": null
- },
- {
- "id": "com.apple.app.lock_app_options_disableautolock",
- "displayName": "Disable Auto Lock",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_disableautolock_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_disableautolock_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_disabledevicerotation",
- "displayName": "Disable Device Rotation",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_disabledevicerotation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_disabledevicerotation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_disableringerswitch",
- "displayName": "Disable Ringer Switch",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_disableringerswitch_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_disableringerswitch_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_disablesleepwakebutton",
- "displayName": "Disable Sleep Wake Button",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_disablesleepwakebutton_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_disablesleepwakebutton_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_disabletouch",
- "displayName": "Disable Touch",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_disabletouch_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_disabletouch_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_disablevolumebuttons",
- "displayName": "Disable Volume Buttons",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_disablevolumebuttons_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_disablevolumebuttons_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_enableassistivetouch",
- "displayName": "Enable Assistive Touch",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_enableassistivetouch_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_enableassistivetouch_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_enableinvertcolors",
- "displayName": "Enable Invert Colors",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_enableinvertcolors_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_enableinvertcolors_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_enablemonoaudio",
- "displayName": "Enable Mono Audio",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_enablemonoaudio_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_enablemonoaudio_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_enablespeakselection",
- "displayName": "Enable Speak Selection",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_enablespeakselection_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_enablespeakselection_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_enablevoicecontrol",
- "displayName": "Enable Voice Control",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_enablevoicecontrol_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_enablevoicecontrol_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_enablevoiceover",
- "displayName": "Enable Voice Over",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_enablevoiceover_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_enablevoiceover_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_options_enablezoom",
- "displayName": "Enable Zoom",
- "options": [
- {
- "id": "com.apple.app.lock_app_options_enablezoom_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_options_enablezoom_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions",
- "displayName": "User Enabled Options",
- "options": null
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_assistivetouch",
- "displayName": "Assistive Touch",
- "options": [
- {
- "id": "com.apple.app.lock_app_userenabledoptions_assistivetouch_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_assistivetouch_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_invertcolors",
- "displayName": "Invert Colors",
- "options": [
- {
- "id": "com.apple.app.lock_app_userenabledoptions_invertcolors_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_invertcolors_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_voicecontrol",
- "displayName": "Voice Control",
- "options": [
- {
- "id": "com.apple.app.lock_app_userenabledoptions_voicecontrol_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_voicecontrol_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_voiceover",
- "displayName": "Voice Over",
- "options": [
- {
- "id": "com.apple.app.lock_app_userenabledoptions_voiceover_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_voiceover_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_zoom",
- "displayName": "Zoom",
- "options": [
- {
- "id": "com.apple.app.lock_app_userenabledoptions_zoom_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.app.lock_app_userenabledoptions_zoom_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.app.lock_com.apple.app.lock",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_allowaccountmodification",
- "displayName": "Allow Account Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowaccountmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowaccountmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowactivitycontinuation",
- "displayName": "Allow Activity Continuation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowactivitycontinuation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowactivitycontinuation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowaddinggamecenterfriends",
- "displayName": "Allow Adding Game Center Friends",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowaddinggamecenterfriends_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowaddinggamecenterfriends_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowairdrop",
- "displayName": "Allow AirDrop",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowairdrop_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowairdrop_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowairplayincomingrequests",
- "displayName": "Allow Air Play Incoming Requests",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowairplayincomingrequests_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowairplayincomingrequests_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowairprint",
- "displayName": "Allow AirPrint",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowairprint_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowairprint_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowairprintcredentialsstorage",
- "displayName": "Allow AirPrint Credentials Storage",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowairprintcredentialsstorage_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowairprintcredentialsstorage_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowairprintibeacondiscovery",
- "displayName": "Allow AirPrint iBeacon Discovery",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowairprintibeacondiscovery_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowairprintibeacondiscovery_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowappcellulardatamodification",
- "displayName": "Allow App Cellular Data Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowappcellulardatamodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowappcellulardatamodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowappclips",
- "displayName": "Allow App Clips",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowappclips_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowappclips_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowappinstallation",
- "displayName": "Allow App Installation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowappinstallation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowappinstallation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowappleintelligencereport",
- "displayName": "Allow Apple Intelligence Report",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowappleintelligencereport_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowappleintelligencereport_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowapplepersonalizedadvertising",
- "displayName": "Allow Apple Personalized Advertising",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowapplepersonalizedadvertising_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowapplepersonalizedadvertising_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowappremoval",
- "displayName": "Allow App Removal",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowappremoval_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowappremoval_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowappstobehidden",
- "displayName": "Allow Apps To Be Hidden",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowappstobehidden_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowappstobehidden_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowappstobelocked",
- "displayName": "Allow Apps To Be Locked",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowappstobelocked_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowappstobelocked_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowardremotemanagementmodification",
- "displayName": "Allow ARD Remote Management Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowardremotemanagementmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowardremotemanagementmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowassistant",
- "displayName": "Allow Assistant",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowassistant_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowassistant_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowassistantusergeneratedcontent",
- "displayName": "Allow Assistant User Generated Content",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowassistantusergeneratedcontent_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowassistantusergeneratedcontent_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowassistantwhilelocked",
- "displayName": "Allow Assistant While Locked",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowassistantwhilelocked_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowassistantwhilelocked_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowautocorrection",
- "displayName": "Allow Auto Correction",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowautocorrection_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowautocorrection_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowautodim",
- "displayName": "Allow Auto Dim",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowautodim_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowautodim_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowautomaticappdownloads",
- "displayName": "Allow Automatic App Downloads",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowautomaticappdownloads_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowautomaticappdownloads_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowautounlock",
- "displayName": "Allow Auto Unlock",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowautounlock_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowautounlock_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowbluetoothmodification",
- "displayName": "Allow Bluetooth Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowbluetoothmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowbluetoothmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowbluetoothsharingmodification",
- "displayName": "Allow Bluetooth Sharing Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowbluetoothsharingmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowbluetoothsharingmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowbookstore",
- "displayName": "Allow Bookstore",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowbookstore_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowbookstore_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowbookstoreerotica",
- "displayName": "Allow Bookstore Erotica",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowbookstoreerotica_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowbookstoreerotica_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcallrecording",
- "displayName": "Allow Call Recording",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcallrecording_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcallrecording_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcamera",
- "displayName": "Allow Camera",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcamera_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcamera_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcellularplanmodification",
- "displayName": "Allow Cellular Plan Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcellularplanmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcellularplanmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowchat",
- "displayName": "Allow Chat",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowchat_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowchat_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudaddressbook",
- "displayName": "Allow Cloud Address Book",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudaddressbook_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudaddressbook_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudbackup",
- "displayName": "Allow Cloud Backup",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudbackup_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudbackup_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudbookmarks",
- "displayName": "Allow Cloud Bookmarks",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudbookmarks_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudbookmarks_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudcalendar",
- "displayName": "Allow Cloud Calendar",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudcalendar_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudcalendar_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowclouddesktopanddocuments",
- "displayName": "Allow Cloud Desktop And Documents",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowclouddesktopanddocuments_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowclouddesktopanddocuments_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowclouddocumentsync",
- "displayName": "Allow Cloud Document Sync",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowclouddocumentsync_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowclouddocumentsync_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudfreeform",
- "displayName": "Allow Cloud Freeform",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudfreeform_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudfreeform_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudkeychainsync",
- "displayName": "Allow Cloud Keychain Sync",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudkeychainsync_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudkeychainsync_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudmail",
- "displayName": "Allow Cloud Mail",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudmail_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudmail_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudnotes",
- "displayName": "Allow Cloud Notes",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudnotes_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudnotes_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudphotolibrary",
- "displayName": "Allow Cloud Photo Library",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudphotolibrary_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudphotolibrary_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudprivaterelay",
- "displayName": "Allow Cloud Private Relay",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudprivaterelay_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudprivaterelay_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcloudreminders",
- "displayName": "Allow Cloud Reminders",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcloudreminders_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcloudreminders_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcontentcaching",
- "displayName": "Allow Content Caching",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcontentcaching_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcontentcaching_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowcontinuouspathkeyboard",
- "displayName": "Allow Continuous Path Keyboard",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowcontinuouspathkeyboard_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowcontinuouspathkeyboard_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowdefaultbrowsermodification",
- "displayName": "Allow Default Browser Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowdefaultbrowsermodification_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowdefaultbrowsermodification_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowdefaultcallingappmodification",
- "displayName": "Allow Default Calling App Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowdefaultcallingappmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowdefaultcallingappmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowdefaultmessagingappmodification",
- "displayName": "Allow Default Messaging App Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowdefaultmessagingappmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowdefaultmessagingappmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowdefinitionlookup",
- "displayName": "Allow Definition Lookup",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowdefinitionlookup_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowdefinitionlookup_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowdevicenamemodification",
- "displayName": "Allow Device Name Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowdevicenamemodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowdevicenamemodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowdiagnosticsubmission",
- "displayName": "Allow Diagnostic Submission",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowdiagnosticsubmission_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowdiagnosticsubmission_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowdiagnosticsubmissionmodification",
- "displayName": "Allow Diagnostic Submission Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowdiagnosticsubmissionmodification_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowdiagnosticsubmissionmodification_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowdictation",
- "displayName": "Allow Dictation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowdictation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowdictation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowedcamerarestrictionbundleids",
- "displayName": "Allowed Camera Restriction Bundle IDs",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_allowedexternalintelligenceworkspaceids",
- "displayName": "Allowed External Intelligence Workspace IDs",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_allowenablingrestrictions",
- "displayName": "Allow Enabling Restrictions",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowenablingrestrictions_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowenablingrestrictions_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowenterpriseapptrust",
- "displayName": "Allow Enterprise App Trust",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowenterpriseapptrust_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowenterpriseapptrust_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowenterprisebookbackup",
- "displayName": "Allow Enterprise Book Backup",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowenterprisebookbackup_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowenterprisebookbackup_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowenterprisebookmetadatasync",
- "displayName": "Allow Enterprise Book Metadata Sync",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowenterprisebookmetadatasync_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowenterprisebookmetadatasync_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowerasecontentandsettings",
- "displayName": "Allow Erase Content And Settings",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowerasecontentandsettings_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowerasecontentandsettings_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowesimmodification",
- "displayName": "Allow ESIM Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowesimmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowesimmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowesimoutgoingtransfers",
- "displayName": "Allow ESIM Outgoing Transfers",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowesimoutgoingtransfers_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowesimoutgoingtransfers_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowexplicitcontent",
- "displayName": "Allow Explicit Content",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowexplicitcontent_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowexplicitcontent_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowexternalintelligenceintegrations",
- "displayName": "Allow External Intelligence Integrations",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowexternalintelligenceintegrations_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowexternalintelligenceintegrations_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowexternalintelligenceintegrationssignin",
- "displayName": "Allow External Intelligence Integrations Sign In",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowexternalintelligenceintegrationssignin_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowexternalintelligenceintegrationssignin_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowfilesharingmodification",
- "displayName": "Allow File Sharing Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowfilesharingmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowfilesharingmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowfilesnetworkdriveaccess",
- "displayName": "Allow Files Network Drive Access",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowfilesnetworkdriveaccess_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowfilesnetworkdriveaccess_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowfilesusbdriveaccess",
- "displayName": "Allow Files USB Drive Access",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowfilesusbdriveaccess_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowfilesusbdriveaccess_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowfindmydevice",
- "displayName": "Allow Find My Device",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowfindmydevice_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowfindmydevice_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowfindmyfriends",
- "displayName": "Allow Find My Friends",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowfindmyfriends_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowfindmyfriends_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowfindmyfriendsmodification",
- "displayName": "Allow Find My Friends Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowfindmyfriendsmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowfindmyfriendsmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowfingerprintforunlock",
- "displayName": "Allow Fingerprint For Unlock",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowfingerprintforunlock_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowfingerprintforunlock_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowfingerprintmodification",
- "displayName": "Allow Fingerprint Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowfingerprintmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowfingerprintmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowgamecenter",
- "displayName": "Allow Game Center",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowgamecenter_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowgamecenter_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowgenmoji",
- "displayName": "Allow Genmoji",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowgenmoji_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowgenmoji_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowglobalbackgroundfetchwhenroaming",
- "displayName": "Allow Global Background Fetch When Roaming",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowglobalbackgroundfetchwhenroaming_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowglobalbackgroundfetchwhenroaming_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowhostpairing",
- "displayName": "Allow Host Pairing",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowhostpairing_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowhostpairing_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowimageplayground",
- "displayName": "Allow Image Playground",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowimageplayground_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowimageplayground_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowimagewand",
- "displayName": "Allow Image Wand",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowimagewand_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowimagewand_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowinapppurchases",
- "displayName": "Allow In App Purchases",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowinapppurchases_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowinapppurchases_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowinternetsharingmodification",
- "displayName": "Allow Internet Sharing Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowinternetsharingmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowinternetsharingmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowiphonemirroring",
- "displayName": "Allow iPhone Mirroring",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowiphonemirroring_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowiphonemirroring_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowiphonewidgetsonmac",
- "displayName": "Allow iPhone Widgets On Mac",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowiphonewidgetsonmac_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowiphonewidgetsonmac_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowitunes",
- "displayName": "Allow iTunes",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowitunes_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowitunes_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowitunesfilesharing",
- "displayName": "Allow iTunes File Sharing",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowitunesfilesharing_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowitunesfilesharing_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowkeyboardshortcuts",
- "displayName": "Allow Keyboard Shortcuts",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowkeyboardshortcuts_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowkeyboardshortcuts_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowlistedappbundleids",
- "displayName": "Allow Listed App Bundle IDs",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_allowlivevoicemail",
- "displayName": "Allow Live Voicemail",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowlivevoicemail_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowlivevoicemail_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowlocalusercreation",
- "displayName": "Allow Local User Creation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowlocalusercreation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowlocalusercreation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowlockscreencontrolcenter",
- "displayName": "Allow Lock Screen Control Center",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowlockscreencontrolcenter_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowlockscreencontrolcenter_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowlockscreennotificationsview",
- "displayName": "Allow Lock Screen Notifications View",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowlockscreennotificationsview_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowlockscreennotificationsview_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowlockscreentodayview",
- "displayName": "Allow Lock Screen Today View",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowlockscreentodayview_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowlockscreentodayview_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmailprivacyprotection",
- "displayName": "Allow Mail Privacy Protection",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmailprivacyprotection_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmailprivacyprotection_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmailsmartreplies",
- "displayName": "Allow Mail Smart Replies",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmailsmartreplies_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmailsmartreplies_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmailsummary",
- "displayName": "Allow Mail Summary",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmailsummary_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmailsummary_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmanagedappscloudsync",
- "displayName": "Allow Managed Apps Cloud Sync",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmanagedappscloudsync_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmanagedappscloudsync_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmanagedtowriteunmanagedcontacts",
- "displayName": "Allow Managed To Write Unmanaged Contacts",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmanagedtowriteunmanagedcontacts_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmanagedtowriteunmanagedcontacts_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmarketplaceappinstallation",
- "displayName": "Allow Marketplace App Installation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmarketplaceappinstallation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmarketplaceappinstallation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmediasharingmodification",
- "displayName": "Allow Media Sharing Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmediasharingmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmediasharingmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmultiplayergaming",
- "displayName": "Allow Multiplayer Gaming",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmultiplayergaming_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmultiplayergaming_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowmusicservice",
- "displayName": "Allow Music Service",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowmusicservice_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowmusicservice_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allownews",
- "displayName": "Allow News",
- "options": [
- {
- "id": "com.apple.applicationaccess_allownews_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allownews_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allownfc",
- "displayName": "Allow NFC",
- "options": [
- {
- "id": "com.apple.applicationaccess_allownfc_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allownfc_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allownotestranscription",
- "displayName": "Allow Notes Transcription",
- "options": [
- {
- "id": "com.apple.applicationaccess_allownotestranscription_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allownotestranscription_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allownotestranscriptionsummary",
- "displayName": "Allow Notes Transcription Summary",
- "options": [
- {
- "id": "com.apple.applicationaccess_allownotestranscriptionsummary_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allownotestranscriptionsummary_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allownotificationsmodification",
- "displayName": "Allow Notifications Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allownotificationsmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allownotificationsmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowopenfrommanagedtounmanaged",
- "displayName": "Allow Open From Managed To Unmanaged",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowopenfrommanagedtounmanaged_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowopenfrommanagedtounmanaged_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowopenfromunmanagedtomanaged",
- "displayName": "Allow Open From Unmanaged To Managed",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowopenfromunmanagedtomanaged_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowopenfromunmanagedtomanaged_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowotapkiupdates",
- "displayName": "Allow OTAPKI Updates",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowotapkiupdates_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowotapkiupdates_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpairedwatch",
- "displayName": "Allow Paired Watch",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpairedwatch_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpairedwatch_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpassbookwhilelocked",
- "displayName": "Allow Passbook While Locked",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpassbookwhilelocked_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpassbookwhilelocked_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpasscodemodification",
- "displayName": "Allow Passcode Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpasscodemodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpasscodemodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpasswordautofill",
- "displayName": "Allow Password Auto Fill",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpasswordautofill_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpasswordautofill_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpasswordproximityrequests",
- "displayName": "Allow Password Proximity Requests",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpasswordproximityrequests_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpasswordproximityrequests_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpasswordsharing",
- "displayName": "Allow Password Sharing",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpasswordsharing_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpasswordsharing_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpersonalhotspotmodification",
- "displayName": "Allow Personal Hotspot Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpersonalhotspotmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpersonalhotspotmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpersonalizedhandwritingresults",
- "displayName": "Allow Personalized Handwriting Results",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpersonalizedhandwritingresults_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpersonalizedhandwritingresults_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowphotostream",
- "displayName": "Allow Photo Stream (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowphotostream_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowphotostream_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpodcasts",
- "displayName": "Allow Podcasts",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpodcasts_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpodcasts_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowpredictivekeyboard",
- "displayName": "Allow Predictive Keyboard",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowpredictivekeyboard_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowpredictivekeyboard_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowprintersharingmodification",
- "displayName": "Allow Printer Sharing Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowprintersharingmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowprintersharingmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowproximitysetuptonewdevice",
- "displayName": "Allow Proximity Setup To New Device",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowproximitysetuptonewdevice_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowproximitysetuptonewdevice_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowradioservice",
- "displayName": "Allow Radio Service",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowradioservice_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowradioservice_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowrapidsecurityresponseinstallation",
- "displayName": "Allow Background Security Improvement Installation (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowrapidsecurityresponseinstallation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowrapidsecurityresponseinstallation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowrapidsecurityresponseremoval",
- "displayName": "Allow Background Security Improvement Removal (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowrapidsecurityresponseremoval_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowrapidsecurityresponseremoval_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowrcsmessaging",
- "displayName": "Allow RCS Messaging",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowrcsmessaging_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowrcsmessaging_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowremoteappleeventsmodification",
- "displayName": "Allow Remote Apple Events Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowremoteappleeventsmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowremoteappleeventsmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowremotescreenobservation",
- "displayName": "Allow Remote Screen Observation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowremotescreenobservation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowremotescreenobservation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowsafari",
- "displayName": "Allow Safari",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowsafari_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowsafari_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowsafarihistoryclearing",
- "displayName": "Allow Safari History Clearing",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowsafarihistoryclearing_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowsafarihistoryclearing_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowsafariprivatebrowsing",
- "displayName": "Allow Safari Private Browsing",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowsafariprivatebrowsing_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowsafariprivatebrowsing_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowsafarisummary",
- "displayName": "Allow Safari Summary",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowsafarisummary_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowsafarisummary_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowsatelliteconnection",
- "displayName": "Allow Satellite Connection",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowsatelliteconnection_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowsatelliteconnection_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowscreenshot",
- "displayName": "Allow Screen Shot",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowscreenshot_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowscreenshot_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowshareddevicetemporarysession",
- "displayName": "Allow Shared Device Temporary Session",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowshareddevicetemporarysession_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowshareddevicetemporarysession_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowsharedstream",
- "displayName": "Allow Shared Stream",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowsharedstream_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowsharedstream_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowspellcheck",
- "displayName": "Allow Spell Check",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowspellcheck_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowspellcheck_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowspotlightinternetresults",
- "displayName": "Allow Spotlight Internet Results",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowspotlightinternetresults_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowspotlightinternetresults_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowstartupdiskmodification",
- "displayName": "Allow Startup Disk Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowstartupdiskmodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowstartupdiskmodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowsystemappremoval",
- "displayName": "Allow System App Removal",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowsystemappremoval_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowsystemappremoval_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowtimemachinebackup",
- "displayName": "Allow Time Machine Backup",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowtimemachinebackup_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowtimemachinebackup_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowuiappinstallation",
- "displayName": "Allow UI App Installation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowuiappinstallation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowuiappinstallation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowuiconfigurationprofileinstallation",
- "displayName": "Allow UI Configuration Profile Installation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowuiconfigurationprofileinstallation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowuiconfigurationprofileinstallation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowuniversalcontrol",
- "displayName": "Allow Universal Control",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowuniversalcontrol_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowuniversalcontrol_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowunmanagedtoreadmanagedcontacts",
- "displayName": "Allow Unmanaged To Read Managed Contacts",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowunmanagedtoreadmanagedcontacts_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowunmanagedtoreadmanagedcontacts_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowunpairedexternalboottorecovery",
- "displayName": "Allow Unpaired External Boot To Recovery",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowunpairedexternalboottorecovery_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowunpairedexternalboottorecovery_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowuntrustedtlsprompt",
- "displayName": "Allow Untrusted TLS Prompt",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowuntrustedtlsprompt_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowuntrustedtlsprompt_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowusbrestrictedmode",
- "displayName": "Allow USB Restricted Mode",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowusbrestrictedmode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowusbrestrictedmode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowvideoconferencing",
- "displayName": "Allow Video Conferencing",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowvideoconferencing_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowvideoconferencing_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowvideoconferencingremotecontrol",
- "displayName": "Allow Video Conferencing Remote Control (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowvideoconferencingremotecontrol_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowvideoconferencingremotecontrol_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowvisualintelligencesummary",
- "displayName": "Allow Visual Intelligence Summary",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowvisualintelligencesummary_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowvisualintelligencesummary_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowvoicedialing",
- "displayName": "Allow Voice Dialing (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowvoicedialing_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowvoicedialing_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowvpncreation",
- "displayName": "Allow VPN Creation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowvpncreation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowvpncreation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowwallpapermodification",
- "displayName": "Allow Wallpaper Modification",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowwallpapermodification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowwallpapermodification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowwebdistributionappinstallation",
- "displayName": "Allow Web Distribution App Installation",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowwebdistributionappinstallation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowwebdistributionappinstallation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_allowwritingtools",
- "displayName": "Allow Writing Tools",
- "options": [
- {
- "id": "com.apple.applicationaccess_allowwritingtools_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_allowwritingtools_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_autonomoussingleappmodepermittedappids",
- "displayName": "Autonomous Single App Mode Permitted App IDs",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_blockedappbundleids",
- "displayName": "Blocked App Bundle IDs",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_com.apple.applicationaccess",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_deniediccidsforimessagefacetime",
- "displayName": "Denied ICCIDs For iMessage And FaceTime",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_deniediccidsforrcs",
- "displayName": "Denied ICCIDs For RCS",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_enforcedfingerprinttimeout",
- "displayName": "Enforced Fingerprint Timeout",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_enforcedsoftwareupdatedelay",
- "displayName": "Enforced Software Update Delay (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_enforcedsoftwareupdatemajorosdeferredinstalldelay",
- "displayName": "Enforced Software Update Major OS Deferred Install Delay (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_enforcedsoftwareupdateminorosdeferredinstalldelay",
- "displayName": "Enforced Software Update Minor OS Deferred Install Delay (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_enforcedsoftwareupdatenonosdeferredinstalldelay",
- "displayName": "Enforced Software Update Non OS Deferred Install Delay (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_forceairdropunmanaged",
- "displayName": "Force AirDrop Unmanaged",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceairdropunmanaged_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceairdropunmanaged_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceairplayoutgoingrequestspairingpassword",
- "displayName": "Force AirPlay Outgoing Requests Pairing Password",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceairplayoutgoingrequestspairingpassword_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceairplayoutgoingrequestspairingpassword_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceairprinttrustedtlsrequirement",
- "displayName": "Force AirPrint Trusted TLS Requirement",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceairprinttrustedtlsrequirement_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceairprinttrustedtlsrequirement_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceassistantprofanityfilter",
- "displayName": "Force Assistant Profanity Filter",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceassistantprofanityfilter_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceassistantprofanityfilter_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceauthenticationbeforeautofill",
- "displayName": "Force Authentication Before Auto Fill",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceauthenticationbeforeautofill_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceauthenticationbeforeautofill_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceautomaticdateandtime",
- "displayName": "Force Automatic Date And Time",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceautomaticdateandtime_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceautomaticdateandtime_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcebypassscreencapturealert",
- "displayName": "Force Bypass Screen Capture Alert",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcebypassscreencapturealert_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcebypassscreencapturealert_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceclassroomautomaticallyjoinclasses",
- "displayName": "Force Classroom Automatically Join Classes",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceclassroomautomaticallyjoinclasses_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceclassroomautomaticallyjoinclasses_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceclassroomrequestpermissiontoleaveclasses",
- "displayName": "Force Classroom Request Permission To Leave Classes",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceclassroomrequestpermissiontoleaveclasses_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceclassroomrequestpermissiontoleaveclasses_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceclassroomunpromptedappanddevicelock",
- "displayName": "Force Classroom Unprompted App And Device Lock",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceclassroomunpromptedappanddevicelock_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceclassroomunpromptedappanddevicelock_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceclassroomunpromptedscreenobservation",
- "displayName": "Force Classroom Unprompted Screen Observation",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceclassroomunpromptedscreenobservation_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceclassroomunpromptedscreenobservation_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcedelayedappsoftwareupdates",
- "displayName": "Force Delayed App Software Updates (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcedelayedappsoftwareupdates_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcedelayedappsoftwareupdates_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcedelayedmajorsoftwareupdates",
- "displayName": "Force Delayed Major Software Updates (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcedelayedmajorsoftwareupdates_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcedelayedmajorsoftwareupdates_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcedelayedsoftwareupdates",
- "displayName": "Force Delayed Software Updates (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcedelayedsoftwareupdates_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcedelayedsoftwareupdates_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceencryptedbackup",
- "displayName": "Force Encrypted Backup",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceencryptedbackup_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceencryptedbackup_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceitunesstorepasswordentry",
- "displayName": "Force iTunes Store Password Entry (Deprecated)",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceitunesstorepasswordentry_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceitunesstorepasswordentry_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcelimitadtracking",
- "displayName": "Force Limit Ad Tracking",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcelimitadtracking_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcelimitadtracking_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceondeviceonlydictation",
- "displayName": "Force On Device Only Dictation",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceondeviceonlydictation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceondeviceonlydictation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forceondeviceonlytranslation",
- "displayName": "Force On Device Only Translation",
- "options": [
- {
- "id": "com.apple.applicationaccess_forceondeviceonlytranslation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forceondeviceonlytranslation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcepreserveesimonerase",
- "displayName": "Force Preserve ESIM On Erase",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcepreserveesimonerase_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcepreserveesimonerase_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcewatchwristdetection",
- "displayName": "Force Watch Wrist Detection",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcewatchwristdetection_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcewatchwristdetection_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcewifipoweron",
- "displayName": "Force WiFi Power On",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcewifipoweron_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcewifipoweron_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_forcewifitoallowednetworksonly",
- "displayName": "Force WiFi To Allowed Networks Only",
- "options": [
- {
- "id": "com.apple.applicationaccess_forcewifitoallowednetworksonly_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_forcewifitoallowednetworksonly_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau",
- "displayName": "Rating Apps - Australia",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsau_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_1",
- "displayName": "1+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_2",
- "displayName": "2+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_3",
- "displayName": "3+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_4",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_5",
- "displayName": "5+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_6",
- "displayName": "6+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_7",
- "displayName": "7+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_8",
- "displayName": "8+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_9",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_10",
- "displayName": "10+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_11",
- "displayName": "11+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_12",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_13",
- "displayName": "13+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_14",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_15",
- "displayName": "15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_16",
- "displayName": "16+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_17",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_18",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_19",
- "displayName": "19+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_20",
- "displayName": "20+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_21",
- "displayName": "21+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsau_22",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca",
- "displayName": "Rating Apps - Canada",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsca_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_1",
- "displayName": "1+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_2",
- "displayName": "2+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_3",
- "displayName": "3+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_4",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_5",
- "displayName": "5+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_6",
- "displayName": "6+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_7",
- "displayName": "7+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_8",
- "displayName": "8+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_9",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_10",
- "displayName": "10+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_11",
- "displayName": "11+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_12",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_13",
- "displayName": "13+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_14",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_15",
- "displayName": "15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_16",
- "displayName": "16+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_17",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_18",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_19",
- "displayName": "19+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_20",
- "displayName": "20+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_21",
- "displayName": "21+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsca_22",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde",
- "displayName": "Rating Apps - Germany",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsde_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_1",
- "displayName": "1+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_2",
- "displayName": "2+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_3",
- "displayName": "3+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_4",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_5",
- "displayName": "5+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_6",
- "displayName": "6+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_7",
- "displayName": "7+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_8",
- "displayName": "8+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_9",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_10",
- "displayName": "10+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_11",
- "displayName": "11+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_12",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_13",
- "displayName": "13+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_14",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_15",
- "displayName": "15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_16",
- "displayName": "16+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_17",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_18",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_19",
- "displayName": "19+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_20",
- "displayName": "20+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_21",
- "displayName": "21+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsde_22",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsexemptedbundleids",
- "displayName": "Rating Apps Exempted Bundle IDs",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr",
- "displayName": "Rating Apps - France",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsfr_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_1",
- "displayName": "1+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_2",
- "displayName": "2+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_3",
- "displayName": "3+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_4",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_5",
- "displayName": "5+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_6",
- "displayName": "6+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_7",
- "displayName": "7+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_8",
- "displayName": "8+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_9",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_10",
- "displayName": "10+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_11",
- "displayName": "11+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_12",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_13",
- "displayName": "13+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_14",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_15",
- "displayName": "15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_16",
- "displayName": "16+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_17",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_18",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_19",
- "displayName": "19+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_20",
- "displayName": "20+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_21",
- "displayName": "21+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsfr_22",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb",
- "displayName": "Rating Apps - Great Britain",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsgb_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_1",
- "displayName": "1+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_2",
- "displayName": "2+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_3",
- "displayName": "3+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_4",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_5",
- "displayName": "5+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_6",
- "displayName": "6+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_7",
- "displayName": "7+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_8",
- "displayName": "8+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_9",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_10",
- "displayName": "10+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_11",
- "displayName": "11+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_12",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_13",
- "displayName": "13+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_14",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_15",
- "displayName": "15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_16",
- "displayName": "16+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_17",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_18",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_19",
- "displayName": "19+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_20",
- "displayName": "20+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_21",
- "displayName": "21+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsgb_22",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie",
- "displayName": "Rating Apps - Ireland",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsie_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_1",
- "displayName": "1+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_2",
- "displayName": "2+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_3",
- "displayName": "3+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_4",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_5",
- "displayName": "5+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_6",
- "displayName": "6+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_7",
- "displayName": "7+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_8",
- "displayName": "8+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_9",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_10",
- "displayName": "10+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_11",
- "displayName": "11+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_12",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_13",
- "displayName": "13+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_14",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_15",
- "displayName": "15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_16",
- "displayName": "16+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_17",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_18",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_19",
- "displayName": "19+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_20",
- "displayName": "20+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_21",
- "displayName": "21+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsie_22",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp",
- "displayName": "Rating Apps - Japan",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsjp_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_1",
- "displayName": "1+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_2",
- "displayName": "2+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_3",
- "displayName": "3+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_4",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_5",
- "displayName": "5+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_6",
- "displayName": "6+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_7",
- "displayName": "7+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_8",
- "displayName": "8+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_9",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_10",
- "displayName": "10+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_11",
- "displayName": "11+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_12",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_13",
- "displayName": "13+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_14",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_15",
- "displayName": "15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_16",
- "displayName": "16+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_17",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_18",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_19",
- "displayName": "19+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_20",
- "displayName": "20+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_21",
- "displayName": "21+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsjp_22",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz",
- "displayName": "Rating Apps - New Zealand",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsnz_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_1",
- "displayName": "1+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_2",
- "displayName": "2+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_3",
- "displayName": "3+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_4",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_5",
- "displayName": "5+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_6",
- "displayName": "6+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_7",
- "displayName": "7+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_8",
- "displayName": "8+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_9",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_10",
- "displayName": "10+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_11",
- "displayName": "11+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_12",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_13",
- "displayName": "13+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_14",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_15",
- "displayName": "15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_16",
- "displayName": "16+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_17",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_18",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_19",
- "displayName": "19+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_20",
- "displayName": "20+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_21",
- "displayName": "21+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsnz_22",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingappsus",
- "displayName": "Rating Apps - United States",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingappsus_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsus_1",
- "displayName": "4+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsus_2",
- "displayName": "9+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsus_3",
- "displayName": "12+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsus_4",
- "displayName": "17+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingappsus_5",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesau",
- "displayName": "Rating Movies - Australia",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesau_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesau_1",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesau_2",
- "displayName": "PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesau_3",
- "displayName": "M",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesau_4",
- "displayName": "MA15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesau_5",
- "displayName": "R18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesau_6",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesca",
- "displayName": "Rating Movies - Canada",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesca_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesca_1",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesca_2",
- "displayName": "PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesca_3",
- "displayName": "14A",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesca_4",
- "displayName": "18A",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesca_5",
- "displayName": "R",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesca_6",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesde",
- "displayName": "Rating Movies - Germany",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesde_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesde_1",
- "displayName": "Ab 0 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesde_2",
- "displayName": "Ab 6 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesde_3",
- "displayName": "Ab 12 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesde_4",
- "displayName": "Ab 16 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesde_5",
- "displayName": "Ab 18 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesde_6",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesfr",
- "displayName": "Rating Movies - France",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesfr_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesfr_2",
- "displayName": "10",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesfr_3",
- "displayName": "12",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesfr_4",
- "displayName": "16",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesfr_5",
- "displayName": "18",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesfr_6",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb",
- "displayName": "Rating Movies - Great Britain",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_1",
- "displayName": "U",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_2",
- "displayName": "UC",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_3",
- "displayName": "PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_4",
- "displayName": "12",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_5",
- "displayName": "12A",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_6",
- "displayName": "15",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_7",
- "displayName": "18",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesgb_8",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesie",
- "displayName": "Rating Movies - Ireland",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesie_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesie_1",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesie_2",
- "displayName": "PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesie_3",
- "displayName": "12A",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesie_4",
- "displayName": "15A",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesie_5",
- "displayName": "16",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesie_6",
- "displayName": "18",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesie_7",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesjp",
- "displayName": "Rating Movies - Japan",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesjp_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesjp_1",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesjp_2",
- "displayName": "PG-12",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesjp_3",
- "displayName": "R15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesjp_4",
- "displayName": "R18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesjp_5",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz",
- "displayName": "Rating Movies - New Zealand",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_1",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_2",
- "displayName": "PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_3",
- "displayName": "M",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_4",
- "displayName": "R13",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_5",
- "displayName": "R15",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_6",
- "displayName": "R16",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_7",
- "displayName": "R18",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_8",
- "displayName": "R",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_9",
- "displayName": "RP16",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesnz_10",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesus",
- "displayName": "Rating Movies - United States",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingmoviesus_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesus_1",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesus_2",
- "displayName": "PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesus_3",
- "displayName": "PG-13",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesus_4",
- "displayName": "R",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesus_5",
- "displayName": "NC-17",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingmoviesus_6",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingregion",
- "displayName": "Rating Region",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingregion_0",
- "displayName": "United States",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingregion_1",
- "displayName": "Australia",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingregion_2",
- "displayName": "Canada",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingregion_3",
- "displayName": "Germany",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingregion_4",
- "displayName": "France",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingregion_5",
- "displayName": "Ireland",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingregion_6",
- "displayName": "Japan",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingregion_7",
- "displayName": "New Zealand",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingregion_8",
- "displayName": "Great Britain",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau",
- "displayName": "Rating TV Shows - Australia",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_1",
- "displayName": "P",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_2",
- "displayName": "C",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_3",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_4",
- "displayName": "PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_5",
- "displayName": "M",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_6",
- "displayName": "MA15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_7",
- "displayName": "AV15+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_8",
- "displayName": "All",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsau_9",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca",
- "displayName": "Rating TV Shows - Canada",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca_1",
- "displayName": "C",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca_2",
- "displayName": "C8",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca_3",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca_4",
- "displayName": "PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca_5",
- "displayName": "14+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca_6",
- "displayName": "18+",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsca_7",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsde",
- "displayName": "Rating TV Shows - Germany",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsde_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsde_1",
- "displayName": "Ab 0 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsde_2",
- "displayName": "Ab 6 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsde_3",
- "displayName": "Ab 12 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsde_4",
- "displayName": "Ab 16 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsde_5",
- "displayName": "Ab 18 Jahren",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsde_7",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsfr",
- "displayName": "Rating TV Shows - France",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsfr_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsfr_1",
- "displayName": "-10",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsfr_2",
- "displayName": "-12",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsfr_3",
- "displayName": "-16",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsfr_4",
- "displayName": "-18",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsfr_5",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsgb",
- "displayName": "Rating TV Shows - Great Britain",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsgb_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsgb_1",
- "displayName": "Caution",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsgb_2",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsie",
- "displayName": "Rating TV Shows - Ireland",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsie_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsie_1",
- "displayName": "GA",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsie_2",
- "displayName": "CH",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsie_3",
- "displayName": "YA",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsie_4",
- "displayName": "PS",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsie_5",
- "displayName": "MA",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsie_6",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsjp",
- "displayName": "Rating TV Shows - Japan",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsjp_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsjp_1",
- "displayName": "Explicit Allowed",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsjp_2",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsnz",
- "displayName": "Rating TV Shows - New Zealand",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsnz_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsnz_1",
- "displayName": "G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsnz_2",
- "displayName": "PGR",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsnz_3",
- "displayName": "AO",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsnz_4",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus",
- "displayName": "Rating TV Shows - United States",
- "options": [
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus_1",
- "displayName": "TV-Y",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus_2",
- "displayName": "TV-Y7",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus_3",
- "displayName": "TV-G",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus_4",
- "displayName": "TV-PG",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus_5",
- "displayName": "TV-14",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus_6",
- "displayName": "TB-MA",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_ratingtvshowsus_7",
- "displayName": "All",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_requiremanagedpasteboard",
- "displayName": "Require Managed Pasteboard",
- "options": [
- {
- "id": "com.apple.applicationaccess_requiremanagedpasteboard_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_requiremanagedpasteboard_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_safariacceptcookies",
- "displayName": "Safari Accept Cookies",
- "options": [
- {
- "id": "com.apple.applicationaccess_safariacceptcookies_0",
- "displayName": "Prevent Cross-Site Tracking and Block All Cookies are enabled and the user canʼt disable either setting.",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_safariacceptcookies_1",
- "displayName": "Prevent Cross-Site Tracking is enabled and the user canʼt disable it. Block All Cookies is not enabled, although the user can enable it.",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_safariacceptcookies_2",
- "displayName": "Prevent Cross-Site Tracking is enabled and Block All Cookies is not enabled. The user can toggle either setting.",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_safariallowautofill",
- "displayName": "Safari Allow Autofill",
- "options": [
- {
- "id": "com.apple.applicationaccess_safariallowautofill_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_safariallowautofill_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_safariallowjavascript",
- "displayName": "Safari Allow Java Script",
- "options": [
- {
- "id": "com.apple.applicationaccess_safariallowjavascript_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_safariallowjavascript_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_safariallowpopups",
- "displayName": "Safari Allow Popups",
- "options": [
- {
- "id": "com.apple.applicationaccess_safariallowpopups_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_safariallowpopups_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess_safariforcefraudwarning",
- "displayName": "Safari Force Fraud Warning",
- "options": [
- {
- "id": "com.apple.applicationaccess_safariforcefraudwarning_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess_safariforcefraudwarning_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.applicationaccess.new_com.apple.applicationaccess.new",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.applicationaccess.new_familycontrolsenabled",
- "displayName": "Family Controls Enabled",
- "options": [
- {
- "id": "com.apple.applicationaccess.new_familycontrolsenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.applicationaccess.new_familycontrolsenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.appstore_com.apple.appstore",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.appstore_disablesoftwareupdatenotifications",
- "displayName": "Disable Software Update Notifications",
- "options": [
- {
- "id": "com.apple.appstore_disablesoftwareupdatenotifications_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.appstore_disablesoftwareupdatenotifications_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.appstore_restrict-store-disable-app-adoption",
- "displayName": "Restrict-store-disable-app-adoption",
- "options": [
- {
- "id": "com.apple.appstore_restrict-store-disable-app-adoption_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.appstore_restrict-store-disable-app-adoption_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.appstore_restrict-store-softwareupdate-only",
- "displayName": "Restrict Store Software Update Only",
- "options": [
- {
- "id": "com.apple.appstore_restrict-store-softwareupdate-only_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.appstore_restrict-store-softwareupdate-only_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.asam_allowedapplications",
- "displayName": "Allowed Applications",
- "options": null
- },
- {
- "id": "com.apple.asam_allowedapplications_item_bundleidentifier",
- "displayName": "Bundle Identifier",
- "options": null
- },
- {
- "id": "com.apple.asam_allowedapplications_item_teamidentifier",
- "displayName": "Team Identifier",
- "options": null
- },
- {
- "id": "com.apple.asam_com.apple.asam",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_allowcachedelete",
- "displayName": "Allow Cache Delete",
- "options": [
- {
- "id": "com.apple.assetcache.managed_allowcachedelete_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_allowcachedelete_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_allowpersonalcaching",
- "displayName": "Allow Personal Caching",
- "options": [
- {
- "id": "com.apple.assetcache.managed_allowpersonalcaching_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_allowpersonalcaching_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_allowsharedcaching",
- "displayName": "Allow Shared Caching",
- "options": [
- {
- "id": "com.apple.assetcache.managed_allowsharedcaching_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_allowsharedcaching_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_autoactivation",
- "displayName": "Auto Activation",
- "options": [
- {
- "id": "com.apple.assetcache.managed_autoactivation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_autoactivation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_autoenabletetheredcaching",
- "displayName": "Auto Enable Tethered Caching",
- "options": [
- {
- "id": "com.apple.assetcache.managed_autoenabletetheredcaching_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_autoenabletetheredcaching_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_cachelimit",
- "displayName": "Cache Limit",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_com.apple.assetcache.managed",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_datapath",
- "displayName": "Data Path",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_denytetheredcaching",
- "displayName": "Deny Tethered Caching",
- "options": [
- {
- "id": "com.apple.assetcache.managed_denytetheredcaching_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_denytetheredcaching_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_displayalerts",
- "displayName": "Display Alerts",
- "options": [
- {
- "id": "com.apple.assetcache.managed_displayalerts_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_displayalerts_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_keepawake",
- "displayName": "Keep Awake",
- "options": [
- {
- "id": "com.apple.assetcache.managed_keepawake_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_keepawake_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_listenranges",
- "displayName": "Listen Ranges",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_listenranges_item_first",
- "displayName": "First",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_listenranges_item_last",
- "displayName": "Last",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_listenranges_item_type",
- "displayName": "IP Address Type",
- "options": [
- {
- "id": "com.apple.assetcache.managed_listenranges_item_type_0",
- "displayName": "IPv4",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_listenranges_item_type_1",
- "displayName": "IPv6",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_listenrangesonly",
- "displayName": "Listen Ranges Only",
- "options": [
- {
- "id": "com.apple.assetcache.managed_listenrangesonly_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_listenrangesonly_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_listenwithpeersandparents",
- "displayName": "Listen With Peers And Parents",
- "options": [
- {
- "id": "com.apple.assetcache.managed_listenwithpeersandparents_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_listenwithpeersandparents_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_localsubnetsonly",
- "displayName": "Local Subnets Only",
- "options": [
- {
- "id": "com.apple.assetcache.managed_localsubnetsonly_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_localsubnetsonly_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_logclientidentity",
- "displayName": "Log Client Identity",
- "options": [
- {
- "id": "com.apple.assetcache.managed_logclientidentity_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_logclientidentity_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_parents",
- "displayName": "Parents",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_parentselectionpolicy",
- "displayName": "Parent Selection Policy",
- "options": [
- {
- "id": "com.apple.assetcache.managed_parentselectionpolicy_0",
- "displayName": "first-available",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_parentselectionpolicy_1",
- "displayName": "url-path-hash",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_parentselectionpolicy_2",
- "displayName": "random",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_parentselectionpolicy_3",
- "displayName": "round-robin",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_parentselectionpolicy_4",
- "displayName": "sticky-available",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_peerfilterranges",
- "displayName": "Peer Filter Ranges",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_peerfilterranges_item_first",
- "displayName": "First",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_peerfilterranges_item_last",
- "displayName": "Last",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_peerfilterranges_item_type",
- "displayName": "IP Address Type",
- "options": [
- {
- "id": "com.apple.assetcache.managed_peerfilterranges_item_type_0",
- "displayName": "IPv4",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_peerfilterranges_item_type_1",
- "displayName": "IPv6",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_peerlistenranges",
- "displayName": "Peer Listen Ranges",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_peerlistenranges_item_first",
- "displayName": "First",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_peerlistenranges_item_last",
- "displayName": "Last",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_peerlistenranges_item_type",
- "displayName": "IP Address Type",
- "options": [
- {
- "id": "com.apple.assetcache.managed_peerlistenranges_item_type_0",
- "displayName": "IPv4",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_peerlistenranges_item_type_1",
- "displayName": "IPv6",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_peerlocalsubnetsonly",
- "displayName": "Peer Local Subnets Only",
- "options": [
- {
- "id": "com.apple.assetcache.managed_peerlocalsubnetsonly_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_peerlocalsubnetsonly_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.assetcache.managed_port",
- "displayName": "Port",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_publicranges",
- "displayName": "Public Ranges",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_publicranges_item_first",
- "displayName": "First",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_publicranges_item_last",
- "displayName": "Last",
- "options": null
- },
- {
- "id": "com.apple.assetcache.managed_publicranges_item_type",
- "displayName": "IP Address Type",
- "options": [
- {
- "id": "com.apple.assetcache.managed_publicranges_item_type_0",
- "displayName": "IPv4",
- "description": null
- },
- {
- "id": "com.apple.assetcache.managed_publicranges_item_type_1",
- "displayName": "IPv6",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.associated-domains_com.apple.associated-domains",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.associated-domains_configuration",
- "displayName": "Configuration",
- "options": null
- },
- {
- "id": "com.apple.associated-domains_configuration_item_applicationidentifier",
- "displayName": "Application Identifier",
- "options": null
- },
- {
- "id": "com.apple.associated-domains_configuration_item_associateddomains",
- "displayName": "Associated Domains",
- "options": null
- },
- {
- "id": "com.apple.associated-domains_configuration_item_enabledirectdownloads",
- "displayName": "Enable Direct Downloads",
- "options": [
- {
- "id": "com.apple.associated-domains_configuration_item_enabledirectdownloads_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.associated-domains_configuration_item_enabledirectdownloads_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.caldav.account_caldavaccountdescription",
- "displayName": "Cal DAV Account Description",
- "options": null
- },
- {
- "id": "com.apple.caldav.account_caldavhostname",
- "displayName": "Cal DAV Host Name",
- "options": null
- },
- {
- "id": "com.apple.caldav.account_caldavpassword",
- "displayName": "Cal DAV Password",
- "options": null
- },
- {
- "id": "com.apple.caldav.account_caldavport",
- "displayName": "Cal DAV Port",
- "options": null
- },
- {
- "id": "com.apple.caldav.account_caldavprincipalurl",
- "displayName": "Cal DAV Principal URL",
- "options": null
- },
- {
- "id": "com.apple.caldav.account_caldavusername",
- "displayName": "Cal DAV Username",
- "options": null
- },
- {
- "id": "com.apple.caldav.account_caldavusessl",
- "displayName": "Cal DAV Use SSL",
- "options": [
- {
- "id": "com.apple.caldav.account_caldavusessl_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.caldav.account_caldavusessl_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.caldav.account_com.apple.caldav.account",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.carddav.account_carddavaccountdescription",
- "displayName": "Card DAV Account Description",
- "options": null
- },
- {
- "id": "com.apple.carddav.account_carddavhostname",
- "displayName": "Card DAV Host Name",
- "options": null
- },
- {
- "id": "com.apple.carddav.account_carddavpassword",
- "displayName": "Card DAV Password",
- "options": null
- },
- {
- "id": "com.apple.carddav.account_carddavport",
- "displayName": "Card DAV Port",
- "options": null
- },
- {
- "id": "com.apple.carddav.account_carddavprincipalurl",
- "displayName": "Card DAV Principal URL",
- "options": null
- },
- {
- "id": "com.apple.carddav.account_carddavusername",
- "displayName": "Card DAV Username",
- "options": null
- },
- {
- "id": "com.apple.carddav.account_carddavusessl",
- "displayName": "Card DAV Use SSL",
- "options": [
- {
- "id": "com.apple.carddav.account_carddavusessl_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.carddav.account_carddavusessl_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.carddav.account_com.apple.carddav.account",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.cellular_apns",
- "displayName": "APNs",
- "options": null
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmask",
- "displayName": "Allowed Protocol Mask",
- "options": [
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmask_0",
- "displayName": "IPv4",
- "description": null
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmask_1",
- "displayName": "IPv6",
- "description": null
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmask_2",
- "displayName": "Both",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmaskindomesticroaming",
- "displayName": "Allowed Protocol Mask In Domestic Roaming",
- "options": [
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmaskindomesticroaming_0",
- "displayName": "IPv4",
- "description": null
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmaskindomesticroaming_1",
- "displayName": "IPv6",
- "description": null
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmaskindomesticroaming_2",
- "displayName": "Both",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmaskinroaming",
- "displayName": "Allowed Protocol Mask In Roaming",
- "options": [
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmaskinroaming_0",
- "displayName": "IPv4",
- "description": null
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmaskinroaming_1",
- "displayName": "IPv6",
- "description": null
- },
- {
- "id": "com.apple.cellular_apns_item_allowedprotocolmaskinroaming_2",
- "displayName": "Both",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellular_apns_item_authenticationtype",
- "displayName": "Authentication Type",
- "options": [
- {
- "id": "com.apple.cellular_apns_item_authenticationtype_0",
- "displayName": "CHAP",
- "description": null
- },
- {
- "id": "com.apple.cellular_apns_item_authenticationtype_1",
- "displayName": "PAP",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellular_apns_item_enablexlat464",
- "displayName": "Enable XLAT464",
- "options": [
- {
- "id": "com.apple.cellular_apns_item_enablexlat464_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.cellular_apns_item_enablexlat464_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellular_apns_item_name",
- "displayName": "Name",
- "options": null
- },
- {
- "id": "com.apple.cellular_apns_item_password",
- "displayName": "Password",
- "options": null
- },
- {
- "id": "com.apple.cellular_apns_item_proxyport",
- "displayName": "Proxy Port",
- "options": null
- },
- {
- "id": "com.apple.cellular_apns_item_proxyserver",
- "displayName": "Proxy Server",
- "options": null
- },
- {
- "id": "com.apple.cellular_apns_item_username",
- "displayName": "Username",
- "options": null
- },
- {
- "id": "com.apple.cellular_attachapn",
- "displayName": "Attach APN",
- "options": null
- },
- {
- "id": "com.apple.cellular_attachapn_allowedprotocolmask",
- "displayName": "Allowed Protocol Mask",
- "options": [
- {
- "id": "com.apple.cellular_attachapn_allowedprotocolmask_0",
- "displayName": "IPv4",
- "description": null
- },
- {
- "id": "com.apple.cellular_attachapn_allowedprotocolmask_1",
- "displayName": "IPv6",
- "description": null
- },
- {
- "id": "com.apple.cellular_attachapn_allowedprotocolmask_2",
- "displayName": "Both",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellular_attachapn_authenticationtype",
- "displayName": "Authentication Type",
- "options": [
- {
- "id": "com.apple.cellular_attachapn_authenticationtype_0",
- "displayName": "CHAP",
- "description": null
- },
- {
- "id": "com.apple.cellular_attachapn_authenticationtype_1",
- "displayName": "PAP",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellular_attachapn_name",
- "displayName": "Name",
- "options": null
- },
- {
- "id": "com.apple.cellular_attachapn_password",
- "displayName": "Password",
- "options": null
- },
- {
- "id": "com.apple.cellular_attachapn_username",
- "displayName": "Username",
- "options": null
- },
- {
- "id": "com.apple.cellular_com.apple.cellular",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_cellulardatapreferred",
- "displayName": "Cellular Data Preferred",
- "options": [
- {
- "id": "com.apple.cellularprivatenetwork.managed_cellulardatapreferred_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_cellulardatapreferred_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_com.apple.cellularprivatenetwork.managed",
- "displayName": "com.apple.cellularprivatenetwork.managed",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_csgnetworkidentifier",
- "displayName": "Csg Network Identifier",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_datasetname",
- "displayName": "Data Set Name",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_enablenrstandalone",
- "displayName": "Enable NR Standalone",
- "options": [
- {
- "id": "com.apple.cellularprivatenetwork.managed_enablenrstandalone_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_enablenrstandalone_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_geofences",
- "displayName": "Geofences",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_geofences_item_geofenceid",
- "displayName": "Geofence Id",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_geofences_item_latitude",
- "displayName": "Latitude",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_geofences_item_longitude",
- "displayName": "Longitude",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_geofences_item_radius",
- "displayName": "Radius",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_networkidentifier",
- "displayName": "Network Identifier",
- "options": null
- },
- {
- "id": "com.apple.cellularprivatenetwork.managed_versionnumber",
- "displayName": "Version Number",
- "options": null
- },
- {
- "id": "com.apple.configurationprofile.identification_com.apple.configurationprofile.identification",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification",
- "displayName": "Payload Identification (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_authmethod",
- "displayName": "Auth Method",
- "options": [
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_authmethod_0",
- "displayName": "Password",
- "description": null
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_authmethod_1",
- "displayName": "UserEnteredPassword",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_emailaddress",
- "displayName": "Email Address",
- "options": null
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_fullname",
- "displayName": "Full Name",
- "options": null
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_password",
- "displayName": "Password",
- "options": null
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_prompt",
- "displayName": "Prompt",
- "options": null
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_promptmessage",
- "displayName": "Prompt Message",
- "options": null
- },
- {
- "id": "com.apple.configurationprofile.identification_payloadidentification_username",
- "displayName": "User Name",
- "options": null
- },
- {
- "id": "com.apple.desktop_com.apple.desktop",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.desktop_override-picture-path",
- "displayName": "Override Picture Path",
- "options": null
- },
- {
- "id": "com.apple.dictionary_com.apple.dictionary",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.dictionary_parentalcontrol",
- "displayName": "Parental Control",
- "options": [
- {
- "id": "com.apple.dictionary_parentalcontrol_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dictionary_parentalcontrol_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adallowmultidomainauth",
- "displayName": "AD Allow Multi Domain Auth",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adallowmultidomainauth_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adallowmultidomainauth_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adallowmultidomainauthflag",
- "displayName": "AD Allow Multi Domain Auth Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adallowmultidomainauthflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adallowmultidomainauthflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adcreatemobileaccountatlogin",
- "displayName": "AD Create Mobile Account At Login",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adcreatemobileaccountatlogin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adcreatemobileaccountatlogin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adcreatemobileaccountatloginflag",
- "displayName": "AD Create Mobile Account At Login Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adcreatemobileaccountatloginflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adcreatemobileaccountatloginflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_addefaultusershell",
- "displayName": "AD Default User Shell",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_addefaultusershellflag",
- "displayName": "AD Default User Shell Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_addefaultusershellflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_addefaultusershellflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_addomainadmingrouplist",
- "displayName": "AD Domain Admin Group List",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_addomainadmingrouplistflag",
- "displayName": "AD Domain Admin Group List Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_addomainadmingrouplistflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_addomainadmingrouplistflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adforcehomelocal",
- "displayName": "AD Force Home Local",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adforcehomelocal_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adforcehomelocal_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adforcehomelocalflag",
- "displayName": "AD Force Home Local Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adforcehomelocalflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adforcehomelocalflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_admapggidattribute",
- "displayName": "AD Map GGID Attribute",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_admapggidattributeflag",
- "displayName": "AD Map GGID Attribute Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_admapggidattributeflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_admapggidattributeflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_admapgidattribute",
- "displayName": "AD Map GID Attribute",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_admapgidattributeflag",
- "displayName": "AD Map GID Attribute Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_admapgidattributeflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_admapgidattributeflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_admapuidattribute",
- "displayName": "AD Map UID Attribute",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_admapuidattributeflag",
- "displayName": "AD Map UID Attribute Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_admapuidattributeflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_admapuidattributeflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_admountstyle",
- "displayName": "AD Mount Style",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_admountstyle_0",
- "displayName": "afp",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_admountstyle_1",
- "displayName": "smb",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adnamespace",
- "displayName": "AD Namespace",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adnamespace_0",
- "displayName": "forest",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adnamespace_1",
- "displayName": "domain",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adnamespaceflag",
- "displayName": "AD Namespace Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adnamespaceflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adnamespaceflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adorganizationalunit",
- "displayName": "AD Organizational Unit",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_adpacketencrypt",
- "displayName": "AD Packet Encrypt",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_adpacketencryptflag",
- "displayName": "AD Packet Encrypt Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adpacketencryptflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adpacketencryptflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adpacketsign",
- "displayName": "AD Packet Sign",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_adpacketsignflag",
- "displayName": "AD Packet Sign Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adpacketsignflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adpacketsignflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adpreferreddcserver",
- "displayName": "AD Preferred DC Server",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_adpreferreddcserverflag",
- "displayName": "AD Preferred DC Server Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adpreferreddcserverflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adpreferreddcserverflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adrestrictddns",
- "displayName": "AD Restrict DDNS",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_adrestrictddnsflag",
- "displayName": "AD Restrict DDNS Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adrestrictddnsflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adrestrictddnsflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adtrustchangepassintervaldays",
- "displayName": "AD Trust Change Pass Interval Days",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_adtrustchangepassintervaldaysflag",
- "displayName": "AD Trust Change Pass Interval Days Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adtrustchangepassintervaldaysflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adtrustchangepassintervaldaysflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adusewindowsuncpath",
- "displayName": "AD Use Windows UNC Path",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adusewindowsuncpath_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adusewindowsuncpath_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adusewindowsuncpathflag",
- "displayName": "AD Use Windows UNC Path Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adusewindowsuncpathflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adusewindowsuncpathflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adwarnuserbeforecreatingma",
- "displayName": "AD Warn User Before Creating MA",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adwarnuserbeforecreatingma_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adwarnuserbeforecreatingma_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_adwarnuserbeforecreatingmaflag",
- "displayName": "AD Warn User Before Creating MA Flag",
- "options": [
- {
- "id": "com.apple.directoryservice.managed_adwarnuserbeforecreatingmaflag_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.directoryservice.managed_adwarnuserbeforecreatingmaflag_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.directoryservice.managed_clientid",
- "displayName": "Client ID",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_com.apple.directoryservice.managed",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_description",
- "displayName": "Description",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_hostname",
- "displayName": "Host Name",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_password",
- "displayName": "Password",
- "options": null
- },
- {
- "id": "com.apple.directoryservice.managed_username",
- "displayName": "User Name",
- "options": null
- },
- {
- "id": "com.apple.discrecording_burnsupport",
- "displayName": "Burn Support",
- "options": [
- {
- "id": "com.apple.discrecording_burnsupport_0",
- "displayName": "off",
- "description": null
- },
- {
- "id": "com.apple.discrecording_burnsupport_1",
- "displayName": "authenticate",
- "description": null
- },
- {
- "id": "com.apple.discrecording_burnsupport_2",
- "displayName": "on",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.discrecording_com.apple.discrecording",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_com.apple.dnssettings.managed",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_dnssettings",
- "displayName": "DNS Settings",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_dnssettings_dnsprotocol",
- "displayName": "DNS Protocol",
- "options": [
- {
- "id": "com.apple.dnssettings.managed_dnssettings_dnsprotocol_0",
- "displayName": "HTTPS",
- "description": null
- },
- {
- "id": "com.apple.dnssettings.managed_dnssettings_dnsprotocol_1",
- "displayName": "TLS",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dnssettings.managed_dnssettings_serveraddresses",
- "displayName": "Server Addresses",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_dnssettings_servername",
- "displayName": "Server Name",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_dnssettings_serverurl",
- "displayName": "Server URL",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_dnssettings_supplementalmatchdomains",
- "displayName": "Supplemental Match Domains",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules",
- "displayName": "On Demand Rules",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_action",
- "displayName": "Action",
- "options": [
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_action_0",
- "displayName": "Connect",
- "description": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_action_1",
- "displayName": "Disconnect",
- "description": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_action_2",
- "displayName": "Evaluate Connection",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters",
- "displayName": "Action Parameters",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters_domainaction",
- "displayName": "Domain Action (Deprecated)",
- "options": [
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters_domainaction_0",
- "displayName": "Never Connect",
- "description": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters_domainaction_1",
- "displayName": "Connect If Needed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters_domains",
- "displayName": "Domains (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters_item_domainaction",
- "displayName": "Domain Action",
- "options": [
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters_item_domainaction_0",
- "displayName": "NeverConnect",
- "description": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters_item_domainaction_1",
- "displayName": "ConnectIfNeeded",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_actionparameters_item_domains",
- "displayName": "Domains",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_dnsdomainmatch",
- "displayName": "DNS Domain Match",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_dnsserveraddressmatch",
- "displayName": "DNS Server Address Match",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_interfacetypematch",
- "displayName": "Interface Type Match",
- "options": [
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_interfacetypematch_0",
- "displayName": "Ethernet",
- "description": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_interfacetypematch_1",
- "displayName": "WiFi",
- "description": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_interfacetypematch_2",
- "displayName": "Cellular",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_ssidmatch",
- "displayName": "SSID Match",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_ondemandrules_item_urlstringprobe",
- "displayName": "URL String Probe",
- "options": null
- },
- {
- "id": "com.apple.dnssettings.managed_prohibitdisablement",
- "displayName": "Prohibit Disablement",
- "options": [
- {
- "id": "com.apple.dnssettings.managed_prohibitdisablement_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.dnssettings.managed_prohibitdisablement_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_allowdockfixupoverride",
- "displayName": "Allow Dock Fixup Override",
- "options": [
- {
- "id": "com.apple.dock_allowdockfixupoverride_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_allowdockfixupoverride_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_autohide",
- "displayName": "Auto Hide",
- "options": [
- {
- "id": "com.apple.dock_autohide_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_autohide_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_autohide-immutable",
- "displayName": "Auto Hide Immutable",
- "options": [
- {
- "id": "com.apple.dock_autohide-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_autohide-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_com.apple.dock",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.dock_contents-immutable",
- "displayName": "Contents Immutable",
- "options": [
- {
- "id": "com.apple.dock_contents-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_contents-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_dblclickbehavior",
- "displayName": "Double Click Behavior",
- "options": [
- {
- "id": "com.apple.dock_dblclickbehavior_0",
- "displayName": "Minimize",
- "description": null
- },
- {
- "id": "com.apple.dock_dblclickbehavior_1",
- "displayName": "Maximize",
- "description": null
- },
- {
- "id": "com.apple.dock_dblclickbehavior_2",
- "displayName": "None",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_dblclickbehavior-immutable",
- "displayName": "Double Click Behavior Immutable",
- "options": [
- {
- "id": "com.apple.dock_dblclickbehavior-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_dblclickbehavior-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_largesize",
- "displayName": "Large Size",
- "options": null
- },
- {
- "id": "com.apple.dock_launchanim",
- "displayName": "Launch Animation",
- "options": [
- {
- "id": "com.apple.dock_launchanim_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_launchanim_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_launchanim-immutable",
- "displayName": "Launch Animation Immutable",
- "options": [
- {
- "id": "com.apple.dock_launchanim-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_launchanim-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_magnification",
- "displayName": "Magnification",
- "options": [
- {
- "id": "com.apple.dock_magnification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_magnification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_magnify-immutable",
- "displayName": "Magnify Immutable",
- "options": [
- {
- "id": "com.apple.dock_magnify-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_magnify-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_magsize-immutable",
- "displayName": "Magnification Size Immutable",
- "options": [
- {
- "id": "com.apple.dock_magsize-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_magsize-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_mcxdockspecialfolders",
- "displayName": "MCX Dock Special Folders",
- "options": null
- },
- {
- "id": "com.apple.dock_mineffect",
- "displayName": "Minimize Effect",
- "options": [
- {
- "id": "com.apple.dock_mineffect_0",
- "displayName": "Genie",
- "description": null
- },
- {
- "id": "com.apple.dock_mineffect_1",
- "displayName": "Scale",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_mineffect-immutable",
- "displayName": "Minimize Effect Immutable",
- "options": [
- {
- "id": "com.apple.dock_mineffect-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_mineffect-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_minimize-to-application",
- "displayName": "Minimize To Application",
- "options": [
- {
- "id": "com.apple.dock_minimize-to-application_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_minimize-to-application_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_minintoapp-immutable",
- "displayName": "Minimize Into Application Immutable",
- "options": [
- {
- "id": "com.apple.dock_minintoapp-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_minintoapp-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_orientation",
- "displayName": "Orientation",
- "options": [
- {
- "id": "com.apple.dock_orientation_0",
- "displayName": "Bottom",
- "description": null
- },
- {
- "id": "com.apple.dock_orientation_1",
- "displayName": "Left",
- "description": null
- },
- {
- "id": "com.apple.dock_orientation_2",
- "displayName": "Right",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_persistent-apps",
- "displayName": "Persistent Apps",
- "options": null
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-data",
- "displayName": "Tile Data",
- "options": null
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-data_file-type",
- "displayName": "File Type",
- "options": [
- {
- "id": "com.apple.dock_persistent-apps_item_tile-data_file-type_0",
- "displayName": "URL",
- "description": null
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-data_file-type_1",
- "displayName": "File",
- "description": null
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-data_file-type_2",
- "displayName": "Directory",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-data_label",
- "displayName": "Label",
- "options": null
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-data_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-type",
- "displayName": "Tile Type",
- "options": [
- {
- "id": "com.apple.dock_persistent-apps_item_tile-type_0",
- "displayName": "File",
- "description": null
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-type_1",
- "displayName": "Directory",
- "description": null
- },
- {
- "id": "com.apple.dock_persistent-apps_item_tile-type_2",
- "displayName": "URL",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_persistent-others",
- "displayName": "Persistent Others",
- "options": null
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-data",
- "displayName": "Tile Data",
- "options": null
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-data_file-type",
- "displayName": "File Type",
- "options": [
- {
- "id": "com.apple.dock_persistent-others_item_tile-data_file-type_0",
- "displayName": "URL",
- "description": null
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-data_file-type_1",
- "displayName": "File",
- "description": null
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-data_file-type_2",
- "displayName": "Directory",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-data_label",
- "displayName": "Label",
- "options": null
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-data_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-type",
- "displayName": "Tile Type",
- "options": [
- {
- "id": "com.apple.dock_persistent-others_item_tile-type_0",
- "displayName": "File",
- "description": null
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-type_1",
- "displayName": "Directory",
- "description": null
- },
- {
- "id": "com.apple.dock_persistent-others_item_tile-type_2",
- "displayName": "URL",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_position-immutable",
- "displayName": "Position Immutable",
- "options": [
- {
- "id": "com.apple.dock_position-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_position-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_show-process-indicators",
- "displayName": "Show Process Indicators",
- "options": [
- {
- "id": "com.apple.dock_show-process-indicators_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_show-process-indicators_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_show-recents",
- "displayName": "Show Recents",
- "options": [
- {
- "id": "com.apple.dock_show-recents_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_show-recents_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_showindicators-immutable",
- "displayName": "Show Indicators Immutable",
- "options": [
- {
- "id": "com.apple.dock_showindicators-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_showindicators-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_showrecents-immutable",
- "displayName": "Show Recents Immutable",
- "options": [
- {
- "id": "com.apple.dock_showrecents-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_showrecents-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_size-immutable",
- "displayName": "Size Immutable",
- "options": [
- {
- "id": "com.apple.dock_size-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_size-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_static-apps",
- "displayName": "Static Apps",
- "options": null
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-data",
- "displayName": "Tile Data",
- "options": null
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-data_file-type",
- "displayName": "File Type",
- "options": [
- {
- "id": "com.apple.dock_static-apps_item_tile-data_file-type_0",
- "displayName": "URL",
- "description": null
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-data_file-type_1",
- "displayName": "File",
- "description": null
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-data_file-type_2",
- "displayName": "Directory",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-data_label",
- "displayName": "Label",
- "options": null
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-data_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-type",
- "displayName": "Tile Type",
- "options": [
- {
- "id": "com.apple.dock_static-apps_item_tile-type_0",
- "displayName": "File",
- "description": null
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-type_1",
- "displayName": "Directory",
- "description": null
- },
- {
- "id": "com.apple.dock_static-apps_item_tile-type_2",
- "displayName": "URL",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_static-only",
- "displayName": "Static Only",
- "options": [
- {
- "id": "com.apple.dock_static-only_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_static-only_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_static-others",
- "displayName": "Static Others",
- "options": null
- },
- {
- "id": "com.apple.dock_static-others_item_tile-data",
- "displayName": "Tile Data",
- "options": null
- },
- {
- "id": "com.apple.dock_static-others_item_tile-data_file-type",
- "displayName": "File Type",
- "options": [
- {
- "id": "com.apple.dock_static-others_item_tile-data_file-type_0",
- "displayName": "URL",
- "description": null
- },
- {
- "id": "com.apple.dock_static-others_item_tile-data_file-type_1",
- "displayName": "File",
- "description": null
- },
- {
- "id": "com.apple.dock_static-others_item_tile-data_file-type_2",
- "displayName": "Directory",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_static-others_item_tile-data_label",
- "displayName": "Label",
- "options": null
- },
- {
- "id": "com.apple.dock_static-others_item_tile-data_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.dock_static-others_item_tile-type",
- "displayName": "Tile Type",
- "options": [
- {
- "id": "com.apple.dock_static-others_item_tile-type_0",
- "displayName": "File",
- "description": null
- },
- {
- "id": "com.apple.dock_static-others_item_tile-type_1",
- "displayName": "Directory",
- "description": null
- },
- {
- "id": "com.apple.dock_static-others_item_tile-type_2",
- "displayName": "URL",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_tilesize",
- "displayName": "Tile Size",
- "options": null
- },
- {
- "id": "com.apple.dock_windowtabbing",
- "displayName": "Window Tabbing",
- "options": [
- {
- "id": "com.apple.dock_windowtabbing_0",
- "displayName": "Manual",
- "description": null
- },
- {
- "id": "com.apple.dock_windowtabbing_1",
- "displayName": "Always",
- "description": null
- },
- {
- "id": "com.apple.dock_windowtabbing_2",
- "displayName": "Full Screen",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.dock_windowtabbing-immutable",
- "displayName": "Window Tabbing Immutable",
- "options": [
- {
- "id": "com.apple.dock_windowtabbing-immutable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.dock_windowtabbing-immutable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.domains_com.apple.domains",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.domains_crosssitetrackingpreventionrelaxedapps",
- "displayName": "Cross Site Tracking Prevention Relaxed Apps",
- "options": null
- },
- {
- "id": "com.apple.domains_crosssitetrackingpreventionrelaxeddomains",
- "displayName": "Cross Site Tracking Prevention Relaxed Domains",
- "options": null
- },
- {
- "id": "com.apple.domains_emaildomains",
- "displayName": "Email Domains",
- "options": null
- },
- {
- "id": "com.apple.domains_safaripasswordautofilldomains",
- "displayName": "Safari Password Auto Fill Domains",
- "options": null
- },
- {
- "id": "com.apple.domains_webdomains",
- "displayName": "Web Domains",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_authenticationmethod",
- "displayName": "Authentication Method (Deprecated)",
- "options": [
- {
- "id": "com.apple.extensiblesso_authenticationmethod_0",
- "displayName": "Password",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_authenticationmethod_1",
- "displayName": "UserSecureEnclaveKey",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_com.apple.extensiblesso",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_com.apple.extensiblesso-kerberos_kerberos",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_deniedbundleidentifiers",
- "displayName": "Denied Bundle Identifiers",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata",
- "displayName": "Extension Data",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowautomaticlogin_kerberos",
- "displayName": "Allow Automatic Login",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_allowautomaticlogin_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowautomaticlogin_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowpassword_kerberos",
- "displayName": "Allow Password",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_allowpassword_kerberos_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowpassword_kerberos_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowpasswordchange_kerberos",
- "displayName": "Allow Password Change",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_allowpasswordchange_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowpasswordchange_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowplatformssoauthfallback_kerberos",
- "displayName": "Allow Platform SSO OAuth Fallback",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_allowplatformssoauthfallback_kerberos_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowplatformssoauthfallback_kerberos_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowsmartcard_kerberos",
- "displayName": "Allow Smart Card",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_allowsmartcard_kerberos_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_allowsmartcard_kerberos_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_credentialbundleidacl_kerberos",
- "displayName": "Credential Bundle ID ACL",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_credentialusemode_kerberos",
- "displayName": "Credential Use Mode",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_credentialusemode_kerberos_0",
- "displayName": "Always",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_credentialusemode_kerberos_1",
- "displayName": "When Not Specified",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_credentialusemode_kerberos_2",
- "displayName": "Kerberos Default ",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_customusernamelabel_kerberos",
- "displayName": "Custom Username Label",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_delayusersetup_kerberos",
- "displayName": "Delay User Setup",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_delayusersetup_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_delayusersetup_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_domainrealmmapping_generickey_kerberos_keytobereplaced",
- "displayName": "Realm",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_domainrealmmapping_generickey_kerberos_string",
- "displayName": "Domain Realm Mapping",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_domainrealmmapping_kerberos",
- "displayName": "Domain Realm Mapping",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_domainrealmmapping_realm_kerberos",
- "displayName": "Realm (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_generickey_boolean",
- "displayName": "Value",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_generickey_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_generickey_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_generickey_integer",
- "displayName": "Value",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_generickey_keytobereplaced",
- "displayName": "Key",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_generickey_string",
- "displayName": "Value",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_helptext_kerberos",
- "displayName": "Help Text",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_identityissuerautoselectfilter_kerberos",
- "displayName": "Identity Issuer Auto Select Filter",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_includekerberosappsinbundleidacl_kerberos",
- "displayName": "Include Kerberos Apps In Bundle ID ACL",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_includekerberosappsinbundleidacl_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_includekerberosappsinbundleidacl_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_includemanagedappsinbundleidacl_kerberos",
- "displayName": "Include Managed Apps In Bundle ID ACL",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_includemanagedappsinbundleidacl_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_includemanagedappsinbundleidacl_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_isdefaultrealm_kerberos",
- "displayName": "Is Default Realm",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_isdefaultrealm_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_isdefaultrealm_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_kerberos",
- "displayName": "Extension Data",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_monitorcredentialscache_kerberos",
- "displayName": "Monitor Credentials Cache",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_monitorcredentialscache_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_monitorcredentialscache_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_performkerberosonly_kerberos",
- "displayName": "Perform Kerberos Only",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_performkerberosonly_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_performkerberosonly_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_preferredkdcs_kerberos",
- "displayName": "Preferred KDCs",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_principalname_kerberos",
- "displayName": "Principal Name",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_pwchangeurl_kerberos",
- "displayName": "Password Change URL",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_pwnotificationdays_kerberos",
- "displayName": "Password Notification Days",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_pwreqcomplexity_kerberos",
- "displayName": "Password Req Complexity",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_pwreqcomplexity_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_pwreqcomplexity_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_pwreqhistory_kerberos",
- "displayName": "Password Req History",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_pwreqlength_kerberos",
- "displayName": "Password Req Length",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_pwreqminage_kerberos",
- "displayName": "Password Req Min Age",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_pwreqtext_kerberos",
- "displayName": "Password Req Text",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_requiretlsforldap_kerberos",
- "displayName": "Require TLS For LDAP",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_requiretlsforldap_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_requiretlsforldap_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_requireuserpresence_kerberos",
- "displayName": "Require User Presence",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_requireuserpresence_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_requireuserpresence_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_sitecode_kerberos",
- "displayName": "Site Code",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_startinsmartcardmode_kerberos",
- "displayName": "Start In Smart Card Mode",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_startinsmartcardmode_kerberos_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_startinsmartcardmode_kerberos_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_synclocalpassword_kerberos",
- "displayName": "Sync Local Password",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_synclocalpassword_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_synclocalpassword_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_useplatformssotgt_kerberos",
- "displayName": "Use Platform SSOTGT",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_useplatformssotgt_kerberos_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_useplatformssotgt_kerberos_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_usesiteautodiscovery_kerberos",
- "displayName": "Use Site Auto Discovery",
- "options": [
- {
- "id": "com.apple.extensiblesso_extensiondata_usesiteautodiscovery_kerberos_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_extensiondata_usesiteautodiscovery_kerberos_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_extensionidentifier",
- "displayName": "Extension Identifier",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_extensionidentifier_kerberos",
- "displayName": "Extension Identifier",
- "options": {
- "id": "com.apple.extensiblesso_extensionidentifier_kerberos_0",
- "displayName": "com.apple.AppSSOKerberos.KerberosExtension",
- "description": null
- }
- },
- {
- "id": "com.apple.extensiblesso_hosts",
- "displayName": "Hosts",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_hosts_kerberos",
- "displayName": "Hosts",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_ignored_$typepicker",
- "displayName": "Type",
- "options": [
- {
- "id": "com.apple.extensiblesso_ignored_0",
- "displayName": "String",
- "description": "String"
- },
- {
- "id": "com.apple.extensiblesso_ignored_1",
- "displayName": "Integer",
- "description": "Integer"
- },
- {
- "id": "com.apple.extensiblesso_ignored_2",
- "displayName": "Boolean",
- "description": "Boolean"
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_ignored_kerberos_$typepicker",
- "displayName": "IGNORED",
- "options": {
- "id": "com.apple.extensiblesso_ignored_kerberos_0",
- "displayName": "Array",
- "description": null
- }
- },
- {
- "id": "com.apple.extensiblesso_platformsso",
- "displayName": "Platform SSO",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_accountdisplayname",
- "displayName": "Account Display Name",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_additionalgroups",
- "displayName": "Additional Groups",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_administratorgroups",
- "displayName": "Administrator Groups",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_allowdeviceidentifiersinattestation",
- "displayName": "Allow Device Identifiers In Attestation",
- "options": [
- {
- "id": "com.apple.extensiblesso_platformsso_allowdeviceidentifiersinattestation_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_allowdeviceidentifiersinattestation_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authenticationgraceperiod",
- "displayName": "Authentication Grace Period",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authenticationmethod",
- "displayName": "Authentication Method",
- "options": [
- {
- "id": "com.apple.extensiblesso_platformsso_authenticationmethod_0",
- "displayName": "Password",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authenticationmethod_1",
- "displayName": "UserSecureEnclaveKey",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authenticationmethod_2",
- "displayName": "SmartCard",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authorizationgroups",
- "displayName": "Authorization Groups",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authorizationgroups_authorization right",
- "displayName": "Authorization Right (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authorizationgroups_generickey",
- "displayName": "ANY",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authorizationgroups_generickey_keytobereplaced",
- "displayName": "Authorization Groups",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_authorizationgroups_group",
- "displayName": "Group (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_enableauthorization",
- "displayName": "Enable Authorization",
- "options": [
- {
- "id": "com.apple.extensiblesso_platformsso_enableauthorization_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_enableauthorization_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_platformsso_enablecreateuseratlogin",
- "displayName": "Enable Create User At Login",
- "options": [
- {
- "id": "com.apple.extensiblesso_platformsso_enablecreateuseratlogin_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_enablecreateuseratlogin_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_platformsso_filevaultpolicy",
- "displayName": "FileVault Policy",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_loginfrequency",
- "displayName": "Login Frequency",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_loginpolicy",
- "displayName": "Login Policy",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_newuserauthorizationmode",
- "displayName": "New User Authorization Mode",
- "options": [
- {
- "id": "com.apple.extensiblesso_platformsso_newuserauthorizationmode_0",
- "displayName": "Standard",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_newuserauthorizationmode_1",
- "displayName": "Admin",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_newuserauthorizationmode_2",
- "displayName": "Groups",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_newuserauthorizationmode_3",
- "displayName": "Temporary",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_platformsso_nonplatformssoaccounts",
- "displayName": "Non Platform SSO Accounts",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_offlinegraceperiod",
- "displayName": "Offline Grace Period",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_tokentousermapping",
- "displayName": "Token To User Mapping",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_tokentousermapping_accountname",
- "displayName": "Account Name",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_tokentousermapping_fullname",
- "displayName": "Full Name",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_unlockpolicy",
- "displayName": "Unlock Policy",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_userauthorizationmode",
- "displayName": "User Authorization Mode",
- "options": [
- {
- "id": "com.apple.extensiblesso_platformsso_userauthorizationmode_0",
- "displayName": "Standard",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_userauthorizationmode_1",
- "displayName": "Admin",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_userauthorizationmode_2",
- "displayName": "Groups",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_platformsso_useshareddevicekeys",
- "displayName": "Use Shared Device Keys",
- "options": [
- {
- "id": "com.apple.extensiblesso_platformsso_useshareddevicekeys_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_platformsso_useshareddevicekeys_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_realm",
- "displayName": "Realm",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_realm_kerberos",
- "displayName": "Realm",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_registrationtoken",
- "displayName": "Registration Token",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_screenlockedbehavior",
- "displayName": "Screen Locked Behavior",
- "options": {
- "id": "com.apple.extensiblesso_screenlockedbehavior_0",
- "displayName": "Do Not Handle",
- "description": null
- }
- },
- {
- "id": "com.apple.extensiblesso_teamidentifier",
- "displayName": "Team Identifier",
- "options": null
- },
- {
- "id": "com.apple.extensiblesso_teamidentifier_kerberos",
- "displayName": "Team Identifier",
- "options": {
- "id": "com.apple.extensiblesso_teamidentifier_kerberos_0",
- "displayName": "apple",
- "description": null
- }
- },
- {
- "id": "com.apple.extensiblesso_type",
- "displayName": "Type",
- "options": [
- {
- "id": "com.apple.extensiblesso_type_0",
- "displayName": "Credential",
- "description": null
- },
- {
- "id": "com.apple.extensiblesso_type_1",
- "displayName": "Redirect",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.extensiblesso_type_kerberos",
- "displayName": "Type",
- "options": {
- "id": "com.apple.extensiblesso_type_kerberos_0",
- "displayName": "Credential",
- "description": null
- }
- },
- {
- "id": "com.apple.extensiblesso_urls",
- "displayName": "URLs",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_com.apple.familycontrols.contentfilter",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_filterblacklist",
- "displayName": "Filter Blocklist (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_filterdenylist",
- "displayName": "Filter Denylist",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_filterwhitelist",
- "displayName": "Filter Allowlist",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_restrictweb",
- "displayName": "Restrict Web",
- "options": [
- {
- "id": "com.apple.familycontrols.contentfilter_restrictweb_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_restrictweb_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.contentfilter_sitewhitelist",
- "displayName": "Site Allowlist",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_sitewhitelist_item_address",
- "displayName": "Address",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_sitewhitelist_item_pagetitle",
- "displayName": "Page Title",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_usecontentfilter",
- "displayName": "Use Content Filter",
- "options": [
- {
- "id": "com.apple.familycontrols.contentfilter_usecontentfilter_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_usecontentfilter_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.contentfilter_whitelistenabled",
- "displayName": "Allowlist Enabled",
- "options": [
- {
- "id": "com.apple.familycontrols.contentfilter_whitelistenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.contentfilter_whitelistenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_com.apple.familycontrols.timelimits.v2",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_familycontrolsenabled",
- "displayName": "Family Controls Enabled",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_familycontrolsenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_familycontrolsenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits",
- "displayName": "Time Limits",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance",
- "displayName": "Weekday Allowance",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_enabled",
- "displayName": "Enabled",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_enabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_enabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_end",
- "displayName": "End",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_rangetype",
- "displayName": "Range Type",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_rangetype_0",
- "displayName": "Weekday",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_rangetype_1",
- "displayName": "Weekend",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_secondsperday",
- "displayName": "Seconds Per Day",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-allowance_start",
- "displayName": "Start",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew",
- "displayName": "Weekday Curfew",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_enabled",
- "displayName": "Enabled",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_enabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_enabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_end",
- "displayName": "End",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_rangetype",
- "displayName": "Range Type",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_rangetype_0",
- "displayName": "Weekday",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_rangetype_1",
- "displayName": "Weekend",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_secondsperday",
- "displayName": "Seconds Per Day",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekday-curfew_start",
- "displayName": "Start",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance",
- "displayName": "Weekend Allowance",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_enabled",
- "displayName": "Enabled",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_enabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_enabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_end",
- "displayName": "End",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_rangetype",
- "displayName": "Range Type",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_rangetype_0",
- "displayName": "Weekday",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_rangetype_1",
- "displayName": "Weekend",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_secondsperday",
- "displayName": "Seconds Per Day",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-allowance_start",
- "displayName": "Start",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew",
- "displayName": "Weekend Curfew",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_enabled",
- "displayName": "Enabled",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_enabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_enabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_end",
- "displayName": "End",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_rangetype",
- "displayName": "Range Type",
- "options": [
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_rangetype_0",
- "displayName": "Weekday",
- "description": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_rangetype_1",
- "displayName": "Weekend",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_secondsperday",
- "displayName": "Seconds Per Day",
- "options": null
- },
- {
- "id": "com.apple.familycontrols.timelimits.v2_time-limits_weekend-curfew_start",
- "displayName": "Start",
- "options": null
- },
- {
- "id": "com.apple.fileproviderd_allowmanagedfileproviderstorequestattribution",
- "displayName": "Allow Managed File Providers To Request Attribution",
- "options": [
- {
- "id": "com.apple.fileproviderd_allowmanagedfileproviderstorequestattribution_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.fileproviderd_allowmanagedfileproviderstorequestattribution_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.fileproviderd_com.apple.fileproviderd",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.fileproviderd_managementallowsknownfoldersyncing",
- "displayName": "Management Allows Known Folder Syncing",
- "options": [
- {
- "id": "com.apple.fileproviderd_managementallowsknownfoldersyncing_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.fileproviderd_managementallowsknownfoldersyncing_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.fileproviderd_managementknownfoldersyncingallowlist",
- "displayName": "Management Known Folder Syncing Allow List",
- "options": null
- },
- {
- "id": "com.apple.finder_com.apple.finder",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.finder_prohibitburn",
- "displayName": "Prohibit Burn",
- "options": [
- {
- "id": "com.apple.finder_prohibitburn_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_prohibitburn_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.finder_prohibitconnectto",
- "displayName": "Prohibit Connect To",
- "options": [
- {
- "id": "com.apple.finder_prohibitconnectto_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_prohibitconnectto_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.finder_prohibiteject",
- "displayName": "Prohibit Eject",
- "options": [
- {
- "id": "com.apple.finder_prohibiteject_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_prohibiteject_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.finder_prohibitgotofolder",
- "displayName": "Prohibit Go To Folder",
- "options": [
- {
- "id": "com.apple.finder_prohibitgotofolder_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_prohibitgotofolder_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.finder_showexternalharddrivesondesktop",
- "displayName": "Show External Hard Drives On Desktop",
- "options": [
- {
- "id": "com.apple.finder_showexternalharddrivesondesktop_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_showexternalharddrivesondesktop_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.finder_showharddrivesondesktop",
- "displayName": "Show Hard Drives On Desktop",
- "options": [
- {
- "id": "com.apple.finder_showharddrivesondesktop_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_showharddrivesondesktop_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.finder_showmountedserversondesktop",
- "displayName": "Show Mounted Servers On Desktop",
- "options": [
- {
- "id": "com.apple.finder_showmountedserversondesktop_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_showmountedserversondesktop_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.finder_showremovablemediaondesktop",
- "displayName": "Show Removable Media On Desktop",
- "options": [
- {
- "id": "com.apple.finder_showremovablemediaondesktop_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_showremovablemediaondesktop_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.finder_warnonemptytrash",
- "displayName": "Warn On Empty Trash",
- "options": [
- {
- "id": "com.apple.finder_warnonemptytrash_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.finder_warnonemptytrash_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.font_com.apple.font",
- "displayName": "com.apple.font",
- "options": null
- },
- {
- "id": "com.apple.font_font",
- "displayName": "Font",
- "options": null
- },
- {
- "id": "com.apple.font_name",
- "displayName": "Name",
- "options": null
- },
- {
- "id": "com.apple.gamed_com.apple.gamed",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.gamed_gkfeatureaccountmodificationallowed",
- "displayName": "GK Feature Account Modification Allowed",
- "options": [
- {
- "id": "com.apple.gamed_gkfeatureaccountmodificationallowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.gamed_gkfeatureaccountmodificationallowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.ldap.account_com.apple.ldap.account",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.ldap.account_ldapaccountdescription",
- "displayName": "LDAP Account Description",
- "options": null
- },
- {
- "id": "com.apple.ldap.account_ldapaccounthostname",
- "displayName": "LDAP Account Host Name",
- "options": null
- },
- {
- "id": "com.apple.ldap.account_ldapaccountpassword",
- "displayName": "LDAP Account Password",
- "options": null
- },
- {
- "id": "com.apple.ldap.account_ldapaccountusername",
- "displayName": "LDAP Account User Name",
- "options": null
- },
- {
- "id": "com.apple.ldap.account_ldapaccountusessl",
- "displayName": "LDAP Account Use SSL",
- "options": [
- {
- "id": "com.apple.ldap.account_ldapaccountusessl_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.ldap.account_ldapaccountusessl_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.ldap.account_ldapsearchsettings",
- "displayName": "LDAP Search Settings",
- "options": null
- },
- {
- "id": "com.apple.ldap.account_ldapsearchsettings_item_ldapsearchsettingdescription",
- "displayName": "LDAP Search Setting Description",
- "options": null
- },
- {
- "id": "com.apple.ldap.account_ldapsearchsettings_item_ldapsearchsettingscope",
- "displayName": "LDAP Search Setting Scope",
- "options": [
- {
- "id": "com.apple.ldap.account_ldapsearchsettings_item_ldapsearchsettingscope_0",
- "displayName": "Base",
- "description": null
- },
- {
- "id": "com.apple.ldap.account_ldapsearchsettings_item_ldapsearchsettingscope_1",
- "displayName": "OneLevel",
- "description": null
- },
- {
- "id": "com.apple.ldap.account_ldapsearchsettings_item_ldapsearchsettingscope_2",
- "displayName": "Subtree",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.ldap.account_ldapsearchsettings_item_ldapsearchsettingsearchbase",
- "displayName": "LDAP Search Setting Search Base",
- "options": null
- },
- {
- "id": "com.apple.loginitems.managed_autolaunchedapplicationdictionary-managed",
- "displayName": "Auto Launch Items",
- "options": null
- },
- {
- "id": "com.apple.loginitems.managed_autolaunchedapplicationdictionary-managed_item_hide",
- "displayName": "Hide",
- "options": [
- {
- "id": "com.apple.loginitems.managed_autolaunchedapplicationdictionary-managed_item_hide_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginitems.managed_autolaunchedapplicationdictionary-managed_item_hide_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginitems.managed_autolaunchedapplicationdictionary-managed_item_path",
- "displayName": "Path",
- "options": null
- },
- {
- "id": "com.apple.loginitems.managed_com.apple.loginitems.managed",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.loginwindow_adminhostinfo",
- "displayName": "Admin Host Info",
- "options": null
- },
- {
- "id": "com.apple.loginwindow_allowlist",
- "displayName": "Allow List",
- "options": null
- },
- {
- "id": "com.apple.loginwindow_autologinpassword",
- "displayName": "Autologin Password",
- "options": null
- },
- {
- "id": "com.apple.loginwindow_autologinusername",
- "displayName": "Autologin Username",
- "options": null
- },
- {
- "id": "com.apple.loginwindow_com.apple.loginwindow",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.loginwindow_denylist",
- "displayName": "Deny List",
- "options": null
- },
- {
- "id": "com.apple.loginwindow_disableconsoleaccess",
- "displayName": "Disable Console Access",
- "options": [
- {
- "id": "com.apple.loginwindow_disableconsoleaccess_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_disableconsoleaccess_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_disablescreenlockimmediate",
- "displayName": "Disable Screen Lock Immediate",
- "options": [
- {
- "id": "com.apple.loginwindow_disablescreenlockimmediate_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_disablescreenlockimmediate_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_hideadminusers",
- "displayName": "Hide Admin Users",
- "options": [
- {
- "id": "com.apple.loginwindow_hideadminusers_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_hideadminusers_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_hidelocalusers",
- "displayName": "Hide Local Users",
- "options": [
- {
- "id": "com.apple.loginwindow_hidelocalusers_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_hidelocalusers_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_includenetworkuser",
- "displayName": "Include Network User",
- "options": [
- {
- "id": "com.apple.loginwindow_includenetworkuser_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_includenetworkuser_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_loginwindowtext",
- "displayName": "Login Window Text",
- "options": null
- },
- {
- "id": "com.apple.loginwindow_logoutdisabledwhileloggedin",
- "displayName": "Log Out Disabled While Logged In",
- "options": [
- {
- "id": "com.apple.loginwindow_logoutdisabledwhileloggedin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_logoutdisabledwhileloggedin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_poweroffdisabledwhileloggedin",
- "displayName": "Power Off Disabled While Logged In",
- "options": [
- {
- "id": "com.apple.loginwindow_poweroffdisabledwhileloggedin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_poweroffdisabledwhileloggedin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_restartdisabled",
- "displayName": "Restart Disabled",
- "options": [
- {
- "id": "com.apple.loginwindow_restartdisabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_restartdisabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_restartdisabledwhileloggedin",
- "displayName": "Restart Disabled While Logged In",
- "options": [
- {
- "id": "com.apple.loginwindow_restartdisabledwhileloggedin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_restartdisabledwhileloggedin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_showfullname",
- "displayName": "Show Full Name",
- "options": [
- {
- "id": "com.apple.loginwindow_showfullname_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_showfullname_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_showinputmenu",
- "displayName": "Show Input Menu",
- "options": [
- {
- "id": "com.apple.loginwindow_showinputmenu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_showinputmenu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_showotherusers_managed",
- "displayName": "Show Other Users Managed",
- "options": [
- {
- "id": "com.apple.loginwindow_showotherusers_managed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_showotherusers_managed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_shutdowndisabled",
- "displayName": "Shut Down Disabled",
- "options": [
- {
- "id": "com.apple.loginwindow_shutdowndisabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_shutdowndisabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_shutdowndisabledwhileloggedin",
- "displayName": "Shut Down Disabled While Logged In",
- "options": [
- {
- "id": "com.apple.loginwindow_shutdowndisabledwhileloggedin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_shutdowndisabledwhileloggedin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.loginwindow_sleepdisabled",
- "displayName": "Sleep Disabled",
- "options": [
- {
- "id": "com.apple.loginwindow_sleepdisabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.loginwindow_sleepdisabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_accesscontrolallowmethodsincorspreflightspecconformant",
- "displayName": "Make Access-Control-Allow-Methods matching in CORS preflight spec conformant",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_accesscontrolallowmethodsincorspreflightspecconformant_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_accesscontrolallowmethodsincorspreflightspecconformant_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_accessibilityimagelabelsenabled",
- "displayName": "Let screen reader users get image descriptions from Microsoft",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_accessibilityimagelabelsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_accessibilityimagelabelsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_acknowledgeddatacollectionpolicy",
- "displayName": "Automatically acknowledge data collection policy",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_acknowledgeddatacollectionpolicy_0",
- "displayName": "Acknowledge - send required data",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_acknowledgeddatacollectionpolicy_1",
- "displayName": "Acknowledge - send required and optional data (Deprecated)",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_additionalsearchboxenabled",
- "displayName": "Enable additional search box in browser",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_additionalsearchboxenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_additionalsearchboxenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_addressbarmicrosoftsearchinbingproviderenabled",
- "displayName": "Enable Microsoft Search in Bing suggestions in the address bar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_addressbarmicrosoftsearchinbingproviderenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_addressbarmicrosoftsearchinbingproviderenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_adssettingforintrusiveadssites",
- "displayName": "Ads setting for sites with intrusive ads",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_adssettingforintrusiveadssites_0",
- "displayName": "Allow ads on all sites",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_adssettingforintrusiveadssites_1",
- "displayName": "Block ads on sites with intrusive ads. (Default value)",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_adstransparencyenabled",
- "displayName": "Configure if the ads transparency feature is enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_adstransparencyenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_adstransparencyenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_aigenthemesenabled",
- "displayName": "Enables DALL-E themes generation",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_aigenthemesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_aigenthemesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allhttpauthschemesallowedfororigins",
- "displayName": "List of origins that allow all HTTP authentication",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowbackforwardcacheforcachecontrolnostorepageenabled",
- "displayName": "Allow pages with Cache-Control: no-store header to enter back/forward cache",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowbackforwardcacheforcachecontrolnostorepageenabled_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowbackforwardcacheforcachecontrolnostorepageenabled_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allowcertswithoutmatchingemailaddress",
- "displayName": "Allow S/MIME certificates without a matching email address",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowcertswithoutmatchingemailaddress_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowcertswithoutmatchingemailaddress_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allowcrossoriginauthprompt",
- "displayName": "Allow cross-origin HTTP Basic Auth prompts",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowcrossoriginauthprompt_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowcrossoriginauthprompt_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allowdeletingbrowserhistory",
- "displayName": "Enable deleting browser and download history",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowdeletingbrowserhistory_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowdeletingbrowserhistory_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_alloweddomainsforapps",
- "displayName": "Define domains allowed to access Google Workspace",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowedemaildomains",
- "displayName": "Allowed Email Domains",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowedthreats",
- "displayName": "Allowed threats",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowfileselectiondialogs",
- "displayName": "Allow file selection dialogs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowfileselectiondialogs_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowfileselectiondialogs_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allowpopupsduringpageunload",
- "displayName": "Allows a page to show popups during its unloading",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowpopupsduringpageunload_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowpopupsduringpageunload_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allowsurfgame",
- "displayName": "Allow surf game",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowsurfgame_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowsurfgame_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allowsyncxhrinpagedismissal",
- "displayName": "Allow pages to send synchronous XHR requests during page dismissal",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowsyncxhrinpagedismissal_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowsyncxhrinpagedismissal_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allowtrackingforurls",
- "displayName": "Configure tracking prevention exceptions for specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowvisualbasictobindtosystem",
- "displayName": "Allow Visual Basic macros to use system APIs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowvisualbasictobindtosystem_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowvisualbasictobindtosystem_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_allowwebauthnwithbrokentlscerts",
- "displayName": "Allow Web Authentication requests on sites with broken TLS certificates.",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_allowwebauthnwithbrokentlscerts_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_allowwebauthnwithbrokentlscerts_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_alternateerrorpagesenabled",
- "displayName": "Suggest similar pages when a webpage can’t be found",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_alternateerrorpagesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_alternateerrorpagesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_alwaysopenpdfexternally",
- "displayName": "Always open PDF files externally",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_alwaysopenpdfexternally_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_alwaysopenpdfexternally_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_ambientauthenticationinprivatemodesenabled",
- "displayName": "Enable Ambient Authentication for InPrivate and Guest profiles",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_ambientauthenticationinprivatemodesenabled_0",
- "displayName": "Enable ambient authentication in regular sessions only.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_ambientauthenticationinprivatemodesenabled_1",
- "displayName": "Enable ambient authentication in InPrivate and regular sessions",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_ambientauthenticationinprivatemodesenabled_2",
- "displayName": "Enable ambient authentication in guest and regular sessions",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_ambientauthenticationinprivatemodesenabled_3",
- "displayName": "Enable ambient authentication in regular, InPrivate and guest sessions",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_appcacheforceenabled",
- "displayName": "Allows the AppCache feature to be re-enabled, even if it's turned off by default",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_appcacheforceenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_appcacheforceenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem",
- "displayName": "Applications",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app",
- "displayName": "Company Portal",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_application id",
- "displayName": "Company Portal Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_lcid",
- "displayName": "Company Portal LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_company portal.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app",
- "displayName": "Microsoft Defender ATP (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_application id",
- "displayName": "Microsoft Defender ATP Application ID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_lcid",
- "displayName": "Microsoft Defender ATP LCID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_manifestserver",
- "displayName": "Update channel override (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender atp.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app",
- "displayName": "Microsoft Defender",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_application id",
- "displayName": "Microsoft Defender Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_lcid",
- "displayName": "Microsoft Defender LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft defender.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app",
- "displayName": "Microsoft Edge Beta (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_application id",
- "displayName": "Microsoft Edge Beta Application ID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_lcid",
- "displayName": "Microsoft Edge Beta LCID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_manifestserver",
- "displayName": "Update channel override (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge beta.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app",
- "displayName": "Microsoft Edge Canary (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_application id",
- "displayName": "Microsoft Edge Canary Application ID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_lcid",
- "displayName": "Microsoft Edge Canary LCID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_manifestserver",
- "displayName": "Update channel override (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge canary.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app",
- "displayName": "Microsoft Edge Dev (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_application id",
- "displayName": "Microsoft Edge Dev Application ID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_lcid",
- "displayName": "Microsoft Edge Dev LCID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_manifestserver",
- "displayName": "Update channel override (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge dev.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app",
- "displayName": "Microsoft Edge (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_application id",
- "displayName": "Microsoft Edge Application ID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_lcid",
- "displayName": "Microsoft Edge LCID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_manifestserver",
- "displayName": "Update channel override (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft edge.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app",
- "displayName": "Microsoft Excel",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_application id",
- "displayName": "Microsoft Excel Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_lcid",
- "displayName": "Microsoft Excel LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft excel.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app",
- "displayName": "Microsoft OneNote",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_application id",
- "displayName": "Microsoft OneNote Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_lcid",
- "displayName": "Microsoft OneNote LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft onenote.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app",
- "displayName": "Microsoft Outlook",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_application id",
- "displayName": "Microsoft Outlook Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_lcid",
- "displayName": "Microsoft Outlook LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft outlook.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app",
- "displayName": "Microsoft PowerPoint",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_application id",
- "displayName": "Microsoft PowerPoint Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_lcid",
- "displayName": "Microsoft PowerPoint LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft powerpoint.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app",
- "displayName": "Microsoft Remote Desktop (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_application id",
- "displayName": "Microsoft Remote Desktop Application ID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_lcid",
- "displayName": "Microsoft Remote Desktop LCID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_manifestserver",
- "displayName": "Update channel override (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft remote desktop.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams (work or school).app",
- "displayName": "Microsoft Teams (work or school).app",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams (work or school).app_application id",
- "displayName": "Microsoft Teams (work or school) Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams (work or school).app_lcid",
- "displayName": "Microsoft Teams (work or school) LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams (work or school).app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams (work or school).app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams (work or school).app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams (work or school).app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams (work or school).app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams classic.app",
- "displayName": "Microsoft Teams classic",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams classic.app_application id",
- "displayName": "ApplicationsSystem//Applications/Microsoft Teams classic.app/Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams classic.app_lcid",
- "displayName": "Microsoft Teams classic LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams classic.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams classic.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams classic.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams classic.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams classic.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app",
- "displayName": "Microsoft Teams (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_application id",
- "displayName": "Microsoft Teams Application ID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_lcid",
- "displayName": "Microsoft Teams LCID (Deprecated)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_manifestserver",
- "displayName": "Update channel override (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft teams.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app",
- "displayName": "Microsoft Word",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_application id",
- "displayName": "Microsoft Word Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_lcid",
- "displayName": "Microsoft Word LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_microsoft word.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app",
- "displayName": "OneDrive",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_application id",
- "displayName": "OneDrive Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_lcid",
- "displayName": "OneDrive LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_onedrive.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app",
- "displayName": "Skype for Business",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_application id",
- "displayName": "Skype for Business Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_lcid",
- "displayName": "Skype for Business LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_skype for business.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app",
- "displayName": "Windows App",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_application id",
- "displayName": "Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_channelname",
- "displayName": "Channel Name",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_lcid",
- "displayName": "LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_manifestserver",
- "displayName": "Manifest Server",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_applications_windows app.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app",
- "displayName": "Microsoft Auto Update",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_application id",
- "displayName": "Microsoft AutoUpdate Application ID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_channelname",
- "displayName": "Channel Name (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_channelname_2",
- "displayName": "Beta Channel",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_lcid",
- "displayName": "Microsoft AutoUpdate LCID",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_manifestserver",
- "displayName": "Update channel override",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_manifestserver_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_manifestserver_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_manifestserver_2",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_applicationssystem_library_application support_microsoft_mau2.0_microsoft autoupdate.app_manifestserver_3",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_askbeforecloseenabled",
- "displayName": "Get user confirmation before closing a browser window with multiple tabs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_askbeforecloseenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_askbeforecloseenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_audiocaptureallowed",
- "displayName": "Allow or block audio capture",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_audiocaptureallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_audiocaptureallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_audiocaptureallowedurls",
- "displayName": "Sites that can access audio capture devices without requesting permission",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_audiosandboxenabled",
- "displayName": "Allow the audio sandbox to run",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_audiosandboxenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_audiosandboxenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_authnegotiatedelegateallowlist",
- "displayName": "Specifies a list of servers that Microsoft Edge can delegate user credentials to",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_authschemes",
- "displayName": "Supported authentication schemes",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_authserverallowlist",
- "displayName": "Configure list of allowed authentication servers",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_autodiscardsleepingtabsenabled",
- "displayName": "Configure auto discard sleeping tabs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_autodiscardsleepingtabsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autodiscardsleepingtabsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_autofilladdressenabled",
- "displayName": "Enable AutoFill for addresses",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_autofilladdressenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autofilladdressenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_autofillcreditcardenabled",
- "displayName": "Enable AutoFill for credit cards",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_autofillcreditcardenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autofillcreditcardenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_autofillmembershipsenabled",
- "displayName": "Save and fill memberships",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_autofillmembershipsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autofillmembershipsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_autoimportatfirstrun",
- "displayName": "Automatically import another browser's data and settings at first run",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_autoimportatfirstrun_0",
- "displayName": "Automatically imports all supported datatypes and settings from the default browser",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoimportatfirstrun_1",
- "displayName": "Automatically imports all supported datatypes and settings from Internet Explorer",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoimportatfirstrun_2",
- "displayName": "Automatically imports all supported datatypes and settings from Google Chrome",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoimportatfirstrun_3",
- "displayName": "Automatically imports all supported datatypes and settings from Safari",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoimportatfirstrun_4",
- "displayName": "Disables automatic import, and the import section of the first-run experience is skipped",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoimportatfirstrun_5",
- "displayName": "Automatically imports all supported datatypes and settings from Mozilla Firefox",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_autolaunchprotocolscomponentenabled",
- "displayName": "AutoLaunch Protocols Component Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_autolaunchprotocolscomponentenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autolaunchprotocolscomponentenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_automaticallydownloadexternalcontent",
- "displayName": "Download embedded images",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_automaticallydownloadexternalcontent_0",
- "displayName": "Never download images",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_automaticallydownloadexternalcontent_1",
- "displayName": "Automatically download images from users in the address book",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_automaticallydownloadexternalcontent_2",
- "displayName": "Always download images regardless of sender",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_automaticdefinitionupdateenabled",
- "displayName": "Automatic security intelligence updates",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_automaticdefinitionupdateenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_automaticdefinitionupdateenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_automaticdownloadsallowedforurls",
- "displayName": "Allow multiple automatic downloads in quick succession on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_automaticdownloadsblockedforurls",
- "displayName": "Block multiple automatic downloads in quick succession on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_automatichttpsdefault",
- "displayName": "Configure Automatic HTTPS",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_automatichttpsdefault_0",
- "displayName": "Automatic HTTPS functionality is disabled.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_automatichttpsdefault_1",
- "displayName": "(Deprecated) Navigations delivered over HTTP are switched to HTTPS, only on domains likely to support HTTPS.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_automatichttpsdefault_2",
- "displayName": "All navigations delivered over HTTP are switched to HTTPS. Connection errors might occur more often.",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_automaticsamplesubmission",
- "displayName": "Enable / disable automatic sample submissions",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_automaticsamplesubmission_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_automaticsamplesubmission_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_automaticsamplesubmissionconsent",
- "displayName": "Automatic sample submission Consent",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_automaticsamplesubmissionconsent_0",
- "displayName": "none",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_automaticsamplesubmissionconsent_1",
- "displayName": "safe",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_automaticsamplesubmissionconsent_2",
- "displayName": "all",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_automaticuploadbandwidthpercentage",
- "displayName": "Automatic upload bandwidth percentage",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoopenallowedforurls",
- "displayName": "URLs where AutoOpenFileTypes can apply",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoopenfiletypes",
- "displayName": "List of file types that should be automatically opened on download",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoplayallowed",
- "displayName": "Allow media autoplay for websites",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_autoplayallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoplayallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_autoplayallowlist",
- "displayName": "Allow media autoplay on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_autoselectcertificateforurls",
- "displayName": "Automatically select client certificates for these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_backgroundtemplatelistupdatesenabled",
- "displayName": "Enables background updates to the list of available templates for Collections and other features that use templates",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_backgroundtemplatelistupdatesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_backgroundtemplatelistupdatesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_basicauthoverhttpenabled",
- "displayName": "Allow Basic authentication for HTTP",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_basicauthoverhttpenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_basicauthoverhttpenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_behaviormonitoring",
- "displayName": "Behavior Monitoring",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_behaviormonitoring_0",
- "displayName": "enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_behaviormonitoring_1",
- "displayName": "disabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_bingadssuppression",
- "displayName": "Block all ads on Bing search results",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_bingadssuppression_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_bingadssuppression_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_blockexternalextensions",
- "displayName": "Blocks external extensions from being installed",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_blockexternalextensions_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_blockexternalextensions_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_blockexternalsync",
- "displayName": "Block external sync",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_blockexternalsync_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_blockexternalsync_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_blockthirdpartycookies",
- "displayName": "Block third party cookies",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_blockthirdpartycookies_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_blockthirdpartycookies_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_blocktruncatedcookies",
- "displayName": "Block truncated cookies",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_blocktruncatedcookies_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_blocktruncatedcookies_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_browseraddprofileenabled",
- "displayName": "Enable profile creation from the Identity flyout menu or the Settings page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_browseraddprofileenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_browseraddprofileenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_browserguestmodeenabled",
- "displayName": "Enable guest mode",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_browserguestmodeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_browserguestmodeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_browsernetworktimequeriesenabled",
- "displayName": "Allow queries to a Browser Network Time service",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_browsernetworktimequeriesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_browsernetworktimequeriesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_browsersignin",
- "displayName": "Browser sign-in settings",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_browsersignin_0",
- "displayName": "Disable browser sign-in",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_browsersignin_1",
- "displayName": "Enable browser sign-in",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_browsersignin_2",
- "displayName": "Force users to sign-in to use the browser",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_builtincertificateverifierenabled",
- "displayName": "Determines whether the built-in certificate verifier will be used to verify server certificates",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_builtincertificateverifierenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_builtincertificateverifierenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_builtindnsclientenabled",
- "displayName": "Use built-in DNS client",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_builtindnsclientenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_builtindnsclientenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_calendarfirstdayofweek",
- "displayName": "Specify first day of the week",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_calendarfirstdayofweek_0",
- "displayName": "Sunday",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_calendarfirstdayofweek_1",
- "displayName": "Monday",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_calendarfirstdayofweek_2",
- "displayName": "Tuesday",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_calendarfirstdayofweek_3",
- "displayName": "Wednesday",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_calendarfirstdayofweek_4",
- "displayName": "Thursday",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_calendarfirstdayofweek_5",
- "displayName": "Friday",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_calendarfirstdayofweek_6",
- "displayName": "Saturday",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_certificatetransparencyenforcementdisabledforcas",
- "displayName": "Disable Certificate Transparency enforcement for a list of subjectPublicKeyInfo hashes",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_certificatetransparencyenforcementdisabledforlegacycas",
- "displayName": "Disable Certificate Transparency enforcement for a list of legacy certificate authorities",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_certificatetransparencyenforcementdisabledforurls",
- "displayName": "Disable Certificate Transparency enforcement for specific URLs",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_channelname",
- "displayName": "Update channel",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_channelname_0",
- "displayName": "Current Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_channelname_1",
- "displayName": "Current Channel (Preview)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_channelname_2",
- "displayName": "Current Channel (Deferred)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_channelname_3",
- "displayName": "Beta Channel",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_channelname_4",
- "displayName": "Current Channel (Monthly)",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_checkfordefinitionsupdate",
- "displayName": "Check for definitions update",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_checkfordefinitionsupdate_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_checkfordefinitionsupdate_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_clearbrowsingdataonexit",
- "displayName": "Clear browsing data when Microsoft Edge closes",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_clearbrowsingdataonexit_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_clearbrowsingdataonexit_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_clearcachedimagesandfilesonexit",
- "displayName": "Clear cached images and files when Microsoft Edge closes",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_clearcachedimagesandfilesonexit_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_clearcachedimagesandfilesonexit_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_clipboardallowedforurls",
- "displayName": "Allow clipboard use on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_clipboardblockedforurls",
- "displayName": "Block clipboard use on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_cloudblocklevel",
- "displayName": "Cloud Block Level",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_cloudblocklevel_0",
- "displayName": "normal",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_cloudblocklevel_1",
- "displayName": "moderate",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_cloudblocklevel_2",
- "displayName": "high",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_cloudblocklevel_3",
- "displayName": "high_plus",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_cloudblocklevel_4",
- "displayName": "zero_tolerance",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_collectionsservicesandexportsblocklist",
- "displayName": "Block access to a specified list of services and export targets in Collections",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_commandlineflagsecuritywarningsenabled",
- "displayName": "Enable security warnings for command-line flags",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_commandlineflagsecuritywarningsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_commandlineflagsecuritywarningsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_componentupdatesenabled",
- "displayName": "Enable component updates in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_componentupdatesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_componentupdatesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_composeinlineenabled",
- "displayName": "Compose is enabled for writing on the web",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_composeinlineenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_composeinlineenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_compressiondictionarytransportenabled",
- "displayName": "Enable compression dictionary transport support",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_compressiondictionarytransportenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_compressiondictionarytransportenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_configuredonottrack",
- "displayName": "Configure Do Not Track",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_configuredonottrack_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_configuredonottrack_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_configurefriendlyurlformat",
- "displayName": "Configure the default paste format of URLs copied from Microsoft Edge, and determine if additional formats will be available to users",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_configurefriendlyurlformat_0",
- "displayName": "The plain URL without any extra information, such as the page's title. This is the recommended option when this policy is configured. For more information, see the description.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_configurefriendlyurlformat_1",
- "displayName": "Titled Hyperlink: A hyperlink that points to the copied URL, but whose visible text is the title of the destination page. This is the Friendly URL format.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_configurefriendlyurlformat_2",
- "displayName": "Coming soon. If set, behaves the same as 'Plain URL'.",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_configureonlinetexttospeech",
- "displayName": "Configure Online Text To Speech",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_configureonlinetexttospeech_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_configureonlinetexttospeech_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_configureshare",
- "displayName": "Configure the Share experience",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_configureshare_0",
- "displayName": "Allow using the Share experience",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_configureshare_1",
- "displayName": "Don't allow using the Share experience",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_consumerexperience",
- "displayName": "Control sign-in to consumer version",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_consumerexperience_0",
- "displayName": "enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_consumerexperience_1",
- "displayName": "disabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_controldefaultstateofallowextensionfromotherstoressettingenabled",
- "displayName": "Configure default state of Allow extensions from other stores setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_controldefaultstateofallowextensionfromotherstoressettingenabled_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_controldefaultstateofallowextensionfromotherstoressettingenabled_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_cookiesallowedforurls",
- "displayName": "Allow cookies on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_cookiesblockedforurls",
- "displayName": "Block cookies on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_cookiessessiononlyforurls",
- "displayName": "Limit cookies from specific websites to the current session",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_copilotpagecontext",
- "displayName": "Control Copilot access to page context for Microsoft Entra ID profiles",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_copilotpagecontext_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_copilotpagecontext_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_corsnonwildcardrequestheaderssupport",
- "displayName": "CORS non-wildcard request header support enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_corsnonwildcardrequestheaderssupport_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_corsnonwildcardrequestheaderssupport_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_csscustomstatedeprecatedsyntaxenabled",
- "displayName": "Controls whether the deprecated :--foo syntax for CSS custom state is enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_csscustomstatedeprecatedsyntaxenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_csscustomstatedeprecatedsyntaxenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_customhelplink",
- "displayName": "Specify custom help link",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_dailyconfiguration",
- "displayName": "Daily and Hourly quick scan configuration",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_dailyconfiguration_interval",
- "displayName": "Start time",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_dailyconfiguration_timeofday",
- "displayName": "Time of day",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_datalossprevention",
- "displayName": "Use Data Loss Prevention",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_datalossprevention_0",
- "displayName": "enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_datalossprevention_1",
- "displayName": "disabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_dataurlinsvguseenabled",
- "displayName": "Data URL support for SVGUseElement",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_dataurlinsvguseenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_dataurlinsvguseenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultautomaticdownloadssetting",
- "displayName": "Default automatic downloads setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultautomaticdownloadssetting_0",
- "displayName": "Allow all websites to perform automatic downloads",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultautomaticdownloadssetting_1",
- "displayName": "Don't allow any website to perform automatic downloads",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultbrowsersettingenabled",
- "displayName": "Set Microsoft Edge as default browser",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultbrowsersettingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultbrowsersettingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultclipboardsetting",
- "displayName": "Default clipboard site permission",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultclipboardsetting_0",
- "displayName": "Do not allow any site to use the clipboard site permission",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultclipboardsetting_1",
- "displayName": "Allow sites to ask the user to grant the clipboard site permission",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultcookiessetting",
- "displayName": "Configure cookies",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultcookiessetting_0",
- "displayName": "Let all sites create cookies",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultcookiessetting_1",
- "displayName": "Don't let any site create cookies",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultcookiessetting_2",
- "displayName": "Keep cookies for the duration of the session",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultemailaddressordomain",
- "displayName": "Default domain name",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultfilesystemreadguardsetting",
- "displayName": "Control use of the File System API for reading",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultfilesystemreadguardsetting_0",
- "displayName": "Don't allow any site to request read access to files and directories via the File System API",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultfilesystemreadguardsetting_1",
- "displayName": "Allow sites to ask the user to grant read access to files and directories via the File System API",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultfilesystemwriteguardsetting",
- "displayName": "Control use of the File System API for writing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultfilesystemwriteguardsetting_0",
- "displayName": "Don't allow any site to request write access to files and directories",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultfilesystemwriteguardsetting_1",
- "displayName": "Allow sites to ask the user to grant write access to files and directories",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultgeolocationsetting",
- "displayName": "Default geolocation setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultgeolocationsetting_0",
- "displayName": "Allow sites to track users' physical location",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultgeolocationsetting_1",
- "displayName": "Don't allow any site to track users' physical location",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultgeolocationsetting_2",
- "displayName": "Ask whenever a site wants to track users' physical location",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultimagessetting",
- "displayName": "Default images setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultimagessetting_0",
- "displayName": "Allow all sites to show all images",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultimagessetting_1",
- "displayName": "Don't allow any site to show images",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultinsecurecontentsetting",
- "displayName": "Control use of insecure content exceptions",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultinsecurecontentsetting_0",
- "displayName": "Do not allow any site to load mixed content",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultinsecurecontentsetting_1",
- "displayName": "Allow users to add exceptions to allow mixed content",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultjavascriptjitsetting",
- "displayName": "Control use of JavaScript JIT",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultjavascriptjitsetting_0",
- "displayName": "Allow any site to run JavaScript JIT",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultjavascriptjitsetting_1",
- "displayName": "Do not allow any site to run JavaScript JIT",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultjavascriptsetting",
- "displayName": "Default JavaScript setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultjavascriptsetting_0",
- "displayName": "Allow all sites to run JavaScript",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultjavascriptsetting_1",
- "displayName": "Don't allow any site to run JavaScript",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultnotificationssetting",
- "displayName": "Default notification setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultnotificationssetting_0",
- "displayName": "Allow sites to show desktop notifications",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultnotificationssetting_1",
- "displayName": "Don't allow any site to show desktop notifications",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultnotificationssetting_2",
- "displayName": "Ask every time a site wants to show desktop notifications",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultpluginssetting",
- "displayName": "Default Adobe Flash setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultpluginssetting_0",
- "displayName": "Block the Adobe Flash plugin",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultpluginssetting_1",
- "displayName": "Click to play",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultpopupssetting",
- "displayName": "Default pop-up window setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultpopupssetting_0",
- "displayName": "Allow all sites to show pop-ups",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultpopupssetting_1",
- "displayName": "Do not allow any site to show popups",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultprinterselection",
- "displayName": "Default printer selection rules",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchprovidercontextmenuaccessallowed",
- "displayName": "Allow default search provider context menu search access",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultsearchprovidercontextmenuaccessallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchprovidercontextmenuaccessallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchproviderenabled",
- "displayName": "Enable the default search provider",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultsearchproviderenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchproviderenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchproviderencodings",
- "displayName": "Default search provider encodings",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchproviderimageurl",
- "displayName": "Specifies the search-by-image feature for the default search provider",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchproviderimageurlpostparams",
- "displayName": "Parameters for an image URL that uses POST",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchproviderkeyword",
- "displayName": "Default search provider keyword",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchprovidername",
- "displayName": "Default search provider name",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchprovidersearchurl",
- "displayName": "Default search provider search URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsearchprovidersuggesturl",
- "displayName": "Default search provider URL for suggestions",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsensorssetting",
- "displayName": "Default sensors setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultsensorssetting_0",
- "displayName": "Allow sites to access sensors",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultsensorssetting_1",
- "displayName": "Do not allow any site to access sensors",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultserialguardsetting",
- "displayName": "Control use of the Serial API",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultserialguardsetting_0",
- "displayName": "Do not allow any site to request access to serial ports via the Serial API",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultserialguardsetting_1",
- "displayName": "Allow sites to ask for user permission to access a serial port",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultshareadditionalosregionsetting",
- "displayName": "Set the default \"share additional operating system region\" setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultshareadditionalosregionsetting_0",
- "displayName": "Limited",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultshareadditionalosregionsetting_1",
- "displayName": "Always share the OS Regional format",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultshareadditionalosregionsetting_2",
- "displayName": "Never share the OS Regional format",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultstolocalopensave",
- "displayName": "Default to local files for open/save",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultstolocalopensave_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultstolocalopensave_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultthirdpartystoragepartitioningsetting",
- "displayName": "Default setting for third-party storage partitioning",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultthirdpartystoragepartitioningsetting_0",
- "displayName": "Let third-party storage partitioning to be enabled.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultthirdpartystoragepartitioningsetting_1",
- "displayName": "Block third-party storage partitioning from being enabled.",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultweatherlocation",
- "displayName": "Default weather location",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultwebbluetoothguardsetting",
- "displayName": "Control use of the Web Bluetooth API",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultwebbluetoothguardsetting_0",
- "displayName": "Do not allow any site to request access to Bluetooth devices via the Web Bluetooth API",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultwebbluetoothguardsetting_1",
- "displayName": "Allow sites to ask the user to grant access to a nearby Bluetooth device",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultwebhidguardsetting",
- "displayName": "Control use of the WebHID API",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultwebhidguardsetting_0",
- "displayName": "Do not allow any site to request access to HID devices via the WebHID API",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultwebhidguardsetting_1",
- "displayName": "Allow sites to ask the user to grant access to a HID device",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultwebusbguardsetting",
- "displayName": "Control use of the WebUSB API",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultwebusbguardsetting_0",
- "displayName": "Do not allow any site to request access to USB devices via the WebUSB API",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultwebusbguardsetting_1",
- "displayName": "Allow sites to ask the user to grant access to a connected USB device",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_defaultwindowmanagementsetting",
- "displayName": "Default Window Management permission setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_defaultwindowmanagementsetting_0",
- "displayName": "Denies the Window Management permission on all sites by default",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_defaultwindowmanagementsetting_1",
- "displayName": "Ask every time a site wants obtain the Window Management permission",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_definitionupdatedue",
- "displayName": "Security intelligence update due (in days)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_definitionupdatesinterval",
- "displayName": "Security intelligence update interval (in seconds)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_developertoolsavailability",
- "displayName": "Control where developer tools can be used",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_developertoolsavailability_0",
- "displayName": "Block the developer tools on extensions installed by enterprise policy, allow in other contexts",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_developertoolsavailability_1",
- "displayName": "Allow using the developer tools",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_developertoolsavailability_2",
- "displayName": "Don't allow using the developer tools",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_diagnosticdata",
- "displayName": "Send required and optional diagnostic data about browser usage",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_diagnosticdata_0",
- "displayName": "Off (Not recommended)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_diagnosticdata_1",
- "displayName": "Required data",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_diagnosticdata_2",
- "displayName": "Optional data",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_diagnosticdatatypepreference",
- "displayName": "Diagnostic data level",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_diagnosticdatatypepreference_0",
- "displayName": "Required data only",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_diagnosticdatatypepreference_1",
- "displayName": "Required and Optional data",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_diagnosticdatatypepreference_2",
- "displayName": "Do not send data",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_diagnosticlevel",
- "displayName": "Diagnostic collection level",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_diagnosticlevel_0",
- "displayName": "optional",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_diagnosticlevel_1",
- "displayName": "required",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disable3dapis",
- "displayName": "Disable support for 3D graphics APIs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disable3dapis_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disable3dapis_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableauthnegotiatecnamelookup",
- "displayName": "Disable CNAME lookup when negotiating Kerberos authentication",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableauthnegotiatecnamelookup_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableauthnegotiatecnamelookup_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableautoconfig",
- "displayName": "Disable automatic sign in",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableautoconfig_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableautoconfig_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablecloudfonts",
- "displayName": "Disable cloud fonts",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablecloudfonts_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablecloudfonts_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablednsovertcpparsing",
- "displayName": "Disable DNS over TCP parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablednsovertcpparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablednsovertcpparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablednsparsing",
- "displayName": "Disable DNS parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablednsparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablednsparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disabledonotforward",
- "displayName": "Disable 'Do Not Forward' options",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disabledonotforward_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disabledonotforward_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableencryptonly",
- "displayName": "Disable Microsoft 365 encryption options",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableencryptonly_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableencryptonly_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableexport",
- "displayName": "Disable export to OLM files",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableexport_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableexport_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableftpparsing",
- "displayName": "Disable FTP parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableftpparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableftpparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablehttpparsing",
- "displayName": "Disable HTTP parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablehttpparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablehttpparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablehydrationtoast",
- "displayName": "Disable download toasts",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablehydrationtoast_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablehydrationtoast_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableicmpparsing",
- "displayName": "Disable ICMP parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableicmpparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableicmpparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableimport",
- "displayName": "Disable import from OLM and PST files",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableimport_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableimport_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableinboundconnectionfiltering",
- "displayName": "Disable inbound connection filtering",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableinboundconnectionfiltering_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableinboundconnectionfiltering_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableinsidercheckbox",
- "displayName": "Disable Office Insider membership",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableinsidercheckbox_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableinsidercheckbox_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablepersonalsync",
- "displayName": "Disable personal accounts",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablepersonalsync_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablepersonalsync_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablerdpparsing",
- "displayName": "Disable RDP parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablerdpparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablerdpparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablerespondtomeetingwithoutresponse",
- "displayName": "Disable 'Do not send response'",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablerespondtomeetingwithoutresponse_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablerespondtomeetingwithoutresponse_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablescreenshots",
- "displayName": "Disable taking screenshots",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablescreenshots_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablescreenshots_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablesignatures",
- "displayName": "Disable email signatures",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablesignatures_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablesignatures_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableskypemeeting",
- "displayName": "Disable Skype for Business meeting support",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableskypemeeting_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableskypemeeting_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablesmimecompose",
- "displayName": "Disable S/MIME",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablesmimecompose_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablesmimecompose_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablesmtpparsing",
- "displayName": "Disable SMTP parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablesmtpparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablesmtpparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablesshparsing",
- "displayName": "Disable SSH parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablesshparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablesshparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disableteamsmeeting",
- "displayName": "Disable Microsoft Teams meeting support",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disableteamsmeeting_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disableteamsmeeting_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disabletlsparsing",
- "displayName": "Disable TLS parsing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disabletlsparsing_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disabletlsparsing_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disabletutorial",
- "displayName": "Disable tutorial",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disabletutorial_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disabletutorial_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasicexternaldylibs",
- "displayName": "Prevent Visual Basic macros from using external dynamic libraries",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasicexternaldylibs_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasicexternaldylibs_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasicmacscript",
- "displayName": "Prevent Visual Basic macros from using legacy MacScript",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasicmacscript_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasicmacscript_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasictobindtopopen",
- "displayName": "Prevent Visual Basic macros from using pipes to communicate",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasictobindtopopen_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_disablevisualbasictobindtopopen_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_disallowedthreatactions",
- "displayName": "Disallowed threat actions",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_diskcachedir",
- "displayName": "Set disk cache directory",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_diskcachesize",
- "displayName": "Set disk cache size, in bytes",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_dnsinterceptionchecksenabled",
- "displayName": "DNS interception checks enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_dnsinterceptionchecksenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_dnsinterceptionchecksenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_dnsoverhttpsmode",
- "displayName": "Control the mode of DNS-over-HTTPS",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_dnsoverhttpsmode_0",
- "displayName": "Enable DNS-over-HTTPS with insecure fallback",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_dnsoverhttpsmode_1",
- "displayName": "Disable DNS-over-HTTPS",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_dnsoverhttpsmode_2",
- "displayName": "Enable DNS-over-HTTPS without insecure fallback",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_dnsoverhttpstemplates",
- "displayName": "Specify URI template of desired DNS-over-HTTPS resolver",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_doubleclickclosetabenabled",
- "displayName": "Double Click feature in Microsoft Edge enabled (only available in China)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_doubleclickclosetabenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_doubleclickclosetabenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_downloadbandwidthlimited",
- "displayName": "Set maximum download throughput",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_downloaddirectory",
- "displayName": "Set download directory",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_downloadrestrictions",
- "displayName": "Allow download restrictions",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_downloadrestrictions_0",
- "displayName": "No special restrictions",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_downloadrestrictions_1",
- "displayName": "Block dangerous downloads",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_downloadrestrictions_2",
- "displayName": "Block potentially dangerous downloads",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_downloadrestrictions_3",
- "displayName": "Block all downloads",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_downloadrestrictions_4",
- "displayName": "Block malicious downloads",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_earlypreview",
- "displayName": "Enable / disable early preview",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_earlypreview_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_earlypreview_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgeassetdeliveryserviceenabled",
- "displayName": "Allow features to download assets from the Asset Delivery Service",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgeassetdeliveryserviceenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgeassetdeliveryserviceenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgecollectionsenabled",
- "displayName": "Enable the Collections feature",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgecollectionsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgecollectionsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgedisabledialprotocolforcastdiscovery",
- "displayName": "Disable DIAL protocol for cast device discovery",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgedisabledialprotocolforcastdiscovery_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgedisabledialprotocolforcastdiscovery_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgeedropenabled",
- "displayName": "Enable Drop feature in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgeedropenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgeedropenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgeentracopilotpagecontext",
- "displayName": "Control access to page content for Entra ID Profiles accessing Microsoft Copilot with Enterprise Data Protection (EDP) from the Microsoft Edge sidebar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgeentracopilotpagecontext_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgeentracopilotpagecontext_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgemanagementextensionsfeedbackenabled",
- "displayName": "Microsoft Edge management extensions feedback enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgemanagementextensionsfeedbackenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgemanagementextensionsfeedbackenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgemanagementpolicyoverridesplatformpolicy",
- "displayName": "Microsoft Edge management service policy overrides platform policy.",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgemanagementpolicyoverridesplatformpolicy_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgemanagementpolicyoverridesplatformpolicy_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgemanagementuserpolicyoverridescloudmachinepolicy",
- "displayName": "Allow cloud-based Microsoft Edge management service user policies to override local user policies.",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgemanagementuserpolicyoverridescloudmachinepolicy_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgemanagementuserpolicyoverridescloudmachinepolicy_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgeshoppingassistantenabled",
- "displayName": "Shopping in Microsoft Edge Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgeshoppingassistantenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgeshoppingassistantenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgesidebarappurlhostallowlist",
- "displayName": "Allow specific apps to be opened in Microsoft Edge sidebar",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgesidebarappurlhostblocklist",
- "displayName": "Control which apps cannot be opened in Microsoft Edge sidebar",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgesidebarcustomizeenabled",
- "displayName": "Enable sidebar customize",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgesidebarcustomizeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgesidebarcustomizeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgewalletetreeenabled",
- "displayName": "Edge Wallet E-Tree Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgewalletetreeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgewalletetreeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_edgeworkspacesenabled",
- "displayName": "Enable Workspaces",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_edgeworkspacesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_edgeworkspacesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_editfavoritesenabled",
- "displayName": "Allows users to edit favorites",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_editfavoritesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_editfavoritesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymode",
- "displayName": "Configure when efficiency mode should become active",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_efficiencymode_0",
- "displayName": "Efficiency mode is always active",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymode_1",
- "displayName": "Efficiency mode is never active",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymode_2",
- "displayName": "Efficiency mode is active when the device is unplugged",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymode_3",
- "displayName": "Efficiency mode is active when the device is unplugged and the battery is low",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymode_4",
- "displayName": "When the device is unplugged, efficiency mode takes moderate steps to save battery. When the device is unplugged and the battery is low, efficiency mode takes additional steps to save battery.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymode_5",
- "displayName": "When the device is unplugged or unplugged and the battery is low, efficiency mode takes additional steps to save battery.",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymodeenabled",
- "displayName": "Efficiency mode enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_efficiencymodeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymodeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymodeonpowerenabled",
- "displayName": "Enable efficiency mode when the device is connected to a power source",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_efficiencymodeonpowerenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_efficiencymodeonpowerenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enableallocsiclients",
- "displayName": "Enable simultaneous edits for Office apps",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enableallocsiclients_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enableallocsiclients_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enableauthnegotiateport",
- "displayName": "Include non-standard port in Kerberos SPN",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enableauthnegotiateport_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enableauthnegotiateport_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enablebackgroundaccessibilitychecker",
- "displayName": "Background accessibility checking",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enablebackgroundaccessibilitychecker_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablebackgroundaccessibilitychecker_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enablecheckforupdatesbutton",
- "displayName": "Enable check for updates",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enablecheckforupdatesbutton_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablecheckforupdatesbutton_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enabled",
- "displayName": "Enable / disable cloud delivered protection",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enabledeprecatedwebplatformfeatures",
- "displayName": "Re-enable deprecated web platform features for a limited time",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_enabledomainactionsdownload",
- "displayName": "Enable Domain Actions Download from Microsoft",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enabledomainactionsdownload_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enabledomainactionsdownload_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enablefilehashcomputation",
- "displayName": "Enable file hash computation",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enablefilehashcomputation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablefilehashcomputation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enablemediarouter",
- "displayName": "Enable Google Cast",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enablemediarouter_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablemediarouter_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enablenewoutlook",
- "displayName": "Enable New Outlook",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enablenewoutlook_0",
- "displayName": "Classic Outlook only",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablenewoutlook_1",
- "displayName": "Default to Classic Outlook. Users may switch to New Outlook",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablenewoutlook_2",
- "displayName": "Default to New Outlook. Users may revert to Classic Outlook",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablenewoutlook_3",
- "displayName": "New Outlook only",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enableodignore",
- "displayName": "Ignore named files",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_enableonlinerevocationchecks",
- "displayName": "Enable online OCSP/CRL checks",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enableonlinerevocationchecks_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enableonlinerevocationchecks_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enablerealtimeprotection",
- "displayName": "Enable real-time protection (deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enablerealtimeprotection_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablerealtimeprotection_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enablesetwarntoblock",
- "displayName": "Enable set warn to block",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enablesetwarntoblock_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablesetwarntoblock_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enablesha1forlocalanchors",
- "displayName": "Allow certificates signed using SHA-1 when issued by local trust anchors",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enablesha1forlocalanchors_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enablesha1forlocalanchors_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_encryptedclienthelloenabled",
- "displayName": "TLS Encrypted ClientHello Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_encryptedclienthelloenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_encryptedclienthelloenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel",
- "displayName": "Enforcement level",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_0",
- "displayName": "disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_1",
- "displayName": "audit",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_2",
- "displayName": "block",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_antivirusengine",
- "displayName": "Enforcement level",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_antivirusengine_0",
- "displayName": "passive",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_antivirusengine_1",
- "displayName": "on_demand",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_antivirusengine_2",
- "displayName": "real_time",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_tamperprotection",
- "displayName": "Enforcement level",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_tamperprotection_0",
- "displayName": "disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_tamperprotection_1",
- "displayName": "audit",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enforcementlevel_tamperprotection_2",
- "displayName": "block",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymode",
- "displayName": "Enhance the security state in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymode_0",
- "displayName": "Standard mode",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymode_1",
- "displayName": "Balanced mode",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymode_2",
- "displayName": "Strict mode",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymode_3",
- "displayName": "(Deprecated) Basic mode",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymodebypasslistdomains",
- "displayName": "Configure the list of domains for which enhance security mode will not be enforced",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymodeenforcelistdomains",
- "displayName": "Configure the list of domains for which enhance security mode will always be enforced",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymodeindicatoruienabled",
- "displayName": "Manage the indicator UI of the Enhanced Security Mode (ESM) feature in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymodeindicatoruienabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymodeindicatoruienabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymodeoptoutuxenabled",
- "displayName": "Manage opt-out user experience for Enhanced Security Mode (ESM) in Microsoft Edge (deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymodeoptoutuxenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enhancesecuritymodeoptoutuxenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_enterprisehardwareplatformapienabled",
- "displayName": "Allow managed extensions to use the Enterprise Hardware Platform API",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_enterprisehardwareplatformapienabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_enterprisehardwareplatformapienabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions",
- "displayName": "Scan exclusions",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_$type",
- "displayName": "Type",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_$type_0",
- "displayName": "Path",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_$type_1",
- "displayName": "File extension",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_$type_2",
- "displayName": "File name",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_args_tamperprotection",
- "displayName": "Process's arguments",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_extension",
- "displayName": "File extension",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_isdirectory",
- "displayName": "Directory (selected) or file (not selected)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_isdirectory_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_isdirectory_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_name",
- "displayName": "Name",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_path",
- "displayName": "Path",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_path_tamperprotection",
- "displayName": "Process path",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_signingid_tamperprotection",
- "displayName": "Process's Signing Identifier",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_item_teamid_tamperprotection",
- "displayName": "Process's TeamIdentifier",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusions_tamperprotection",
- "displayName": "Process exclusions",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusionsmergepolicy",
- "displayName": "Exclusions merge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_exclusionsmergepolicy_0",
- "displayName": "merge",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_exclusionsmergepolicy_1",
- "displayName": "admin_only",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_exemptdomainfiletypepairsfromfiletypedownloadwarnings",
- "displayName": "Disable download file type extension-based warnings for specified file types on domains",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_experimentationandconfigurationservicecontrol",
- "displayName": "Control communication with the Experimentation and Configuration Service",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_experimentationandconfigurationservicecontrol_0",
- "displayName": "Retrieve configurations and experiments",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_experimentationandconfigurationservicecontrol_1",
- "displayName": "Retrieve configurations only",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_experimentationandconfigurationservicecontrol_2",
- "displayName": "Disable communication with the Experimentation and Configuration Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_explicitlyallowednetworkports",
- "displayName": "Explicitly allowed network ports",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_extendedlogging",
- "displayName": "Enable extended logging",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_extendedlogging_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_extendedlogging_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_extensionallowedtypes",
- "displayName": "Configure allowed extension types",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensiondevelopermodesettings",
- "displayName": "Control the availability of developer mode on extensions page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_extensiondevelopermodesettings_0",
- "displayName": "Allow the usage of developer mode on extensions page",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensiondevelopermodesettings_1",
- "displayName": "Do not allow the usage of developer mode on extensions page",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_extensionextendedbackgroundlifetimeforportconnectionstourls",
- "displayName": "Configure a list of origins that grant an extended background lifetime to connecting extensions.",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensioninstallallowlist",
- "displayName": "Allow specific extensions to be installed",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensioninstallblocklist",
- "displayName": "Control which extensions cannot be installed",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensioninstallforcelist",
- "displayName": "Control which extensions are installed silently",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensioninstallsources",
- "displayName": "Configure extension and user script install sources",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensioninstalltypeblocklist",
- "displayName": "Blocklist for extension install types",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensionmanifestv2availability",
- "displayName": "Control Manifest v2 extension availability",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_extensionmanifestv2availability_0",
- "displayName": "Default browser behavior",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensionmanifestv2availability_1",
- "displayName": "Manifest v2 is disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensionmanifestv2availability_2",
- "displayName": "Manifest v2 is enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensionmanifestv2availability_3",
- "displayName": "Manifest v2 is enabled for forced extensions only",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_extensionsperformancedetectorenabled",
- "displayName": "Extensions Performance Detector enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_extensionsperformancedetectorenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_extensionsperformancedetectorenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_externalprotocoldialogshowalwaysopencheckbox",
- "displayName": "Show an \"Always open\" checkbox in external protocol dialog",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_externalprotocoldialogshowalwaysopencheckbox_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_externalprotocoldialogshowalwaysopencheckbox_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_familysafetysettingsenabled",
- "displayName": "Allow users to configure Family safety",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_familysafetysettingsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_familysafetysettingsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_favoritesbarenabled",
- "displayName": "Enable favorites bar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_favoritesbarenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_favoritesbarenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_featureflagoverridescontrol",
- "displayName": "Configure users ability to override feature flags",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_featureflagoverridescontrol_0",
- "displayName": "Prevent users from overriding feature flags",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_featureflagoverridescontrol_1",
- "displayName": "Allow users to override feature flags",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_featureflagoverridescontrol_2",
- "displayName": "Allow users to override feature flags using command line arguments only",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_fetchkeepalivedurationsecondsonshutdown",
- "displayName": "Fetch keepalive duration on shutdown",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_fileordirectorypickerwithoutgestureallowedfororigins",
- "displayName": "Allow file or directory picker APIs to be called without prior user gesture",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_filesondemandenabled",
- "displayName": "Enable Files On-Demand",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_filesondemandenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_filesondemandenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_filesystemreadaskforurls",
- "displayName": "Allow read access via the File System API on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_filesystemreadblockedforurls",
- "displayName": "Block read access via the File System API on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_filesystemwriteaskforurls",
- "displayName": "Allow write access to files and directories on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_filesystemwriteblockedforurls",
- "displayName": "Block write access to files and directories on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_forcebingsafesearch",
- "displayName": "Enforce Bing SafeSearch",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_forcebingsafesearch_0",
- "displayName": "Don't configure search restrictions in Bing",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forcebingsafesearch_1",
- "displayName": "Configure moderate search restrictions in Bing",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forcebingsafesearch_2",
- "displayName": "Configure strict search restrictions in Bing",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_forcecertificatepromptsonmultiplematches",
- "displayName": "Configure whether Microsoft Edge should automatically select a certificate when there are multiple certificate matches for a site configured with \"AutoSelectCertificateForUrls\"",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_forcecertificatepromptsonmultiplematches_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forcecertificatepromptsonmultiplematches_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_forceephemeralprofiles",
- "displayName": "Enable use of ephemeral profiles",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_forceephemeralprofiles_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forceephemeralprofiles_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_forcegooglesafesearch",
- "displayName": "Enforce Google SafeSearch",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_forcegooglesafesearch_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forcegooglesafesearch_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_forcelegacydefaultreferrerpolicy",
- "displayName": "Use a default referrer policy of no-referrer-when-downgrade.",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_forcelegacydefaultreferrerpolicy_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forcelegacydefaultreferrerpolicy_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_forcepermissionpolicyunloaddefaultenabled",
- "displayName": "Controls whether unload event handlers can be disabled.",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_forcepermissionpolicyunloaddefaultenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forcepermissionpolicyunloaddefaultenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_forcesync",
- "displayName": "Force synchronization of browser data and do not show the sync consent prompt",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_forcesync_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forcesync_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_forcesynctypes",
- "displayName": "Configure the list of types that are included for synchronization",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_forceyoutuberestrict",
- "displayName": "Force minimum YouTube Restricted Mode",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_forceyoutuberestrict_0",
- "displayName": "Do not enforce Restricted Mode on YouTube",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forceyoutuberestrict_1",
- "displayName": "Enforce at least Moderate Restricted Mode on YouTube",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_forceyoutuberestrict_2",
- "displayName": "Enforce Strict Restricted Mode for YouTube",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_globallyscopehttpauthcacheenabled",
- "displayName": "Enable globally scoped HTTP auth cache",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_globallyscopehttpauthcacheenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_globallyscopehttpauthcacheenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_gotointranetsiteforsinglewordentryinaddressbar",
- "displayName": "Force direct intranet site navigation instead of searching on single word entries in the Address Bar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_gotointranetsiteforsinglewordentryinaddressbar_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_gotointranetsiteforsinglewordentryinaddressbar_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_groupids",
- "displayName": "Group identifier",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_guardagainstappmodification",
- "displayName": "Guard against app modification",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_guardagainstappmodification_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_guardagainstappmodification_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_guidedswitchenabled",
- "displayName": "Guided Switch Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_guidedswitchenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_guidedswitchenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_hardwareaccelerationmodeenabled",
- "displayName": "Use hardware acceleration when available",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_hardwareaccelerationmodeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_hardwareaccelerationmodeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_headlessmodeenabled",
- "displayName": "Control use of the Headless Mode",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_headlessmodeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_headlessmodeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_hidedockicon",
- "displayName": "Hide dock icon",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_hidedockicon_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_hidedockicon_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_hidefirstrunexperience",
- "displayName": "Hide the First-run experience and splash screen",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_hidefirstrunexperience_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_hidefirstrunexperience_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_hidefoldersonmycomputerrootinfolderlist",
- "displayName": "Hide On My Computer folders",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_hidefoldersonmycomputerrootinfolderlist_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_hidefoldersonmycomputerrootinfolderlist_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_hidestatusmenuicon",
- "displayName": "Show / hide status menu icon",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_hidestatusmenuicon_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_hidestatusmenuicon_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_homepageisnewtabpage",
- "displayName": "Set the new tab page as the home page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_homepageisnewtabpage_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_homepageisnewtabpage_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_homepagelocation",
- "displayName": "Configure the home page URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_howtocheck",
- "displayName": "Enable AutoUpdate",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_howtocheck_0",
- "displayName": "True",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_howtocheck_1",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_howtocheck_2",
- "displayName": "Manual Check",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_hstspolicybypasslist",
- "displayName": "Configure the list of names that will bypass the HSTS policy check",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_httpallowlist",
- "displayName": "HTTP Allowlist",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_hubssidebarenabled",
- "displayName": "Show Hubs Sidebar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_hubssidebarenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_hubssidebarenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_ignoreexclusions",
- "displayName": "Ignore exclusions",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_ignoreexclusions_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_ignoreexclusions_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_imagesallowedforurls",
- "displayName": "Allow images on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_imagesblockedforurls",
- "displayName": "Block images on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_importautofillformdata",
- "displayName": "Allow importing of autofill form data",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importautofillformdata_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importautofillformdata_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importbrowsersettings",
- "displayName": "Allow importing of browser settings",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importbrowsersettings_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importbrowsersettings_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importcookies",
- "displayName": "Allow importing of Cookies",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importcookies_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importcookies_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importextensions",
- "displayName": "Allow importing of extensions",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importextensions_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importextensions_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importfavorites",
- "displayName": "Allow importing of favorites",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importfavorites_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importfavorites_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importhistory",
- "displayName": "Allow importing of browsing history",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importhistory_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importhistory_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importhomepage",
- "displayName": "Allow importing of home page settings",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importhomepage_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importhomepage_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importopentabs",
- "displayName": "Allow importing of open tabs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importopentabs_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importopentabs_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importpaymentinfo",
- "displayName": "Allow importing of payment info",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importpaymentinfo_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importpaymentinfo_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importsavedpasswords",
- "displayName": "Allow importing of saved passwords",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importsavedpasswords_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importsavedpasswords_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importsearchengine",
- "displayName": "Allow importing of search engine settings",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importsearchengine_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importsearchengine_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_importshortcuts",
- "displayName": "Allow importing of shortcuts",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_importshortcuts_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_importshortcuts_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_inappsupportenabled",
- "displayName": "In-app support Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_inappsupportenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_inappsupportenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_inprivatemodeavailability",
- "displayName": "Configure InPrivate mode availability",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_inprivatemodeavailability_0",
- "displayName": "InPrivate mode available",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_inprivatemodeavailability_1",
- "displayName": "InPrivate mode disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_inprivatemodeavailability_2",
- "displayName": "InPrivate mode forced",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_insecurecontentallowedforurls",
- "displayName": "Allow insecure content on specified sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_insecurecontentblockedforurls",
- "displayName": "Block insecure content on specified sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_insecureformswarningsenabled",
- "displayName": "Enable warnings for insecure forms",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_insecureformswarningsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_insecureformswarningsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_insecureprivatenetworkrequestsallowed",
- "displayName": "Specifies whether to allow websites to make requests to any network endpoint in an insecure manner.",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_insecureprivatenetworkrequestsallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_insecureprivatenetworkrequestsallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_insecureprivatenetworkrequestsallowedforurls",
- "displayName": "Allow the listed sites to make requests to more-private network endpoints from in an insecure manner",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_intensivewakeupthrottlingenabled",
- "displayName": "Control the IntensiveWakeUpThrottling feature",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_intensivewakeupthrottlingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_intensivewakeupthrottlingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_intranetredirectbehavior",
- "displayName": "Intranet Redirection Behavior",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_intranetredirectbehavior_0",
- "displayName": "Use default browser behavior.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_intranetredirectbehavior_1",
- "displayName": "Disable DNS interception checks and did-you-mean \"http://intranetsite/\" infobars.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_intranetredirectbehavior_2",
- "displayName": "Disable DNS interception checks; allow did-you-mean \"http://intranetsite/\" infobars.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_intranetredirectbehavior_3",
- "displayName": "Allow DNS interception checks and did-you-mean \"http://intranetsite/\" infobars.",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_isolateorigins",
- "displayName": "Enable site isolation for specific origins",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_javascriptallowedforurls",
- "displayName": "Allow JavaScript on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_javascriptblockedforurls",
- "displayName": "Block JavaScript on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_javascriptjitallowedforsites",
- "displayName": "Allow JavaScript to use JIT on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_javascriptjitblockedforsites",
- "displayName": "Block JavaScript from using JIT on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_keyboardfocusablescrollersenabled",
- "displayName": "Enable keyboard focusable scrollers",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_keyboardfocusablescrollersenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_keyboardfocusablescrollersenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_kfmblockoptin",
- "displayName": "Prevent users from using the Folder Backup feature (Known Folder Move)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_kfmblockoptin_0",
- "displayName": "No prevention",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_kfmblockoptin_1",
- "displayName": "Prevent Folder Backup",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_kfmblockoptin_2",
- "displayName": "Prevent Folder Backup and Redirect to local device",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_kfmblockoptout",
- "displayName": "Force users to use the Folder Backup feature (Known Folder Move)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_kfmblockoptout_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_kfmblockoptout_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_kfmoptinwithwizard",
- "displayName": "Prompt users to enable the Folder Backup feature (Known Folder Move)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptin",
- "displayName": "Automatically and silently enable the Folder Backup feature (Known Folder Move)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptindesktop",
- "displayName": "Include ~/Desktop in Folder Backup (Known Folder Move)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptindesktop_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptindesktop_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptindocuments",
- "displayName": "Include ~/Documents in Folder Backup (Known Folder Move)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptindocuments_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptindocuments_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptinwithnotification",
- "displayName": "Display a notification to users once their folders have been redirected",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptinwithnotification_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_kfmsilentoptinwithnotification_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_kioskaddressbareditingenabled",
- "displayName": "Configure address bar editing for kiosk mode public browsing experience",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_kioskaddressbareditingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_kioskaddressbareditingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_legacysamesitecookiebehaviorenabled",
- "displayName": "Enable default legacy SameSite cookie behavior setting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_legacysamesitecookiebehaviorenabled_0",
- "displayName": "Revert to legacy SameSite behavior for cookies on all sites",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_legacysamesitecookiebehaviorenabled_1",
- "displayName": "Use SameSite-by-default behavior for cookies on all sites",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_legacysamesitecookiebehaviorenabledfordomainlist",
- "displayName": "Revert to legacy SameSite behavior for cookies on specified sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_linkedaccountenabled",
- "displayName": "Enable the linked account feature",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_linkedaccountenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_linkedaccountenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_localprovidersenabled",
- "displayName": "Allow suggestions from local providers",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_localprovidersenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_localprovidersenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_lowpriorityscheduledscan",
- "displayName": "Low priority scheduled scan",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_lowpriorityscheduledscan_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_lowpriorityscheduledscan_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines",
- "displayName": "Managed Search Engines",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_allow_search_engine_discovery",
- "displayName": "Allow search engine discovery",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_allow_search_engine_discovery_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_allow_search_engine_discovery_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_encoding",
- "displayName": "Encoding",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_image_search_post_params",
- "displayName": "Image search post params",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_image_search_url",
- "displayName": "Image search URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_is_default",
- "displayName": "Is default",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_is_default_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_is_default_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_keyword",
- "displayName": "Keyword",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_name",
- "displayName": "Name",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_search_url",
- "displayName": "Search URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_managedsearchengines_item_suggest_url",
- "displayName": "Suggest URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver",
- "displayName": "Deferred updates (Deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_manifestserver_0",
- "displayName": "Defer 3 days",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_1",
- "displayName": "Defer 7 days",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_2",
- "displayName": "Defer 14 days",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_3",
- "displayName": "Defer 21 days",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_4",
- "displayName": "Defer 28 days",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_5",
- "displayName": "Defer 45 days",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_6",
- "displayName": "Pause at 16.64 (August 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_7",
- "displayName": "Pause at 16.63 (July 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_8",
- "displayName": "Pause at 16.62 (June 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_9",
- "displayName": "Pause at 16.61 (May 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_10",
- "displayName": "Pause at 16.60 (April 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_11",
- "displayName": "Pause at 16.59 (March 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_12",
- "displayName": "Pause at 16.58 (February 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_13",
- "displayName": "Pause at 16.57 (January 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_14",
- "displayName": "Pause at 16.56 (December 2021 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_15",
- "displayName": "Pause at 16.55 (November 2021 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_16",
- "displayName": "Pause at 16.54 (October 2021 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_17",
- "displayName": "Pause at 16.53 (September 2021 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_18",
- "displayName": "Pause at 16.52 (August 2021 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_19",
- "displayName": "Pause at 16.51 (July 2021 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_20",
- "displayName": "Pause at 16.80 (December 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_21",
- "displayName": "Pause at 16.79 (November 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_22",
- "displayName": "Pause at 16.78 (October 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_23",
- "displayName": "Pause at 16.77 (September 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_24",
- "displayName": "Pause at 16.76 (August 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_25",
- "displayName": "Pause at 16.75 (July 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_26",
- "displayName": "Pause at 16.74 (June 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_27",
- "displayName": "Pause at 16.73 (May 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_28",
- "displayName": "Pause at 16.72 (April 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_29",
- "displayName": "Pause at 16.71 (March 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_30",
- "displayName": "Pause at 16.70 (February 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_31",
- "displayName": "Pause at 16.69 (January 2023 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_32",
- "displayName": "Pause at 16.68 (December 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_33",
- "displayName": "Pause at 16.67 (November 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_34",
- "displayName": "Pause at 16.66 (October 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_35",
- "displayName": "Pause at 16.65 (September 2022 Release)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_manifestserver_36",
- "displayName": "Change Freeze",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_maxconnectionsperproxy",
- "displayName": "Maximum number of concurrent connections to the proxy server",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_maximumondemandscanthreads",
- "displayName": "Degree of parallelism for on-demand scans",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_mediaroutercastallowallips",
- "displayName": "Allow Google Cast to connect to Cast devices on all IP addresses",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_mediaroutercastallowallips_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_mediaroutercastallowallips_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_metricsreportingenabled",
- "displayName": "Enable usage and crash-related data reporting",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_metricsreportingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_metricsreportingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_microsoftedgeinsiderpromotionenabled",
- "displayName": "Microsoft Edge Insider Promotion Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_microsoftedgeinsiderpromotionenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_microsoftedgeinsiderpromotionenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_microsofteditorproofingenabled",
- "displayName": "Spell checking provided by Microsoft Editor",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_microsofteditorproofingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_microsofteditorproofingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_microsofteditorsynonymsenabled",
- "displayName": "Synonyms are provided when using Microsoft Editor spell checker",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_microsofteditorsynonymsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_microsofteditorsynonymsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_msawebsitessousingthisprofileallowed",
- "displayName": "Allow single sign-on for Microsoft personal sites using this profile",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_msawebsitessousingthisprofileallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_msawebsitessousingthisprofileallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_mutationeventsenabled",
- "displayName": "Enable deprecated/removed Mutation Events",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_mutationeventsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_mutationeventsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_nativemessagingallowlist",
- "displayName": "Control which native messaging hosts users can use",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_nativemessagingblocklist",
- "displayName": "Configure native messaging block list",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_nativemessaginguserlevelhosts",
- "displayName": "Allow user-level native messaging hosts (installed without admin permissions)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_nativemessaginguserlevelhosts_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_nativemessaginguserlevelhosts_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_networkpredictionoptions",
- "displayName": "Enable network prediction",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_networkpredictionoptions_0",
- "displayName": "Predict network actions on any network connection",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_networkpredictionoptions_1",
- "displayName": "Predict network actions on any network that is not cellular. (Deprecated in 50, removed in 52. After 52, if value 1 is set, it will be treated as 0 - predict network actions on any network connection.)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_networkpredictionoptions_2",
- "displayName": "Don't predict network actions on any network connection",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newpdfreaderenabled",
- "displayName": "Microsoft Edge built-in PDF reader powered by Adobe Acrobat enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newpdfreaderenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newpdfreaderenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpageallowedbackgroundtypes",
- "displayName": "Configure the background types allowed for the new tab page layout",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpageallowedbackgroundtypes_0",
- "displayName": "Disable daily background image type",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpageallowedbackgroundtypes_1",
- "displayName": "Disable custom background image type",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpageallowedbackgroundtypes_2",
- "displayName": "Disable all background image types",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpageapplauncherenabled",
- "displayName": "Hide App Launcher on Microsoft Edge new tab page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpageapplauncherenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpageapplauncherenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagebingchatenabled",
- "displayName": "Disable Bing chat entry-points on Microsoft Edge Enterprise new tab page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpagebingchatenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagebingchatenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogo",
- "displayName": "New Tab Page Company Logo",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogo_default_logo",
- "displayName": "Default logo",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogo_default_logo_hash",
- "displayName": "Hash",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogo_default_logo_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogo_light_logo",
- "displayName": "Light logo",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogo_light_logo_hash",
- "displayName": "Hash",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogo_light_logo_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogoenabled",
- "displayName": "Hide the company logo on the Microsoft Edge new tab page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogoenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagecompanylogoenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagehidedefaulttopsites",
- "displayName": "Hide the default top sites from the new tab page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpagehidedefaulttopsites_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagehidedefaulttopsites_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagelocation",
- "displayName": "Configure the new tab page URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagemanagedquicklinks",
- "displayName": "New Tab Page Managed Quick Links",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagemanagedquicklinks_item_pinned",
- "displayName": "Pinned",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpagemanagedquicklinks_item_pinned_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagemanagedquicklinks_item_pinned_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagemanagedquicklinks_item_title",
- "displayName": "Title",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagemanagedquicklinks_item_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpageprerenderenabled",
- "displayName": "Enable preload of the new tab page for faster rendering",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpageprerenderenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpageprerenderenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagequicklinksenabled",
- "displayName": "Allow quick links on the new tab page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpagequicklinksenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagequicklinksenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagesearchbox",
- "displayName": "Configure the new tab page search box experience",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpagesearchbox_0",
- "displayName": "Search box (Recommended)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagesearchbox_1",
- "displayName": "Address bar",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagesetfeedtype",
- "displayName": "Configure the Microsoft Edge new tab page experience",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_newtabpagesetfeedtype_0",
- "displayName": "Microsoft News feed experience",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_newtabpagesetfeedtype_1",
- "displayName": "Office 365 feed experience",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_notificationsallowedforurls",
- "displayName": "Allow notifications on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_notificationsblockedforurls",
- "displayName": "Block notifications on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_npssurveydisabled",
- "displayName": "Disable user surveys",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_npssurveydisabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_npssurveydisabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_ntlmv2enabled",
- "displayName": "Control whether NTLMv2 authentication is enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_ntlmv2enabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_ntlmv2enabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_officeactivationemailaddress",
- "displayName": "Office Activation Email Address",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_officeautosignin",
- "displayName": "Enable automatic sign-in",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_officeautosignin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_officeautosignin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_officeexperiencesanalyzingcontentpreference",
- "displayName": "Allow experiences and functionality that analyzes user content",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_officeexperiencesanalyzingcontentpreference_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_officeexperiencesanalyzingcontentpreference_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_officeexperiencesdownloadingcontentpreference",
- "displayName": "Allow experiences and functionality that downloads user content",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_officeexperiencesdownloadingcontentpreference_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_officeexperiencesdownloadingcontentpreference_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_officewebaddindisableomexcatalog",
- "displayName": "Disable third-party store add-in catalog",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_officewebaddindisableomexcatalog_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_officewebaddindisableomexcatalog_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_offlinedefinitionupdate",
- "displayName": "Enable offline security intelligence updates",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_offlinedefinitionupdate_0",
- "displayName": "enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_offlinedefinitionupdate_1",
- "displayName": "disabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_offlinedefinitionupdateurl",
- "displayName": "URL for a security intelligence updates mirror server",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_offlinedefinitionupdateverifysig",
- "displayName": "offline security intelligence updates signature verification",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_offlinedefinitionupdateverifysig_0",
- "displayName": "enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_offlinedefinitionupdateverifysig_1",
- "displayName": "disabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_oldisablejunkoptionsprefkey",
- "displayName": "Disable Junk settings",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_oldisablejunkoptionsprefkey_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_oldisablejunkoptionsprefkey_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_openatlogin",
- "displayName": "Open at login",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_openatlogin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_openatlogin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_optionalconnectedexperiencespreference",
- "displayName": "Allow optional connected experiences",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_optionalconnectedexperiencespreference_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_optionalconnectedexperiencespreference_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_organizationalbrandingonworkprofileuienabled",
- "displayName": "Allow the use of your organization's branding assets from Microsoft Entra on the profile-related UI of a work profile",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_organizationalbrandingonworkprofileuienabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_organizationalbrandingonworkprofileuienabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_organizationlogooverlayonappiconenabled",
- "displayName": "Allow your organization's logo from Microsoft Entra to be overlaid on the Microsoft Edge app icon of a work profile",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_organizationlogooverlayonappiconenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_organizationlogooverlayonappiconenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_originagentclusterdefaultenabled",
- "displayName": "Origin-keyed agent clustering enabled by default",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_originagentclusterdefaultenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_originagentclusterdefaultenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_overridesecurityrestrictionsoninsecureorigin",
- "displayName": "Control where security restrictions on insecure origins apply",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_passivemode",
- "displayName": "Enable passive mode (deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_passivemode_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_passivemode_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_passworddeleteonbrowsercloseenabled",
- "displayName": "Prevent passwords from being deleted if any Edge settings is enabled to delete browsing data when Microsoft Edge closes",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_passworddeleteonbrowsercloseenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_passworddeleteonbrowsercloseenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_passwordmanagerenabled",
- "displayName": "Enable saving passwords to the password manager",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_passwordmanagerenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_passwordmanagerenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_passwordmanagerrestrictlengthenabled",
- "displayName": "Restrict the length of passwords that can be saved in the Password Manager",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_passwordmanagerrestrictlengthenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_passwordmanagerrestrictlengthenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_passwordmonitorallowed",
- "displayName": "Allow Microsoft Edge to monitor user passwords",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_passwordmonitorallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_passwordmonitorallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_passwordprotectionchangepasswordurl",
- "displayName": "Configure the change password URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_passwordprotectionloginurls",
- "displayName": "Configure the list of enterprise login URLs where password protection service should capture fingerprint of password",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_passwordprotectionwarningtrigger",
- "displayName": "Configure password protection warning trigger",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_passwordprotectionwarningtrigger_0",
- "displayName": "Password protection warning is off",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_passwordprotectionwarningtrigger_1",
- "displayName": "Password protection warning is triggered by password reuse",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_passwordrevealenabled",
- "displayName": "Enable Password reveal button",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_passwordrevealenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_passwordrevealenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_paymentmethodqueryenabled",
- "displayName": "Allow websites to query for available payment methods",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_paymentmethodqueryenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_paymentmethodqueryenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_pdfsecuremode",
- "displayName": "Secure mode and Certificate-based Digital Signature validation in native PDF reader",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_pdfsecuremode_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_pdfsecuremode_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_pdfxfaenabled",
- "displayName": "XFA support in native PDF reader enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_pdfxfaenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_pdfxfaenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_performancedetectorenabled",
- "displayName": "Performance Detector Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_performancedetectorenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_performancedetectorenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_personalizationreportingenabled",
- "displayName": "Allow personalization of ads, search and news by sending browsing history to Microsoft",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_personalizationreportingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_personalizationreportingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_phoenixonboardingflowfrelaunched",
- "displayName": "Hide the 'Personalize the new Outlook' dialog",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_phoenixonboardingflowfrelaunched_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_phoenixonboardingflowfrelaunched_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_pictureinpictureoverlayenabled",
- "displayName": "Enable Picture in Picture overlay feature on supported webpages in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_pictureinpictureoverlayenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_pictureinpictureoverlayenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_pinbrowseressentialstoolbarbutton",
- "displayName": "Pin browser essentials toolbar button",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_pinbrowseressentialstoolbarbutton_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_pinbrowseressentialstoolbarbutton_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_pluginsallowedforurls",
- "displayName": "Allow the Adobe Flash plug-in on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_pluginsblockedforurls",
- "displayName": "Block the Adobe Flash plug-in on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_popupsallowedforurls",
- "displayName": "Allow pop-up windows on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_popupsblockedforurls",
- "displayName": "Block pop-up windows on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_postquantumkeyagreementenabled",
- "displayName": "Enable post-quantum key agreement for TLS",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_postquantumkeyagreementenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_postquantumkeyagreementenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_preventsmartscreenpromptoverride",
- "displayName": "Prevent bypassing Microsoft Defender SmartScreen prompts for sites",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_preventsmartscreenpromptoverride_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_preventsmartscreenpromptoverride_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_preventsmartscreenpromptoverrideforfiles",
- "displayName": "Prevent bypassing of Microsoft Defender SmartScreen warnings about downloads",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_preventsmartscreenpromptoverrideforfiles_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_preventsmartscreenpromptoverrideforfiles_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_preventtyposquattingpromptoverride",
- "displayName": "Prevent bypassing Edge Website Typo Protection prompts for sites",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_preventtyposquattingpromptoverride_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_preventtyposquattingpromptoverride_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_primarypasswordsetting",
- "displayName": "Configures a setting that asks users to enter their device password while using password autofill",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_primarypasswordsetting_0",
- "displayName": "Automatically",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_primarypasswordsetting_1",
- "displayName": "With device password",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_primarypasswordsetting_2",
- "displayName": "With custom primary password",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_primarypasswordsetting_3",
- "displayName": "Autofill off",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_printertypedenylist",
- "displayName": "Disable printer types on the deny list",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_printheaderfooter",
- "displayName": "Print headers and footers",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_printheaderfooter_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printheaderfooter_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_printingallowedbackgroundgraphicsmodes",
- "displayName": "Restrict background graphics printing mode",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_printingallowedbackgroundgraphicsmodes_0",
- "displayName": "Allow printing with and without background graphics",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printingallowedbackgroundgraphicsmodes_1",
- "displayName": "Allow printing only without background graphics",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printingallowedbackgroundgraphicsmodes_2",
- "displayName": "Allow printing only with background graphics",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_printingbackgroundgraphicsdefault",
- "displayName": "Default background graphics printing mode",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_printingbackgroundgraphicsdefault_0",
- "displayName": "Disable background graphics printing mode by default",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printingbackgroundgraphicsdefault_1",
- "displayName": "Enable background graphics printing mode by default",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_printingenabled",
- "displayName": "Enable printing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_printingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_printingwebpagelayout",
- "displayName": "Sets layout for printing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_printingwebpagelayout_0",
- "displayName": "Sets layout option as portrait",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printingwebpagelayout_1",
- "displayName": "Sets layout option as landscape",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_printpdfasimagedefault",
- "displayName": "Print PDF as Image Default",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_printpdfasimagedefault_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printpdfasimagedefault_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_printpreviewusesystemdefaultprinter",
- "displayName": "Set the system default printer as the default printer",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_printpreviewusesystemdefaultprinter_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printpreviewusesystemdefaultprinter_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_printrasterizepdfdpi",
- "displayName": "Print Rasterize PDF DPI",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_printstickysettings",
- "displayName": "Print preview sticky settings",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_printstickysettings_0",
- "displayName": "Enable sticky settings for PDF and Webpages",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printstickysettings_1",
- "displayName": "Disable sticky settings for PDF and Webpages",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printstickysettings_2",
- "displayName": "Disable sticky settings for PDF",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_printstickysettings_3",
- "displayName": "Disable sticky settings for Webpages",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_privatenetworkaccessrestrictionsenabled",
- "displayName": "Specifies whether to apply restrictions to requests to more private network endpoints",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_privatenetworkaccessrestrictionsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_privatenetworkaccessrestrictionsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_proactiveauthenabled",
- "displayName": "Enable Proactive Authentication",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_proactiveauthenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proactiveauthenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_proactiveauthworkflowenabled",
- "displayName": "Enable proactive authentication",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_proactiveauthworkflowenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proactiveauthworkflowenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_promotionaltabsenabled",
- "displayName": "Enable full-tab promotional content",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_promotionaltabsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_promotionaltabsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_promptfordownloadlocation",
- "displayName": "Ask where to save downloaded files",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_promptfordownloadlocation_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_promptfordownloadlocation_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_promptonmultiplematchingcertificates",
- "displayName": "Prompt the user to select a certificate when multiple certificates match",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_promptonmultiplematchingcertificates_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_promptonmultiplematchingcertificates_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_proxy",
- "displayName": "Set proxy for MDE communication",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxybypasslist",
- "displayName": "Configure proxy bypass rules",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxymode",
- "displayName": "Configure proxy server settings",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_proxymode_0",
- "displayName": "Never use a proxy",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxymode_1",
- "displayName": "Auto detect proxy settings",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxymode_2",
- "displayName": "Use a .pac proxy script",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxymode_3",
- "displayName": "Use fixed proxy servers",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxymode_4",
- "displayName": "Use system proxy settings",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_proxypacurl",
- "displayName": "Set the proxy .pac file URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxyserver",
- "displayName": "Configure address or URL of proxy server",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings",
- "displayName": "Proxy Settings",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxybypasslist",
- "displayName": "Proxy Bypass List",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxymode",
- "displayName": "Proxy Mode",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxymode_0",
- "displayName": "direct",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxymode_1",
- "displayName": "auto_detect",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxymode_2",
- "displayName": "pac_script",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxymode_3",
- "displayName": "fixed_servers",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxymode_4",
- "displayName": "system",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxypacurl",
- "displayName": "Proxy PAC URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_proxysettings_proxyserver",
- "displayName": "Proxy Server",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_qrcodegeneratorenabled",
- "displayName": "Enable QR Code Generator",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_qrcodegeneratorenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_qrcodegeneratorenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_quicallowed",
- "displayName": "Allow QUIC protocol",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_quicallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_quicallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_quicksearchshowminimenu",
- "displayName": "Enables Microsoft Edge mini menu",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_quicksearchshowminimenu_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_quicksearchshowminimenu_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_quickviewofficefilesenabled",
- "displayName": "Manage QuickView Office files capability in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_quickviewofficefilesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_quickviewofficefilesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_randomizescanstarttime",
- "displayName": "Randomize scheduled scan start time",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_readaloudenabled",
- "displayName": "Enable Read Aloud feature in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_readaloudenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_readaloudenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_registeredprotocolhandlers",
- "displayName": "Registered Protocol Handlers",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_registeredprotocolhandlers_item_default",
- "displayName": "Default",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_registeredprotocolhandlers_item_default_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_registeredprotocolhandlers_item_default_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_registeredprotocolhandlers_item_protocol",
- "displayName": "Protocol",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_registeredprotocolhandlers_item_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_relatedmatchescloudserviceenabled",
- "displayName": "Configure Related Matches in Find on Page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_relatedmatchescloudserviceenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_relatedmatchescloudserviceenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_relatedwebsitesetsenabled",
- "displayName": "Enable Related Website Sets",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_relatedwebsitesetsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_relatedwebsitesetsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_relaunchnotification",
- "displayName": "Notify a user that a browser restart is recommended or required for pending updates",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_relaunchnotification_0",
- "displayName": "Recommended - Show a recurring prompt to the user indicating that a restart is recommended",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_relaunchnotification_1",
- "displayName": "Required - Show a recurring prompt to the user indicating that a restart is required",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_relaunchnotificationperiod",
- "displayName": "Set the time period for update notifications",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_remotedebuggingallowed",
- "displayName": "Allow remote debugging",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_remotedebuggingallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_remotedebuggingallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_resolvenavigationerrorsusewebservice",
- "displayName": "Enable resolution of navigation errors using a web service",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_resolvenavigationerrorsusewebservice_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_resolvenavigationerrorsusewebservice_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_restoreonstartup",
- "displayName": "Action to take on startup",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_restoreonstartup_0",
- "displayName": "Restore the last session",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_restoreonstartup_1",
- "displayName": "Open a list of URLs",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_restoreonstartup_2",
- "displayName": "Open a new tab",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_restoreonstartup_3",
- "displayName": "Open a list of URLs and restore the last session",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_restoreonstartupurls",
- "displayName": "Sites to open when the browser starts",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_restoreonstartupuserurlsenabled",
- "displayName": "Allow users to add and remove their own sites during startup when the RestoreOnStartupURLs policy is configured",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_restoreonstartupuserurlsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_restoreonstartupuserurlsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_restorepdfview",
- "displayName": "Restore PDF view",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_restorepdfview_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_restorepdfview_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_restrictsignintopattern",
- "displayName": "Restrict which accounts can be used as Microsoft Edge primary accounts",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_runallflashinallowmode",
- "displayName": "Extend Adobe Flash content setting to all content",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_runallflashinallowmode_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_runallflashinallowmode_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_runscanwhenidle",
- "displayName": "Run scheduled scan when idle",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_runscanwhenidle_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_runscanwhenidle_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sameorigintabcaptureallowedbyorigins",
- "displayName": "Allow Same Origin Tab capture by these origins",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_sandboxexternalprotocolblocked",
- "displayName": "Allow Microsoft Edge to block navigations to external protocols in a sandboxed iframe",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sandboxexternalprotocolblocked_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sandboxexternalprotocolblocked_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_savecookiesonexit",
- "displayName": "Save cookies when Microsoft Edge closes",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_savingbrowserhistorydisabled",
- "displayName": "Disable saving browser history",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_savingbrowserhistorydisabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_savingbrowserhistorydisabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_scanafterdefinitionupdate",
- "displayName": "Run a scan after definitions are updated",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_scanafterdefinitionupdate_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_scanafterdefinitionupdate_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_scanarchives",
- "displayName": "Scanning inside archive files",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_scanarchives_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_scanarchives_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_scanhistorymaximumitems",
- "displayName": "Scan history size",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_scanresultsretentiondays",
- "displayName": "Scan results retention",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_scheduledscan",
- "displayName": "Scheduled Scan",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_scheduledscan_0",
- "displayName": "enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_scheduledscan_1",
- "displayName": "disabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_screencaptureallowed",
- "displayName": "Allow or deny screen capture",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_screencaptureallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_screencaptureallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_screencaptureallowedbyorigins",
- "displayName": "Allow Desktop, Window, and Tab capture by these origins",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_screencapturewithoutgestureallowedfororigins",
- "displayName": "Allow screen capture without prior user gesture",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_scrolltotextfragmentenabled",
- "displayName": "Enable scrolling to text specified in URL fragments",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_scrolltotextfragmentenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_scrolltotextfragmentenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_searchfiltersenabled",
- "displayName": "Search Filters Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_searchfiltersenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_searchfiltersenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_searchforimageenabled",
- "displayName": "Search for image enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_searchforimageenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_searchforimageenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_searchinsidebarenabled",
- "displayName": "Search in Sidebar enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_searchinsidebarenabled_0",
- "displayName": "Enable search in sidebar",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_searchinsidebarenabled_1",
- "displayName": "Disable search in sidebar for Kids Mode",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_searchinsidebarenabled_2",
- "displayName": "Disable search in sidebar",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_searchsuggestenabled",
- "displayName": "Enable search suggestions",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_searchsuggestenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_searchsuggestenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_securitykeypermitattestation",
- "displayName": "Websites or domains that don't need permission to use direct Security Key attestation",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_sendsiteinfotoimproveservices",
- "displayName": "Send site information to improve Microsoft services",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sendsiteinfotoimproveservices_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sendsiteinfotoimproveservices_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sensorsallowedforurls",
- "displayName": "Allow access to sensors on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_sensorsblockedforurls",
- "displayName": "Block access to sensors on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_serialallowallportsforurls",
- "displayName": "Automatically grant sites permission to connect all serial ports",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_serialaskforurls",
- "displayName": "Allow the Serial API on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_serialblockedforurls",
- "displayName": "Block the Serial API on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_sharedarraybufferunrestrictedaccessallowed",
- "displayName": "Specifies whether SharedArrayBuffers can be used in a non cross-origin-isolated context",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sharedarraybufferunrestrictedaccessallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sharedarraybufferunrestrictedaccessallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sharedlinksenabled",
- "displayName": "Show links shared from Microsoft 365 apps in History",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sharedlinksenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sharedlinksenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sharepointonpremfrontdoorurl",
- "displayName": "SharePoint Server Front Door URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_sharepointonpremprioritizationpolicy",
- "displayName": "SharePoint Prioritization",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sharepointonpremprioritizationpolicy_0",
- "displayName": "Prioritize SharePoint Online",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sharepointonpremprioritizationpolicy_1",
- "displayName": "Prioritize SharePoint Server",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sharepointonpremtenantname",
- "displayName": "SharePoint Server Tenant Name",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_showacrobatsubscriptionbutton",
- "displayName": "Shows button on native PDF viewer in Microsoft Edge that allows users to sign up for Adobe Acrobat subscription",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showacrobatsubscriptionbutton_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showacrobatsubscriptionbutton_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showcasticonintoolbar",
- "displayName": "Show the cast icon in the toolbar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showcasticonintoolbar_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showcasticonintoolbar_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showdocstageonlaunch",
- "displayName": "Show Template Gallery on app launch",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showdocstageonlaunch_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showdocstageonlaunch_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showdownloadsinsecurewarningsenabled",
- "displayName": "Enable insecure download warnings",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showdownloadsinsecurewarningsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showdownloadsinsecurewarningsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showdownloadstoolbarbutton",
- "displayName": "Show Downloads button on the toolbar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showdownloadstoolbarbutton_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showdownloadstoolbarbutton_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showhistorythumbnails",
- "displayName": "Show thumbnail images for browsing history",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showhistorythumbnails_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showhistorythumbnails_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showhomebutton",
- "displayName": "Show Home button on toolbar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showhomebutton_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showhomebutton_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showmicrosoftrewards",
- "displayName": "Show Microsoft Rewards experiences",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showmicrosoftrewards_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showmicrosoftrewards_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showofficeshortcutinfavoritesbar",
- "displayName": "Show Microsoft Office shortcut in favorites bar",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showofficeshortcutinfavoritesbar_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showofficeshortcutinfavoritesbar_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showpdfdefaultrecommendationsenabled",
- "displayName": "Allow notifications to set Microsoft Edge as default PDF reader",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showpdfdefaultrecommendationsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showpdfdefaultrecommendationsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showrecommendationsenabled",
- "displayName": "Allow feature recommendations and browser assistance notifications from Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showrecommendationsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showrecommendationsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_showwhatsnewonlaunch",
- "displayName": "Show Whats New dialog",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_showwhatsnewonlaunch_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_showwhatsnewonlaunch_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_signedhttpexchangeenabled",
- "displayName": "Enable Signed HTTP Exchange (SXG) support",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_signedhttpexchangeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_signedhttpexchangeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_siteperprocess",
- "displayName": "Enable site isolation for every site",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_siteperprocess_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_siteperprocess_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabsblockedforurls",
- "displayName": "Block Sleeping Tabs on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabsenabled",
- "displayName": "Configure Sleeping Tabs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sleepingtabsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout",
- "displayName": "Set the background tab inactivity timeout for Sleeping Tabs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_0",
- "displayName": "5 minutes of inactivity",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_1",
- "displayName": "15 minutes of inactivity",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_2",
- "displayName": "30 minutes of inactivity",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_3",
- "displayName": "1 hour of inactivity",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_4",
- "displayName": "2 hours of inactivity",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_5",
- "displayName": "3 hours of inactivity",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_6",
- "displayName": "6 hours of inactivity",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_7",
- "displayName": "12 hours of inactivity",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sleepingtabstimeout_8",
- "displayName": "12 hours of inactivity",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_smartactionsblocklist",
- "displayName": "Block smart actions for a list of services",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_smartscreenallowlistdomains",
- "displayName": "Configure the list of domains for which Microsoft Defender SmartScreen won't trigger warnings",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_smartscreendnsrequestsenabled",
- "displayName": "Enable Microsoft Defender SmartScreen DNS requests",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_smartscreendnsrequestsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_smartscreendnsrequestsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_smartscreenenabled",
- "displayName": "Configure Microsoft Defender SmartScreen",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_smartscreenenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_smartscreenenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_smartscreenpuaenabled",
- "displayName": "Configure Microsoft Defender SmartScreen to block potentially unwanted apps",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_smartscreenpuaenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_smartscreenpuaenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_smimecertificateslookuporder",
- "displayName": "Set the order in which S/MIME certificates are considered",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_smimecertificateslookuporder_0",
- "displayName": "Contacts",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_smimecertificateslookuporder_1",
- "displayName": "Global Address List",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_smimecertificateslookuporder_2",
- "displayName": "Device",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_smimecertificateslookuporder_3",
- "displayName": "LDAP",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_speechrecognitionenabled",
- "displayName": "Configure Speech Recognition",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_speechrecognitionenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_speechrecognitionenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_spellcheckenabled",
- "displayName": "Enable spellcheck",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_spellcheckenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_spellcheckenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_splitscreenenabled",
- "displayName": "Enable split screen feature in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_splitscreenenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_splitscreenenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sslerroroverrideallowed",
- "displayName": "Allow users to proceed from the HTTPS warning page",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sslerroroverrideallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sslerroroverrideallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_sslerroroverrideallowedfororigins",
- "displayName": "Allow users to proceed from the HTTPS warning page for specific origins",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_sslversionmin",
- "displayName": "Minimum TLS version enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_sslversionmin_0",
- "displayName": "TLS 1.0",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sslversionmin_1",
- "displayName": "TLS 1.1",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_sslversionmin_2",
- "displayName": "TLS 1.2",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_startdaemononapplaunch",
- "displayName": "Register app on launch",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_startdaemononapplaunch_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_startdaemononapplaunch_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_strictermixedcontenttreatmentenabled",
- "displayName": "Enable stricter treatment for mixed content",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_strictermixedcontenttreatmentenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_strictermixedcontenttreatmentenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_suppresso365autodiscoveroverride",
- "displayName": "Use domain-based autodiscover instead of Office 365",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_suppresso365autodiscoveroverride_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_suppresso365autodiscoveroverride_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_suppressunsupportedoswarning",
- "displayName": "Suppress the unsupported OS warning",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_suppressunsupportedoswarning_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_suppressunsupportedoswarning_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_switchintranetsitestoworkprofile",
- "displayName": "Switch intranet sites to a work profile",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_switchintranetsitestoworkprofile_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_switchintranetsitestoworkprofile_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_syncdisabled",
- "displayName": "Disable synchronization of data using Microsoft sync services",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_syncdisabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_syncdisabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_synctypeslistdisabled",
- "displayName": "Configure the list of types that are excluded from synchronization",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_systemextensions",
- "displayName": "Use System Extensions",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_systemextensions_0",
- "displayName": "enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_systemextensions_1",
- "displayName": "disabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_tabcaptureallowedbyorigins",
- "displayName": "Allow Tab capture by these origins",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_tabfreezingenabled",
- "displayName": "Allow freezing of background tabs",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_tabfreezingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_tabfreezingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_tabservicesenabled",
- "displayName": "Enable tab organization suggestions",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_tabservicesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_tabservicesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_tags",
- "displayName": "Device tags",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_tags_item_key",
- "displayName": "Type of tag",
- "options": {
- "id": "com.apple.managedclient.preferences_tags_item_key_0",
- "displayName": "GROUP",
- "description": null
- }
- },
- {
- "id": "com.apple.managedclient.preferences_tags_item_value",
- "displayName": "Value of tag",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_targetblankimpliesnoopener",
- "displayName": "Do not set window.opener for links targeting _blank",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_targetblankimpliesnoopener_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_targetblankimpliesnoopener_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_taskmanagerendprocessenabled",
- "displayName": "Enable ending processes in the Browser task manager",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_taskmanagerendprocessenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_taskmanagerendprocessenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_textpredictionenabled",
- "displayName": "Text prediction enabled by default",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_textpredictionenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_textpredictionenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_thirdpartystoragepartitioningblockedfororigins",
- "displayName": "Block third-party storage partitioning for these origins",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_threattypesettings",
- "displayName": "Threat type settings",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_threattypesettings_item_key",
- "displayName": "Threat type",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_threattypesettings_item_key_0",
- "displayName": "potentially_unwanted_application",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_threattypesettings_item_key_1",
- "displayName": "archive_bomb",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_threattypesettings_item_value",
- "displayName": "Action to take",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_threattypesettings_item_value_0",
- "displayName": "audit",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_threattypesettings_item_value_1",
- "displayName": "block",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_threattypesettings_item_value_2",
- "displayName": "off",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_threattypesettingsmergepolicy",
- "displayName": "Threat type settings merge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_threattypesettingsmergepolicy_0",
- "displayName": "merge",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_threattypesettingsmergepolicy_1",
- "displayName": "admin_only",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_tls13hardeningforlocalanchorsenabled",
- "displayName": "Enable a TLS 1.3 security feature for local trust anchors.",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_tls13hardeningforlocalanchorsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_tls13hardeningforlocalanchorsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_tlsciphersuitedenylist",
- "displayName": "Specify the TLS cipher suites to disable",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_totalmemorylimitmb",
- "displayName": "Set limit on megabytes of memory a single Microsoft Edge instance can use.",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_trackingprevention",
- "displayName": "Block tracking of users' web-browsing activity",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_trackingprevention_0",
- "displayName": "Off (no tracking prevention)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_trackingprevention_1",
- "displayName": "Basic (blocks harmful trackers, content and ads will be personalized)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_trackingprevention_2",
- "displayName": "Balanced (blocks harmful trackers and trackers from sites user has not visited; content and ads will be less personalized)",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_trackingprevention_3",
- "displayName": "Strict (blocks harmful trackers and majority of trackers from all sites; content and ads will have minimal personalization. Some parts of sites might not work)",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_translateenabled",
- "displayName": "Enable Translate",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_translateenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_translateenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_trusto365autodiscoverredirect",
- "displayName": "Trust Office 365 autodiscover redirects",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_trusto365autodiscoverredirect_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_trusto365autodiscoverredirect_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_typosquattingallowlistdomains",
- "displayName": "Configure the list of domains for which Edge Website Typo Protection won't trigger warnings",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_typosquattingcheckerenabled",
- "displayName": "Configure Edge Website Typo Protection",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_typosquattingcheckerenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_typosquattingcheckerenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_unthrottlednestedtimeoutenabled",
- "displayName": "JavaScript setTimeout will not be clamped until a higher nesting threshold is set (deprecated)",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_unthrottlednestedtimeoutenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_unthrottlednestedtimeoutenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_updatecache",
- "displayName": "Update cache server",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_updatecheckfrequency",
- "displayName": "Update check frequency (mins)",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_updatedeadline.daysbeforeforcedquit",
- "displayName": "Days before forced updates",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_updatedeadline.finalcountdown",
- "displayName": "Number of minutes for the final countdown timer",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_updatepolicyoverride",
- "displayName": "Specifies how Microsoft Edge Update handles available updates from Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_updatepolicyoverride_0",
- "displayName": "silent-only - Updates are applied only when they're found by the periodic update check.",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_updatepolicyoverride_1",
- "displayName": "only - Updates are applied only when the user runs a manual update check. (Not all apps provide an interface for this option.)",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_updateroptimization",
- "displayName": "Updater optimization technique",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_updateroptimization_0",
- "displayName": "Lower network overhead",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_updateroptimization_1",
- "displayName": "Lower processor overhead",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_updateroptimization_2",
- "displayName": "Always use full updates",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_uploadbandwidthlimited",
- "displayName": "Set maximum upload throughput",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_uploadfromphoneenabled",
- "displayName": "Enable upload files from mobile in Microsoft Edge desktop",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_uploadfromphoneenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_uploadfromphoneenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_urlallowlist",
- "displayName": "Define a list of allowed URLs",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_urlblocklist",
- "displayName": "Block access to a list of URLs",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_useragentclienthintsenabled",
- "displayName": "Enable the User-Agent Client Hints feature",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_useragentclienthintsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_useragentclienthintsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_useragentreduction",
- "displayName": "Enable or disable the User-Agent Reduction",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_useragentreduction_0",
- "displayName": "User-Agent reduction will be controllable via Experimentation",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_useragentreduction_1",
- "displayName": "User-Agent reduction diabled, and not enabled by Experimentation",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_useragentreduction_2",
- "displayName": "User-Agent reduction will be enabled for all origins",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_userdatadir",
- "displayName": "Set the user data directory",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_userfeedbackallowed",
- "displayName": "Allow user feedback",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_userfeedbackallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_userfeedbackallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_userinitiatedfeedback",
- "displayName": "User initiated feedback",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_userinitiatedfeedback_0",
- "displayName": "enabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_userinitiatedfeedback_1",
- "displayName": "disabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_userpreference_apptheming",
- "displayName": "Set theme",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_userpreference_apptheming_0",
- "displayName": "Blue",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_userpreference_apptheming_1",
- "displayName": "Purple",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_userpreference_apptheming_2",
- "displayName": "Pink",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_userpreference_apptheming_3",
- "displayName": "Orange",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_userpreference_apptheming_4",
- "displayName": "Red",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_userpreference_apptheming_5",
- "displayName": "Green",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_userpreference_maxchecklistdisplaydurationmet",
- "displayName": "Hide the 'Get started with Outlook' control in the task pane",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_userpreference_maxchecklistdisplaydurationmet_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_userpreference_maxchecklistdisplaydurationmet_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_usesystemprintdialog",
- "displayName": "Print using system print dialog",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_usesystemprintdialog_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_usesystemprintdialog_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_vbaobjectmodelistrusted",
- "displayName": "Allow macros to modify Visual Basic projects",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_vbaobjectmodelistrusted_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_vbaobjectmodelistrusted_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_verticaltabsallowed",
- "displayName": "Configures availability of a vertical layout for tabs on the side of the browser",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_verticaltabsallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_verticaltabsallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_videocaptureallowed",
- "displayName": "Allow or block video capture",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_videocaptureallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_videocaptureallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_videocaptureallowedurls",
- "displayName": "Sites that can access video capture devices without requesting permission",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_visualbasicentirelydisabled",
- "displayName": "Prevent all Visual Basic macros from executing",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_visualbasicentirelydisabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_visualbasicentirelydisabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_visualbasicmacroexecutionstate",
- "displayName": "Visual Basic macro policy",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_visualbasicmacroexecutionstate_0",
- "displayName": "Macros disabled by default, with warning to enable",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_visualbasicmacroexecutionstate_1",
- "displayName": "Disable all macros",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_visualbasicmacroexecutionstate_2",
- "displayName": "Always allow macros to run (potentially dangerous)",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_visualsearchenabled",
- "displayName": "Visual search enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_visualsearchenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_visualsearchenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_walletdonationenabled",
- "displayName": "Wallet Donation Enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_walletdonationenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_walletdonationenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_weather_update_automatically",
- "displayName": "Disable automatic updating of weather location",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_weather_update_automatically_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_weather_update_automatically_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_webappinstallforcelist",
- "displayName": "Web App Install Force List",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_webappinstallforcelist_item_create_desktop_shortcut",
- "displayName": "Create desktop shortcut",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_webappinstallforcelist_item_create_desktop_shortcut_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webappinstallforcelist_item_create_desktop_shortcut_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_webappinstallforcelist_item_default_launch_container",
- "displayName": "Default launch container",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_webappinstallforcelist_item_default_launch_container_0",
- "displayName": "tab",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webappinstallforcelist_item_default_launch_container_1",
- "displayName": "window",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_webappinstallforcelist_item_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_webcaptureenabled",
- "displayName": "Enable web capture feature in Microsoft Edge",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_webcaptureenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webcaptureenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_webcomponentsv0enabled",
- "displayName": "Re-enable Web Components v0 API until M84.",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_webcomponentsv0enabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webcomponentsv0enabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_webdriveroverridesincompatiblepolicies",
- "displayName": "Allow WebDriver to Override Incompatible Policies",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_webdriveroverridesincompatiblepolicies_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webdriveroverridesincompatiblepolicies_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_webhidallowalldevicesforurls",
- "displayName": "Allow listed sites to connect to any HID device",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_webhidaskforurls",
- "displayName": "Allow the WebHID API on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_webhidblockedforurls",
- "displayName": "Block the WebHID API on these sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_webrtcallowlegacytlsprotocols",
- "displayName": "Allow legacy TLS/DTLS downgrade in WebRTC",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_webrtcallowlegacytlsprotocols_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webrtcallowlegacytlsprotocols_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_webrtclocalhostiphandling",
- "displayName": "Restrict exposure of local IP address by WebRTC",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_webrtclocalhostiphandling_0",
- "displayName": "Allow all interfaces. This exposes the local IP address",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webrtclocalhostiphandling_1",
- "displayName": "Allow public and private interfaces over http default route. This exposes the local IP address",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webrtclocalhostiphandling_2",
- "displayName": "Allow public interface over http default route. This doesn't expose the local IP address",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_webrtclocalhostiphandling_3",
- "displayName": "Use TCP unless proxy server supports UDP. This doesn't expose the local IP address",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_webrtclocalipsallowedurls",
- "displayName": "Manage exposure of local IP addressess by WebRTC",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_webrtcudpportrange",
- "displayName": "Restrict the range of local UDP ports used by WebRTC",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_webusbaskforurls",
- "displayName": "Allow WebUSB on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_webusbblockedforurls",
- "displayName": "Block WebUSB on specific sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_weeklyconfiguration",
- "displayName": "Weekly scheduled scan configuration",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_weeklyconfiguration_dayofweek",
- "displayName": "Day of week",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_weeklyconfiguration_scantype",
- "displayName": "Scan type",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_weeklyconfiguration_scantype_0",
- "displayName": "quick",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_weeklyconfiguration_scantype_1",
- "displayName": "full",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_weeklyconfiguration_timeofday",
- "displayName": "Time of day",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_windowcaptureallowedbyorigins",
- "displayName": "Allow Window and Tab capture by these origins",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_windowmanagementallowedforurls",
- "displayName": "Allow Window Management permission on specified sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_windowmanagementblockedforurls",
- "displayName": "Block Window Management permission on specified sites",
- "options": null
- },
- {
- "id": "com.apple.managedclient.preferences_wpadquickcheckenabled",
- "displayName": "Set WPAD optimization",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_wpadquickcheckenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_wpadquickcheckenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_zstdcontentencodingenabled",
- "displayName": "Enable zstd content encoding support",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_zstdcontentencodingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_zstdcontentencodingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.managedclient.preferences_aadwebsitessousingthisprofileenabled",
- "displayName": "Single sign-on for work or school sites using this profile enabled",
- "options": [
- {
- "id": "com.apple.managedclient.preferences_aadwebsitessousingthisprofileenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.managedclient.preferences_aadwebsitessousingthisprofileenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_cachedaccounts.askforsecuretokenauthbypass",
- "displayName": "Ask For Secure Token Auth Bypass",
- "options": [
- {
- "id": "com.apple.mcx_cachedaccounts.askforsecuretokenauthbypass_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_cachedaccounts.askforsecuretokenauthbypass_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_cachedaccounts.expiry.delete.disusedseconds",
- "displayName": "Expiry Delete Disused Seconds",
- "options": null
- },
- {
- "id": "com.apple.mcx_cachedaccounts.warnoncreate.allownever",
- "displayName": "Warn On Create Allow Never",
- "options": [
- {
- "id": "com.apple.mcx_cachedaccounts.warnoncreate.allownever_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_cachedaccounts.warnoncreate.allownever_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.cachedaccounts.createatlogin",
- "displayName": "Create At Login",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.cachedaccounts.createatlogin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.cachedaccounts.createatlogin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.cachedaccounts.warnoncreate",
- "displayName": "Warn On Create",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.cachedaccounts.warnoncreate_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.cachedaccounts.warnoncreate_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower",
- "displayName": "Desktop Power",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_automatic restart on power loss",
- "displayName": "Automatic Restart On Power Loss",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_automatic restart on power loss_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_automatic restart on power loss_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_disk sleep timer",
- "displayName": "Disk Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_display sleep timer",
- "displayName": "Display Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_dynamic power step",
- "displayName": "Dynamic Power Step",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_dynamic power step_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_dynamic power step_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_reduce processor speed",
- "displayName": "Reduce Processor Speed",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_reduce processor speed_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_reduce processor speed_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_system sleep timer",
- "displayName": "System Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_wake on lan",
- "displayName": "Wake on LAN",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_wake on lan_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_wake on lan_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_wake on modem ring",
- "displayName": "Wake On Modem Ring",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_wake on modem ring_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.acpower_wake on modem ring_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule",
- "displayName": "Desktop Schedule",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff",
- "displayName": "Repeating Power Off",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_eventtype",
- "displayName": "Event Type",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_eventtype_0",
- "displayName": "Wake",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_eventtype_1",
- "displayName": "Power On",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_eventtype_2",
- "displayName": "Wake Power On",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_eventtype_3",
- "displayName": "Sleep",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_eventtype_4",
- "displayName": "Shutdown",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_eventtype_5",
- "displayName": "Restart",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_time",
- "displayName": "Time",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_weekdays",
- "displayName": "Weekdays",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_weekdays_0",
- "displayName": "Mon",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_weekdays_1",
- "displayName": "Tue",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_weekdays_2",
- "displayName": "Wed",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_weekdays_3",
- "displayName": "Thu",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_weekdays_4",
- "displayName": "Fri",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_weekdays_5",
- "displayName": "Sat",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweroff_weekdays_6",
- "displayName": "Sun",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron",
- "displayName": "Repeating Power On",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_eventtype",
- "displayName": "Event Type",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_eventtype_0",
- "displayName": "Wake",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_eventtype_1",
- "displayName": "Power On",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_eventtype_2",
- "displayName": "Wake Power On",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_eventtype_3",
- "displayName": "Sleep",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_eventtype_4",
- "displayName": "Shutdown",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_eventtype_5",
- "displayName": "Restart",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_time",
- "displayName": "Time",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_weekdays",
- "displayName": "Weekdays",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_weekdays_0",
- "displayName": "Mon",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_weekdays_1",
- "displayName": "Tue",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_weekdays_2",
- "displayName": "Wed",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_weekdays_3",
- "displayName": "Thu",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_weekdays_4",
- "displayName": "Fri",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_weekdays_5",
- "displayName": "Sat",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.desktop.schedule_repeatingpoweron_weekdays_6",
- "displayName": "Sun",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower",
- "displayName": "Laptop Power",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_automatic restart on power loss",
- "displayName": "Automatic Restart On Power Loss",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_automatic restart on power loss_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_automatic restart on power loss_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_disk sleep timer",
- "displayName": "Disk Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_display sleep timer",
- "displayName": "Display Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_dynamic power step",
- "displayName": "Dynamic Power Step",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_dynamic power step_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_dynamic power step_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_reduce processor speed",
- "displayName": "Reduce Processor Speed",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_reduce processor speed_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_reduce processor speed_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_system sleep timer",
- "displayName": "System Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_wake on lan",
- "displayName": "Wake on LAN",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_wake on lan_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_wake on lan_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_wake on modem ring",
- "displayName": "Wake On Modem Ring",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_wake on modem ring_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.acpower_wake on modem ring_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower",
- "displayName": "Laptop Battery Power",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_automatic restart on power loss",
- "displayName": "Automatic Restart On Power Loss",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_automatic restart on power loss_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_automatic restart on power loss_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_disk sleep timer",
- "displayName": "Disk Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_display sleep timer",
- "displayName": "Display Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_dynamic power step",
- "displayName": "Dynamic Power Step",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_dynamic power step_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_dynamic power step_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_reduce processor speed",
- "displayName": "Reduce Processor Speed",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_reduce processor speed_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_reduce processor speed_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_system sleep timer",
- "displayName": "System Sleep Timer",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_wake on lan",
- "displayName": "Wake on LAN",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_wake on lan_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_wake on lan_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_wake on modem ring",
- "displayName": "Wake On Modem Ring",
- "options": [
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_wake on modem ring_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_com.apple.energysaver.portable.batterypower_wake on modem ring_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_com.apple.mcx-accounts",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.mcx-energysaver",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.mcx-fdefilevaultoptions",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.mcx-mobileaccounts",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcx_com.apple.mcx-timeserver",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcx_destroyfvkeyonstandby",
- "displayName": "Destroy FV Key On Standby",
- "options": [
- {
- "id": "com.apple.mcx_destroyfvkeyonstandby_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_destroyfvkeyonstandby_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_disableguestaccount",
- "displayName": "Disable Guest Account",
- "options": [
- {
- "id": "com.apple.mcx_disableguestaccount_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_disableguestaccount_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_dontallowfdedisable",
- "displayName": "Prevent FileVault From Being Disabled",
- "options": [
- {
- "id": "com.apple.mcx_dontallowfdedisable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_dontallowfdedisable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_dontallowfdeenable",
- "displayName": "Prevent FileVault From Being Enabled",
- "options": [
- {
- "id": "com.apple.mcx_dontallowfdeenable_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_dontallowfdeenable_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_enableguestaccount",
- "displayName": "Enable Guest Account",
- "options": [
- {
- "id": "com.apple.mcx_enableguestaccount_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_enableguestaccount_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_sleepdisabled",
- "displayName": "Sleep Disabled",
- "options": [
- {
- "id": "com.apple.mcx_sleepdisabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx_sleepdisabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx_timeserver",
- "displayName": "Time Server",
- "options": null
- },
- {
- "id": "com.apple.mcx_timezone",
- "displayName": "Time Zone",
- "options": null
- },
- {
- "id": "com.apple.mcx.filevault2_com.apple.mcx.filevault2",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcx.filevault2_defer",
- "displayName": "Defer",
- "options": {
- "id": "com.apple.mcx.filevault2_defer_true",
- "displayName": "Enabled",
- "description": null
- }
- },
- {
- "id": "com.apple.mcx.filevault2_deferdontaskatuserlogout",
- "displayName": "Defer Dont Ask At User Logout",
- "options": [
- {
- "id": "com.apple.mcx.filevault2_deferdontaskatuserlogout_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_deferdontaskatuserlogout_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.filevault2_deferforceatuserloginmaxbypassattempts",
- "displayName": "Defer Force At User Login Max Bypass Attempts",
- "options": null
- },
- {
- "id": "com.apple.mcx.filevault2_enable",
- "displayName": "Enable",
- "options": [
- {
- "id": "com.apple.mcx.filevault2_enable_0",
- "displayName": "On",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_enable_1",
- "displayName": "Off",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.filevault2_forceenableinsetupassistant",
- "displayName": "Force Enable In Setup Assistant",
- "options": [
- {
- "id": "com.apple.mcx.filevault2_forceenableinsetupassistant_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_forceenableinsetupassistant_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.filevault2_outputpath",
- "displayName": "Output Path",
- "options": null
- },
- {
- "id": "com.apple.mcx.filevault2_password",
- "displayName": "Password",
- "options": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths",
- "displayName": "Recovery Key Rotation In Months",
- "options": [
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_0",
- "displayName": "Not configured",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_1",
- "displayName": "1 month",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_2",
- "displayName": "2 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_3",
- "displayName": "3 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_4",
- "displayName": "4 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_5",
- "displayName": "5 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_6",
- "displayName": "6 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_7",
- "displayName": "7 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_8",
- "displayName": "8 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_9",
- "displayName": "9 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_10",
- "displayName": "10 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_11",
- "displayName": "11 months",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_recoverykeyrotationinmonths_12",
- "displayName": "12 months",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.filevault2_showrecoverykey",
- "displayName": "Show Recovery Key",
- "options": [
- {
- "id": "com.apple.mcx.filevault2_showrecoverykey_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_showrecoverykey_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.filevault2_usekeychain",
- "displayName": "Use Keychain",
- "options": [
- {
- "id": "com.apple.mcx.filevault2_usekeychain_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_usekeychain_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.filevault2_userecoverykey",
- "displayName": "Use Recovery Key",
- "options": {
- "id": "com.apple.mcx.filevault2_userecoverykey_true",
- "displayName": "Enabled",
- "description": null
- }
- },
- {
- "id": "com.apple.mcx.filevault2_userentersmissinginfo",
- "displayName": "User Enters Missing Info",
- "options": [
- {
- "id": "com.apple.mcx.filevault2_userentersmissinginfo_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx.filevault2_userentersmissinginfo_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.filevault2_username",
- "displayName": "Username",
- "options": null
- },
- {
- "id": "com.apple.mcx.timemachine_autobackup",
- "displayName": "Auto Backup",
- "options": [
- {
- "id": "com.apple.mcx.timemachine_autobackup_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx.timemachine_autobackup_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.timemachine_backupallvolumes",
- "displayName": "Backup All Volumes",
- "options": [
- {
- "id": "com.apple.mcx.timemachine_backupallvolumes_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx.timemachine_backupallvolumes_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.timemachine_backupdesturl",
- "displayName": "Backup Destination URL",
- "options": null
- },
- {
- "id": "com.apple.mcx.timemachine_backupsizemb",
- "displayName": "Backup Size MB",
- "options": null
- },
- {
- "id": "com.apple.mcx.timemachine_backupskipsys",
- "displayName": "Backup Skip System",
- "options": [
- {
- "id": "com.apple.mcx.timemachine_backupskipsys_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx.timemachine_backupskipsys_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.timemachine_basepaths",
- "displayName": "Base Paths",
- "options": null
- },
- {
- "id": "com.apple.mcx.timemachine_com.apple.mcx.timemachine",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcx.timemachine_mobilebackups",
- "displayName": "Mobile Backups",
- "options": [
- {
- "id": "com.apple.mcx.timemachine_mobilebackups_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcx.timemachine_mobilebackups_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcx.timemachine_skippaths",
- "displayName": "Skip Paths",
- "options": null
- },
- {
- "id": "com.apple.mcxmenuextras_airport.menu",
- "displayName": "AirPort",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_airport.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_airport.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_battery.menu",
- "displayName": "Battery",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_battery.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_battery.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_bluetooth.menu",
- "displayName": "Bluetooth",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_bluetooth.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_bluetooth.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_clock.menu",
- "displayName": "Clock",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_clock.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_clock.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_com.apple.mcxmenuextras",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcxmenuextras_cpu.menu",
- "displayName": "CPU",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_cpu.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_cpu.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_delayseconds",
- "displayName": "Delay Seconds",
- "options": null
- },
- {
- "id": "com.apple.mcxmenuextras_displays.menu",
- "displayName": "Displays",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_displays.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_displays.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_eject.menu",
- "displayName": "Eject",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_eject.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_eject.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_fax.menu",
- "displayName": "Fax",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_fax.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_fax.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_homesync.menu",
- "displayName": "HomeSync",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_homesync.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_homesync.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_ichat.menu",
- "displayName": "iChat",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_ichat.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_ichat.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_ink.menu",
- "displayName": "Ink",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_ink.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_ink.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_irda.menu",
- "displayName": "IrDA",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_irda.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_irda.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_maxwaitseconds",
- "displayName": "Max Wait Seconds",
- "options": null
- },
- {
- "id": "com.apple.mcxmenuextras_pccard.menu",
- "displayName": "PCCard",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_pccard.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_pccard.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_ppp.menu",
- "displayName": "PPP",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_ppp.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_ppp.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_pppoe.menu",
- "displayName": "PPPoE",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_pppoe.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_pppoe.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_remotedesktop.menu",
- "displayName": "Remote Desktop",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_remotedesktop.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_remotedesktop.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_script menu.menu",
- "displayName": "Script Menu",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_script menu.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_script menu.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_spaces.menu",
- "displayName": "Spaces",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_spaces.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_spaces.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_sync.menu",
- "displayName": "Sync",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_sync.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_sync.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_textinput.menu",
- "displayName": "Text Input",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_textinput.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_textinput.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_timemachine.menu",
- "displayName": "TimeMachine",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_timemachine.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_timemachine.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_universalaccess.menu",
- "displayName": "Universal Access",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_universalaccess.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_universalaccess.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_user.menu",
- "displayName": "User",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_user.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_user.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_volume.menu",
- "displayName": "Volume",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_volume.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_volume.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_vpn.menu",
- "displayName": "VPN",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_vpn.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_vpn.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxmenuextras_wwan.menu",
- "displayName": "WWAN",
- "options": [
- {
- "id": "com.apple.mcxmenuextras_wwan.menu_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxmenuextras_wwan.menu_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxprinting_allowlocalprinters",
- "displayName": "Allow Local Printers",
- "options": [
- {
- "id": "com.apple.mcxprinting_allowlocalprinters_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxprinting_allowlocalprinters_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxprinting_com.apple.mcxprinting",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_defaultprinter",
- "displayName": "Default Printer",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_defaultprinter_deviceuri",
- "displayName": "Device URI",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_defaultprinter_displayname",
- "displayName": "Display Name",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_footerfontname",
- "displayName": "Footer Font Name",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_footerfontsize",
- "displayName": "Footer Font Size",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_printfooter",
- "displayName": "Print Footer",
- "options": [
- {
- "id": "com.apple.mcxprinting_printfooter_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxprinting_printfooter_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxprinting_printmacaddress",
- "displayName": "Print MAC Address",
- "options": [
- {
- "id": "com.apple.mcxprinting_printmacaddress_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxprinting_printmacaddress_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxprinting_requireadmintoaddprinters",
- "displayName": "Require Admin To Add Printers",
- "options": [
- {
- "id": "com.apple.mcxprinting_requireadmintoaddprinters_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxprinting_requireadmintoaddprinters_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxprinting_requireadmintoprintlocally",
- "displayName": "Require Admin To Print Locally",
- "options": [
- {
- "id": "com.apple.mcxprinting_requireadmintoprintlocally_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxprinting_requireadmintoprintlocally_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxprinting_showonlymanagedprinters",
- "displayName": "Show Only Managed Printers",
- "options": [
- {
- "id": "com.apple.mcxprinting_showonlymanagedprinters_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxprinting_showonlymanagedprinters_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist",
- "displayName": "User Printer List",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer",
- "displayName": "Printer",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer_deviceuri",
- "displayName": "Device URI",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer_displayname",
- "displayName": "Display Name",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer_location",
- "displayName": "Location",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer_model",
- "displayName": "Model",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer_ppdurl",
- "displayName": "PPD URL",
- "options": null
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer_printerlocked",
- "displayName": "Printer Locked",
- "options": [
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer_printerlocked_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mcxprinting_userprinterlist_printer_printerlocked_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_allowsimple",
- "displayName": "Allow Simple Passcode",
- "options": [
- {
- "id": "com.apple.mobiledevice.passwordpolicy_allowsimple_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_allowsimple_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_changeatnextauth",
- "displayName": "Change At Next Auth",
- "options": [
- {
- "id": "com.apple.mobiledevice.passwordpolicy_changeatnextauth_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_changeatnextauth_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_com.apple.mobiledevice.passwordpolicy",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_customregex",
- "displayName": "Custom Regex",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_customregex_passwordcontentdescription",
- "displayName": "Password Content Description",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_customregex_passwordcontentdescription_generickey",
- "displayName": "Description",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_customregex_passwordcontentdescription_generickey_keytobereplaced",
- "displayName": "Password Content Description",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_customregex_passwordcontentregex",
- "displayName": "Password Content Regex",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_forcepin",
- "displayName": "Force PIN",
- "options": [
- {
- "id": "com.apple.mobiledevice.passwordpolicy_forcepin_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_forcepin_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_maxfailedattempts",
- "displayName": "Max Failed Attempts",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_maxgraceperiod",
- "displayName": "Max Grace Period",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_maxinactivity",
- "displayName": "Max Inactivity",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_maxpinageindays",
- "displayName": "Max PIN Age In Days",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_mincomplexchars",
- "displayName": "Min Complex Characters",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_minlength",
- "displayName": "Min Length",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_minutesuntilfailedloginreset",
- "displayName": "Minutes Until Failed Login Reset",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_pinhistory",
- "displayName": "PIN History",
- "options": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_requirealphanumeric",
- "displayName": "Require Alphanumeric Passcode",
- "options": [
- {
- "id": "com.apple.mobiledevice.passwordpolicy_requirealphanumeric_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.mobiledevice.passwordpolicy_requirealphanumeric_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.networkusagerules_applicationrules",
- "displayName": "Application Rules",
- "options": null
- },
- {
- "id": "com.apple.networkusagerules_applicationrules_item_allowcellulardata",
- "displayName": "Allow Cellular Data",
- "options": [
- {
- "id": "com.apple.networkusagerules_applicationrules_item_allowcellulardata_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.networkusagerules_applicationrules_item_allowcellulardata_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.networkusagerules_applicationrules_item_allowroamingcellulardata",
- "displayName": "Allow Roaming Cellular Data",
- "options": [
- {
- "id": "com.apple.networkusagerules_applicationrules_item_allowroamingcellulardata_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.networkusagerules_applicationrules_item_allowroamingcellulardata_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.networkusagerules_applicationrules_item_appidentifiermatches",
- "displayName": "App Identifier Matches",
- "options": null
- },
- {
- "id": "com.apple.networkusagerules_com.apple.networkusagerules",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.networkusagerules_simrules",
- "displayName": "SIM Rules",
- "options": null
- },
- {
- "id": "com.apple.networkusagerules_simrules_item_iccids",
- "displayName": "ICCI Ds",
- "options": null
- },
- {
- "id": "com.apple.networkusagerules_simrules_item_wifiassistpolicy",
- "displayName": "Wi Fi Assist Policy",
- "options": [
- {
- "id": "com.apple.networkusagerules_simrules_item_wifiassistpolicy_0",
- "displayName": "2",
- "description": null
- },
- {
- "id": "com.apple.networkusagerules_simrules_item_wifiassistpolicy_1",
- "displayName": "3",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_com.apple.notificationsettings",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings",
- "displayName": "Notification Settings",
- "options": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_alerttype",
- "displayName": "Alert Type",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_alerttype_0",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_alerttype_1",
- "displayName": "Temporary Banner",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_alerttype_2",
- "displayName": "Persistent Banner",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_badgesenabled",
- "displayName": "Badges Enabled",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_badgesenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_badgesenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_bundleidentifier",
- "displayName": "Bundle Identifier",
- "options": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_criticalalertenabled",
- "displayName": "Critical Alert Enabled",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_criticalalertenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_criticalalertenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_groupingtype",
- "displayName": "Grouping Type",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_groupingtype_0",
- "displayName": "Automatic: Group notifications into app-specified groups",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_groupingtype_1",
- "displayName": "By app: Group notifications into one group",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_groupingtype_2",
- "displayName": "Off: Don't group notifications",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_notificationsenabled",
- "displayName": "Notifications Enabled",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_notificationsenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_notificationsenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_previewtype",
- "displayName": "Preview Type",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_previewtype_0",
- "displayName": "Always: Previews will be shown when the device is locked and unlocked",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_previewtype_1",
- "displayName": "When Unlocked: Previews will only be shown when the device is unlocked",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_previewtype_2",
- "displayName": "Never: Previews will never be shown",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showincarplay",
- "displayName": "Show In Car Play",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showincarplay_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showincarplay_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showinlockscreen",
- "displayName": "Show In Lock Screen",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showinlockscreen_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showinlockscreen_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showinnotificationcenter",
- "displayName": "Show In Notification Center",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showinnotificationcenter_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_showinnotificationcenter_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_soundsenabled",
- "displayName": "Sounds Enabled",
- "options": [
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_soundsenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.notificationsettings_notificationsettings_item_soundsenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.nsextension_allowedextensions",
- "displayName": "Allowed Extensions",
- "options": null
- },
- {
- "id": "com.apple.nsextension_com.apple.nsextension",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.nsextension_deniedextensionpoints",
- "displayName": "Denied Extension Points",
- "options": null
- },
- {
- "id": "com.apple.nsextension_deniedextensions",
- "displayName": "Denied Extensions",
- "options": null
- },
- {
- "id": "com.apple.preference.security_com.apple.preference.security",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.preference.security_dontallowfirewallui",
- "displayName": "Do Not Allow Firewall UI",
- "options": [
- {
- "id": "com.apple.preference.security_dontallowfirewallui_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.preference.security_dontallowfirewallui_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.preference.security_dontallowlockmessageui",
- "displayName": "Do Not Allow Lock Message UI",
- "options": [
- {
- "id": "com.apple.preference.security_dontallowlockmessageui_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.preference.security_dontallowlockmessageui_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.preference.security_dontallowpasswordresetui",
- "displayName": "Do Not Allow Password Reset UI",
- "options": [
- {
- "id": "com.apple.preference.security_dontallowpasswordresetui_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.preference.security_dontallowpasswordresetui_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.preference.users_com.apple.preference.users",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.preference.users_disableusingicloudpassword",
- "displayName": "Disable Using iCloud Password",
- "options": [
- {
- "id": "com.apple.preference.users_disableusingicloudpassword_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.preference.users_disableusingicloudpassword_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.profileremovalpassword_com.apple.profileremovalpassword",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.profileremovalpassword_removalpassword",
- "displayName": "Removal Password",
- "options": null
- },
- {
- "id": "com.apple.proxy.http.global_com.apple.proxy.http.global",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.proxy.http.global_proxycaptiveloginallowed",
- "displayName": "Proxy Captive Login Allowed",
- "options": [
- {
- "id": "com.apple.proxy.http.global_proxycaptiveloginallowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.proxy.http.global_proxycaptiveloginallowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.proxy.http.global_proxypacfallbackallowed",
- "displayName": "Proxy PAC Fallback Allowed",
- "options": [
- {
- "id": "com.apple.proxy.http.global_proxypacfallbackallowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.proxy.http.global_proxypacfallbackallowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.proxy.http.global_proxypacurl",
- "displayName": "Proxy PAC URL",
- "options": null
- },
- {
- "id": "com.apple.proxy.http.global_proxypassword",
- "displayName": "Proxy Password",
- "options": null
- },
- {
- "id": "com.apple.proxy.http.global_proxyserver",
- "displayName": "Proxy Server",
- "options": null
- },
- {
- "id": "com.apple.proxy.http.global_proxyserverport",
- "displayName": "Proxy Server Port",
- "options": null
- },
- {
- "id": "com.apple.proxy.http.global_proxytype",
- "displayName": "Proxy Type",
- "options": [
- {
- "id": "com.apple.proxy.http.global_proxytype_0",
- "displayName": "Manual",
- "description": null
- },
- {
- "id": "com.apple.proxy.http.global_proxytype_1",
- "displayName": "Auto",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.proxy.http.global_proxyusername",
- "displayName": "Proxy Username",
- "options": null
- },
- {
- "id": "com.apple.screensaver_askforpassword",
- "displayName": "Ask For Password",
- "options": [
- {
- "id": "com.apple.screensaver_askforpassword_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.screensaver_askforpassword_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.screensaver_askforpassworddelay",
- "displayName": "Ask For Password Delay",
- "options": null
- },
- {
- "id": "com.apple.screensaver_com.apple.screensaver",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.screensaver_loginwindowidletime",
- "displayName": "Login Window Idle Time",
- "options": null
- },
- {
- "id": "com.apple.screensaver_loginwindowmodulepath",
- "displayName": "Login Window Module Path",
- "options": null
- },
- {
- "id": "com.apple.screensaver_modulename",
- "displayName": "Module Name",
- "options": null
- },
- {
- "id": "com.apple.screensaver.user_com.apple.screensaver.user",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.screensaver.user_idletime",
- "displayName": "Idle Time",
- "options": null
- },
- {
- "id": "com.apple.screensaver.user_modulename",
- "displayName": "Module Name",
- "options": null
- },
- {
- "id": "com.apple.screensaver.user_modulepath",
- "displayName": "Module Path",
- "options": null
- },
- {
- "id": "com.apple.security.fderecoverykeyescrow_com.apple.security.fderecoverykeyescrow",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.security.fderecoverykeyescrow_devicekey",
- "displayName": "Device Key",
- "options": null
- },
- {
- "id": "com.apple.security.fderecoverykeyescrow_location",
- "displayName": "Location",
- "options": null
- },
- {
- "id": "com.apple.security.firewall_allowsigned",
- "displayName": "Allow Signed",
- "options": [
- {
- "id": "com.apple.security.firewall_allowsigned_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_allowsigned_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.firewall_allowsignedapp",
- "displayName": "Allow Signed App",
- "options": [
- {
- "id": "com.apple.security.firewall_allowsignedapp_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_allowsignedapp_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.firewall_applications",
- "displayName": "Applications",
- "options": null
- },
- {
- "id": "com.apple.security.firewall_applications_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.security.firewall_applications_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_applications_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.firewall_applications_item_bundleid",
- "displayName": "Bundle ID",
- "options": null
- },
- {
- "id": "com.apple.security.firewall_blockallincoming",
- "displayName": "Block All Incoming",
- "options": [
- {
- "id": "com.apple.security.firewall_blockallincoming_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_blockallincoming_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.firewall_com.apple.security.firewall",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.security.firewall_enablefirewall",
- "displayName": "Enable Firewall",
- "options": [
- {
- "id": "com.apple.security.firewall_enablefirewall_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_enablefirewall_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.firewall_enablelogging",
- "displayName": "Enable Logging (Deprecated)",
- "options": [
- {
- "id": "com.apple.security.firewall_enablelogging_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_enablelogging_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.firewall_enablestealthmode",
- "displayName": "Enable Stealth Mode",
- "options": [
- {
- "id": "com.apple.security.firewall_enablestealthmode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_enablestealthmode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.firewall_loggingoption",
- "displayName": "Logging Option (Deprecated)",
- "options": [
- {
- "id": "com.apple.security.firewall_loggingoption_0",
- "displayName": "throttled",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_loggingoption_1",
- "displayName": "brief",
- "description": null
- },
- {
- "id": "com.apple.security.firewall_loggingoption_2",
- "displayName": "detail",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.smartcard_allowsmartcard",
- "displayName": "Allow Smart Card",
- "options": [
- {
- "id": "com.apple.security.smartcard_allowsmartcard_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.smartcard_allowsmartcard_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.smartcard_checkcertificatetrust",
- "displayName": "Check Certificate Trust",
- "options": [
- {
- "id": "com.apple.security.smartcard_checkcertificatetrust_0",
- "displayName": "Disable certificate trust check",
- "description": null
- },
- {
- "id": "com.apple.security.smartcard_checkcertificatetrust_1",
- "displayName": "Enable certificate trust check and standard validity check",
- "description": null
- },
- {
- "id": "com.apple.security.smartcard_checkcertificatetrust_2",
- "displayName": "Enable certificate trust check and soft revocation check",
- "description": null
- },
- {
- "id": "com.apple.security.smartcard_checkcertificatetrust_3",
- "displayName": "Enable certificate trust check and hard revocation check",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.smartcard_com.apple.security.smartcard",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.security.smartcard_enforcesmartcard",
- "displayName": "Enforce Smart Card",
- "options": [
- {
- "id": "com.apple.security.smartcard_enforcesmartcard_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.smartcard_enforcesmartcard_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.smartcard_onecardperuser",
- "displayName": "One Card Per User",
- "options": [
- {
- "id": "com.apple.security.smartcard_onecardperuser_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.smartcard_onecardperuser_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.smartcard_tokenremovalaction",
- "displayName": "Token Removal Action",
- "options": [
- {
- "id": "com.apple.security.smartcard_tokenremovalaction_0",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.security.smartcard_tokenremovalaction_1",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.security.smartcard_userpairing",
- "displayName": "User Pairing",
- "options": [
- {
- "id": "com.apple.security.smartcard_userpairing_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.security.smartcard_userpairing_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.servicemanagement_com.apple.servicemanagement",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.servicemanagement_rules",
- "displayName": "Rules",
- "options": null
- },
- {
- "id": "com.apple.servicemanagement_rules_item_comment",
- "displayName": "Comment",
- "options": null
- },
- {
- "id": "com.apple.servicemanagement_rules_item_ruletype",
- "displayName": "Rule Type",
- "options": [
- {
- "id": "com.apple.servicemanagement_rules_item_ruletype_0",
- "displayName": "Bundle Identifier",
- "description": null
- },
- {
- "id": "com.apple.servicemanagement_rules_item_ruletype_1",
- "displayName": "Bundle Identifier Prefix",
- "description": null
- },
- {
- "id": "com.apple.servicemanagement_rules_item_ruletype_2",
- "displayName": "Label",
- "description": null
- },
- {
- "id": "com.apple.servicemanagement_rules_item_ruletype_3",
- "displayName": "Label Prefix",
- "description": null
- },
- {
- "id": "com.apple.servicemanagement_rules_item_ruletype_4",
- "displayName": "Team Identifier",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.servicemanagement_rules_item_rulevalue",
- "displayName": "Rule Value",
- "options": null
- },
- {
- "id": "com.apple.servicemanagement_rules_item_teamidentifier",
- "displayName": "Team Identifier",
- "options": null
- },
- {
- "id": "com.apple.shareddeviceconfiguration_assettaginformation",
- "displayName": "Asset Tag Information",
- "options": null
- },
- {
- "id": "com.apple.shareddeviceconfiguration_com.apple.shareddeviceconfiguration",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.shareddeviceconfiguration_lockscreenfootnote",
- "displayName": "Lock Screen Footnote",
- "options": null
- },
- {
- "id": "com.apple.softwareupdate_allowprereleaseinstallation",
- "displayName": "Allow Pre Release Installation (Deprecated)",
- "options": [
- {
- "id": "com.apple.softwareupdate_allowprereleaseinstallation_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.softwareupdate_allowprereleaseinstallation_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.softwareupdate_automaticallyinstallappupdates",
- "displayName": "Automatically Install App Updates (Deprecated)",
- "options": [
- {
- "id": "com.apple.softwareupdate_automaticallyinstallappupdates_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.softwareupdate_automaticallyinstallappupdates_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.softwareupdate_automaticallyinstallmacosupdates",
- "displayName": "Automatically Install Mac OS Updates (Deprecated)",
- "options": [
- {
- "id": "com.apple.softwareupdate_automaticallyinstallmacosupdates_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.softwareupdate_automaticallyinstallmacosupdates_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.softwareupdate_automaticcheckenabled",
- "displayName": "Automatic Check Enabled (Deprecated)",
- "options": [
- {
- "id": "com.apple.softwareupdate_automaticcheckenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.softwareupdate_automaticcheckenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.softwareupdate_automaticdownload",
- "displayName": "Automatic Download (Deprecated)",
- "options": [
- {
- "id": "com.apple.softwareupdate_automaticdownload_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.softwareupdate_automaticdownload_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.softwareupdate_com.apple.softwareupdate",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.softwareupdate_configdatainstall",
- "displayName": "Config Data Install (Deprecated)",
- "options": [
- {
- "id": "com.apple.softwareupdate_configdatainstall_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.softwareupdate_configdatainstall_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.softwareupdate_criticalupdateinstall",
- "displayName": "Critical Update Install (Deprecated)",
- "options": [
- {
- "id": "com.apple.softwareupdate_criticalupdateinstall_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.softwareupdate_criticalupdateinstall_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.softwareupdate_restrict-software-update-require-admin-to-install",
- "displayName": "Restrict Software Update Require Admin To Install (Deprecated)",
- "options": [
- {
- "id": "com.apple.softwareupdate_restrict-software-update-require-admin-to-install_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.softwareupdate_restrict-software-update-require-admin-to-install_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.subscribedcalendar.account_com.apple.subscribedcalendar.account",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.subscribedcalendar.account_subcalaccountdescription",
- "displayName": "Account Description",
- "options": null
- },
- {
- "id": "com.apple.subscribedcalendar.account_subcalaccounthostname",
- "displayName": "Account Host Name",
- "options": null
- },
- {
- "id": "com.apple.subscribedcalendar.account_subcalaccountpassword",
- "displayName": "Account Password",
- "options": null
- },
- {
- "id": "com.apple.subscribedcalendar.account_subcalaccountusername",
- "displayName": "Account Username",
- "options": null
- },
- {
- "id": "com.apple.subscribedcalendar.account_subcalaccountusessl",
- "displayName": "Account Use SSL",
- "options": [
- {
- "id": "com.apple.subscribedcalendar.account_subcalaccountusessl_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.subscribedcalendar.account_subcalaccountusessl_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.system-extension-policy_allowedsystemextensions",
- "displayName": "Allowed System Extensions",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_allowedsystemextensions_generickey",
- "displayName": "Allowed System Extensions",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_allowedsystemextensions_generickey_keytobereplaced",
- "displayName": "Team Identifier",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_allowedsystemextensiontypes",
- "displayName": "Allowed System Extension Types",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_allowedsystemextensiontypes_generickey",
- "displayName": "Allowed System Extension Types",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_allowedsystemextensiontypes_generickey_keytobereplaced",
- "displayName": "Team Identifier",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_allowedteamidentifiers",
- "displayName": "Allowed Team Identifiers",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_allowuseroverrides",
- "displayName": "Allow User Overrides",
- "options": [
- {
- "id": "com.apple.system-extension-policy_allowuseroverrides_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.system-extension-policy_allowuseroverrides_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.system-extension-policy_com.apple.system-extension-policy",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_nonremovablefromuisystemextensions",
- "displayName": "Non Removable From UI System Extensions",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_nonremovablefromuisystemextensions_generickey",
- "displayName": "ANY",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_nonremovablefromuisystemextensions_generickey_keytobereplaced",
- "displayName": "Non Removable From UI System Extensions",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_nonremovablesystemextensions",
- "displayName": "Non Removable System Extensions",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_nonremovablesystemextensions_generickey",
- "displayName": "ANY",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_nonremovablesystemextensions_generickey_keytobereplaced",
- "displayName": "Non Removable System Extensions",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_removablesystemextensions",
- "displayName": "Removable System Extensions",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_removablesystemextensions_generickey",
- "displayName": "Removable System Extensions",
- "options": null
- },
- {
- "id": "com.apple.system-extension-policy_removablesystemextensions_generickey_keytobereplaced",
- "displayName": "Team Identifier",
- "options": null
- },
- {
- "id": "com.apple.system.logging_com.apple.system.logging",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.system.logging_system",
- "displayName": "System",
- "options": null
- },
- {
- "id": "com.apple.system.logging_system_enable-private-data",
- "displayName": "Enable Private Data",
- "options": [
- {
- "id": "com.apple.system.logging_system_enable-private-data_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.system.logging_system_enable-private-data_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_com.apple.systemconfiguration",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies",
- "displayName": "Proxies",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_exceptionslist",
- "displayName": "Exceptions List",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_fallbackallowed",
- "displayName": "Fall Back Allowed",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_fallbackallowed_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_fallbackallowed_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_ftpenable",
- "displayName": "FTP Enable",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_ftpenable_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_ftpenable_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_ftppassive",
- "displayName": "FTP Passive",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_ftppassive_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_ftppassive_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_ftpport",
- "displayName": "FTP Port",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_ftpproxy",
- "displayName": "FTP Proxy",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_gopherenable",
- "displayName": "Gopher Enable",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_gopherenable_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_gopherenable_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_gopherport",
- "displayName": "Gopher Port",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_gopherproxy",
- "displayName": "Gopher Proxy",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_httpenable",
- "displayName": "HTTP Enable",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_httpenable_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_httpenable_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_httpport",
- "displayName": "HTTP Port",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_httpproxy",
- "displayName": "HTTP Proxy",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_httpsenable",
- "displayName": "HTTPS Enable",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_httpsenable_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_httpsenable_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_httpsport",
- "displayName": "HTTPS Port",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_httpsproxy",
- "displayName": "HTTPS Proxy",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_proxyautoconfigenable",
- "displayName": "Proxy Auto Config Enable",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_proxyautoconfigenable_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_proxyautoconfigenable_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_proxyautoconfigurlstring",
- "displayName": "Proxy Auto Config URL String",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_proxycaptiveloginallowed",
- "displayName": "Proxy Captive Login Allowed",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_proxycaptiveloginallowed_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_proxycaptiveloginallowed_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_rtspenable",
- "displayName": "RTSP Enable",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_rtspenable_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_rtspenable_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_rtspport",
- "displayName": "RTSP Port",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_rtspproxy",
- "displayName": "RTSP Proxy",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_socksenable",
- "displayName": "SOCKS Enable",
- "options": [
- {
- "id": "com.apple.systemconfiguration_proxies_socksenable_0",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_socksenable_1",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systemconfiguration_proxies_socksportinteger",
- "displayName": "SOCKS Port Integer",
- "options": null
- },
- {
- "id": "com.apple.systemconfiguration_proxies_socksproxy",
- "displayName": "SOCKS Proxy",
- "options": null
- },
- {
- "id": "com.apple.systempolicy.control_allowidentifieddevelopers",
- "displayName": "Allow Identified Developers",
- "options": [
- {
- "id": "com.apple.systempolicy.control_allowidentifieddevelopers_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systempolicy.control_allowidentifieddevelopers_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systempolicy.control_com.apple.systempolicy.control",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.systempolicy.control_enableassessment",
- "displayName": "Enable Assessment",
- "options": [
- {
- "id": "com.apple.systempolicy.control_enableassessment_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systempolicy.control_enableassessment_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systempolicy.control_enablexprotectmalwareupload",
- "displayName": "Enable XProtect Malware Upload",
- "options": [
- {
- "id": "com.apple.systempolicy.control_enablexprotectmalwareupload_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.systempolicy.control_enablexprotectmalwareupload_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systempolicy.managed_com.apple.systempolicy.managed",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.systempolicy.managed_disableoverride",
- "displayName": "Disable Override",
- "options": [
- {
- "id": "com.apple.systempolicy.managed_disableoverride_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.systempolicy.managed_disableoverride_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.systempreferences_com.apple.systempreferences",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.systempreferences_disabledpreferencepanes",
- "displayName": "Disabled Preference Panes",
- "options": null
- },
- {
- "id": "com.apple.systempreferences_enabledpreferencepanes",
- "displayName": "Enabled Preference Panes",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_com.apple.tcc.configuration-profile-policy",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services",
- "displayName": "Services",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility",
- "displayName": "Accessibility",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_accessibility_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook",
- "displayName": "Address Book",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_addressbook_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents",
- "displayName": "Apple Events",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_aereceivercoderequirement",
- "displayName": "AE Receiver Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_aereceiveridentifier",
- "displayName": "AE Receiver Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_aereceiveridentifiertype",
- "displayName": "AE Receiver Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_aereceiveridentifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_aereceiveridentifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_appleevents_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways",
- "displayName": "Bluetooth Always",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_aereceivercoderequirement",
- "displayName": "AE Receiver Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_aereceiveridentifier",
- "displayName": "AE Receiver Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_aereceiveridentifiertype",
- "displayName": "AE Receiver Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_aereceiveridentifiertype_0",
- "displayName": "bundleID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_aereceiveridentifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_allowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_allowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_authorization_2",
- "displayName": "AllowStandardUserToSetSystemService",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_comment",
- "displayName": "Comment",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_identifiertype_0",
- "displayName": "bundleID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_staticcode_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_bluetoothalways_item_staticcode_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar",
- "displayName": "Calendar",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_calendar_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera",
- "displayName": "Camera",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_camera_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence",
- "displayName": "File Provider Presence",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_fileproviderpresence_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent",
- "displayName": "Listen Event",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_allowed",
- "displayName": "Allowed (Deprecated)",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_listenevent_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary",
- "displayName": "Media Library",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_medialibrary_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone",
- "displayName": "Microphone",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_microphone_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos",
- "displayName": "Photos",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_photos_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent",
- "displayName": "Post Event",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_postevent_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders",
- "displayName": "Reminders",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_reminders_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture",
- "displayName": "Screen Capture",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_allowed",
- "displayName": "Allowed (Deprecated)",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_screencapture_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition",
- "displayName": "Speech Recognition",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_speechrecognition_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles",
- "displayName": "System Policy All Files",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyallfiles_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles",
- "displayName": "System Policy App Bundles",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappbundles_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata",
- "displayName": "System Policy App Data",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_allowed_false",
- "displayName": "Blocked",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_allowed_true",
- "displayName": "Allowed",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_authorization_2",
- "displayName": "AllowStandardUserToSetSystemService",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_identifiertype_0",
- "displayName": "bundleID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_staticcode_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyappdata_item_staticcode_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder",
- "displayName": "System Policy Desktop Folder",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydesktopfolder_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder",
- "displayName": "System Policy Documents Folder",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydocumentsfolder_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder",
- "displayName": "System Policy Downloads Folder",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicydownloadsfolder_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes",
- "displayName": "System Policy Network Volumes",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicynetworkvolumes_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes",
- "displayName": "System Policy Removable Volumes",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicyremovablevolumes_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles",
- "displayName": "System Policy Sys Admin Files",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_allowed",
- "displayName": "Allowed",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_allowed_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_allowed_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_authorization",
- "displayName": "Authorization",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_authorization_0",
- "displayName": "Allow",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_authorization_1",
- "displayName": "Deny",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_authorization_2",
- "displayName": "Allow Standard User To Set System Service",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_coderequirement",
- "displayName": "Code Requirement",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_identifier",
- "displayName": "Identifier",
- "options": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_identifiertype",
- "displayName": "Identifier Type",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_identifiertype_0",
- "displayName": "bundle ID",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_identifiertype_1",
- "displayName": "path",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_staticcode",
- "displayName": "Static Code",
- "options": [
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_staticcode_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.tcc.configuration-profile-policy_services_systempolicysysadminfiles_item_staticcode_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_closeviewfarpoint",
- "displayName": "Close View Far Point",
- "options": null
- },
- {
- "id": "com.apple.universalaccess_closeviewhotkeysenabled",
- "displayName": "Close View Hotkeys Enabled",
- "options": [
- {
- "id": "com.apple.universalaccess_closeviewhotkeysenabled_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_closeviewhotkeysenabled_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_closeviewnearpoint",
- "displayName": "Close View Near Point",
- "options": null
- },
- {
- "id": "com.apple.universalaccess_closeviewscrollwheeltoggle",
- "displayName": "Close View Scroll Wheel Toggle",
- "options": [
- {
- "id": "com.apple.universalaccess_closeviewscrollwheeltoggle_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_closeviewscrollwheeltoggle_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_closeviewsmoothimages",
- "displayName": "Close View Smooth Images",
- "options": [
- {
- "id": "com.apple.universalaccess_closeviewsmoothimages_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_closeviewsmoothimages_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_com.apple.universalaccess",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.universalaccess_contrast",
- "displayName": "Contrast",
- "options": null
- },
- {
- "id": "com.apple.universalaccess_flashscreen",
- "displayName": "Flash Screen",
- "options": [
- {
- "id": "com.apple.universalaccess_flashscreen_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_flashscreen_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_mousedriver",
- "displayName": "Mouse Driver",
- "options": [
- {
- "id": "com.apple.universalaccess_mousedriver_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_mousedriver_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_mousedrivercursorsize",
- "displayName": "Mouse Driver Cursor Size",
- "options": null
- },
- {
- "id": "com.apple.universalaccess_mousedriverignoretrackpad",
- "displayName": "Mouse Driver Ignore Trackpad",
- "options": [
- {
- "id": "com.apple.universalaccess_mousedriverignoretrackpad_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_mousedriverignoretrackpad_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_mousedriverinitialdelay",
- "displayName": "Mouse Driver Initial Delay",
- "options": null
- },
- {
- "id": "com.apple.universalaccess_mousedrivermaxspeed",
- "displayName": "Mouse Driver Max Speed",
- "options": null
- },
- {
- "id": "com.apple.universalaccess_slowkey",
- "displayName": "Slow Key",
- "options": [
- {
- "id": "com.apple.universalaccess_slowkey_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_slowkey_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_slowkeybeepon",
- "displayName": "Slow Key Beep On",
- "options": [
- {
- "id": "com.apple.universalaccess_slowkeybeepon_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_slowkeybeepon_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_slowkeydelay",
- "displayName": "Slow Key Delay",
- "options": null
- },
- {
- "id": "com.apple.universalaccess_stereoasmono",
- "displayName": "Stereo as Mono",
- "options": [
- {
- "id": "com.apple.universalaccess_stereoasmono_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_stereoasmono_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_stickykey",
- "displayName": "Sticky Key",
- "options": [
- {
- "id": "com.apple.universalaccess_stickykey_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_stickykey_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_stickykeybeeponmodifier",
- "displayName": "Sticky Key Beep On Modifier",
- "options": [
- {
- "id": "com.apple.universalaccess_stickykeybeeponmodifier_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_stickykeybeeponmodifier_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_stickykeyshowwindow",
- "displayName": "Sticky Key Show Window",
- "options": [
- {
- "id": "com.apple.universalaccess_stickykeyshowwindow_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_stickykeyshowwindow_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_voiceoveronoffkey",
- "displayName": "Voice Over On Off Key",
- "options": [
- {
- "id": "com.apple.universalaccess_voiceoveronoffkey_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_voiceoveronoffkey_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.universalaccess_whiteonblack",
- "displayName": "White On Black",
- "options": [
- {
- "id": "com.apple.universalaccess_whiteonblack_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.universalaccess_whiteonblack_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_allowlistbookmarks",
- "displayName": "Allow List Bookmarks",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_allowlistbookmarks_item_title",
- "displayName": "Title",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_allowlistbookmarks_item_url",
- "displayName": "URL",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_autofilterenabled",
- "displayName": "Auto Filter Enabled",
- "options": [
- {
- "id": "com.apple.webcontent-filter_autofilterenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.webcontent-filter_autofilterenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_com.apple.webcontent-filter",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_denylisturls",
- "displayName": "Deny List URLs",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_filterbrowsers",
- "displayName": "Filter Browsers",
- "options": [
- {
- "id": "com.apple.webcontent-filter_filterbrowsers_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.webcontent-filter_filterbrowsers_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_filterdataproviderbundleidentifier",
- "displayName": "Filter Data Provider Bundle Identifier",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_filterdataproviderdesignatedrequirement",
- "displayName": "Filter Data Provider Designated Requirement",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_filtergrade",
- "displayName": "Filter Grade",
- "options": [
- {
- "id": "com.apple.webcontent-filter_filtergrade_0",
- "displayName": "firewall",
- "description": null
- },
- {
- "id": "com.apple.webcontent-filter_filtergrade_1",
- "displayName": "inspector",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_filterpacketproviderbundleidentifier",
- "displayName": "Filter Packet Provider Bundle Identifier",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_filterpacketproviderdesignatedrequirement",
- "displayName": "Filter Packet Provider Designated Requirement",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_filterpackets",
- "displayName": "Filter Packets",
- "options": [
- {
- "id": "com.apple.webcontent-filter_filterpackets_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.webcontent-filter_filterpackets_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_filtersockets",
- "displayName": "Filter Sockets",
- "options": [
- {
- "id": "com.apple.webcontent-filter_filtersockets_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.webcontent-filter_filtersockets_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_filtertype",
- "displayName": "Filter Type",
- "options": [
- {
- "id": "com.apple.webcontent-filter_filtertype_0",
- "displayName": "Built-in",
- "description": null
- },
- {
- "id": "com.apple.webcontent-filter_filtertype_1",
- "displayName": "Plug-in",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_hidedenylisturls",
- "displayName": "Hide Deny List UR Ls",
- "options": [
- {
- "id": "com.apple.webcontent-filter_hidedenylisturls_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.webcontent-filter_hidedenylisturls_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_organization",
- "displayName": "Organization",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_password",
- "displayName": "Password",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_permittedurls",
- "displayName": "Permitted URLs",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_pluginbundleid",
- "displayName": "Plugin Bundle ID",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_safarihistoryretentionenabled",
- "displayName": "Safari History Retention Enabled",
- "options": [
- {
- "id": "com.apple.webcontent-filter_safarihistoryretentionenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.apple.webcontent-filter_safarihistoryretentionenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.apple.webcontent-filter_serveraddress",
- "displayName": "Server Address",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_userdefinedname",
- "displayName": "User Defined Name",
- "options": null
- },
- {
- "id": "com.apple.webcontent-filter_username",
- "displayName": "User Name",
- "options": null
- },
- {
- "id": "com.apple.xsan_com.apple.xsan",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.xsan_fsnameservers",
- "displayName": "FS Name Servers",
- "options": null
- },
- {
- "id": "com.apple.xsan_sanauthmethod",
- "displayName": "San Auth Method",
- "options": {
- "id": "com.apple.xsan_sanauthmethod_0",
- "displayName": "auth_secret",
- "description": null
- }
- },
- {
- "id": "com.apple.xsan_sanconfigurls",
- "displayName": "San Config URLs",
- "options": null
- },
- {
- "id": "com.apple.xsan_sanname",
- "displayName": "San Name",
- "options": null
- },
- {
- "id": "com.apple.xsan_sharedsecret",
- "displayName": "Shared Secret",
- "options": null
- },
- {
- "id": "com.apple.xsan.preferences_com.apple.xsan.preferences",
- "displayName": "Top Level Setting Group Collection",
- "options": null
- },
- {
- "id": "com.apple.xsan.preferences_denydlc",
- "displayName": "Deny DLC",
- "options": null
- },
- {
- "id": "com.apple.xsan.preferences_denymount",
- "displayName": "Deny Mount",
- "options": null
- },
- {
- "id": "com.apple.xsan.preferences_onlymount",
- "displayName": "Only Mount",
- "options": null
- },
- {
- "id": "com.apple.xsan.preferences_preferdlc",
- "displayName": "Prefer DLC",
- "options": null
- },
- {
- "id": "com.apple.xsan.preferences_usedlc",
- "displayName": "Use DLC",
- "options": [
- {
- "id": "com.apple.xsan.preferences_usedlc_false",
- "displayName": "False",
- "description": null
- },
- {
- "id": "com.apple.xsan.preferences_usedlc_true",
- "displayName": "True",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.accesscontrolallowmethodsincorspreflightspecconformant",
- "displayName": "Make Access-Control-Allow-Methods matching in CORS preflight spec conformant",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.accesscontrolallowmethodsincorspreflightspecconformant_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.accesscontrolallowmethodsincorspreflightspecconformant_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.accessibilityimagelabelsenabled",
- "displayName": "Let screen reader users get image descriptions from Microsoft",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.accessibilityimagelabelsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.accessibilityimagelabelsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.additionalsearchboxenabled",
- "displayName": "Enable additional search box in browser",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.additionalsearchboxenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.additionalsearchboxenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbareditingenabled",
- "displayName": "Configure address bar editing",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbareditingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbareditingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbarmicrosoftsearchinbingproviderenabled",
- "displayName": "Enable Microsoft Search in Bing suggestions in the address bar (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbarmicrosoftsearchinbingproviderenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbarmicrosoftsearchinbingproviderenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbartrendingsuggestenabled",
- "displayName": "Enable Microsoft Bing trending suggestions in the address bar",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbartrendingsuggestenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbartrendingsuggestenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbarworksearchresultsenabled",
- "displayName": "Enable Work Search suggestions in the address bar",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbarworksearchresultsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.addressbarworksearchresultsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.adssettingforintrusiveadssites",
- "displayName": "Ads setting for sites with intrusive ads",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.adssettingforintrusiveadssites_allowads",
- "displayName": "Allow ads on all sites",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.adssettingforintrusiveadssites_blockads",
- "displayName": "Block ads on sites with intrusive ads. (Default value)",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.adstransparencyenabled",
- "displayName": "Configure if the ads transparency feature is enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.adstransparencyenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.adstransparencyenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.aigenthemesenabled",
- "displayName": "Enables DALL-E themes generation",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.aigenthemesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.aigenthemesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowbackforwardcacheforcachecontrolnostorepageenabled",
- "displayName": "Allow pages with Cache-Control: no-store header to enter back/forward cache",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowbackforwardcacheforcachecontrolnostorepageenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowbackforwardcacheforcachecontrolnostorepageenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowdeletingbrowserhistory",
- "displayName": "Enable deleting browser and download history",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowdeletingbrowserhistory_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowdeletingbrowserhistory_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alloweddomainsforapps",
- "displayName": "Define domains allowed to access Google Workspace",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowgamesmenu",
- "displayName": "Allow users to access the games menu (Deprecated)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowgamesmenu_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowgamesmenu_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowpopupsduringpageunload",
- "displayName": "Allows a page to show popups during its unloading (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowpopupsduringpageunload_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowpopupsduringpageunload_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsurfgame",
- "displayName": "Allow surf game",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsurfgame_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsurfgame_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsyncxhrinpagedismissal",
- "displayName": "Allow pages to send synchronous XHR requests during page dismissal (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsyncxhrinpagedismissal_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsyncxhrinpagedismissal_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsystemnotifications",
- "displayName": "Allows system notifications",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsystemnotifications_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowsystemnotifications_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowtrackingforurls",
- "displayName": "Configure tracking prevention exceptions for specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowwebauthnwithbrokentlscerts",
- "displayName": "Allow Web Authentication requests on sites with broken TLS certificates.",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowwebauthnwithbrokentlscerts_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.allowwebauthnwithbrokentlscerts_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alternateerrorpagesenabled",
- "displayName": "Suggest similar pages when a webpage can't be found",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alternateerrorpagesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alternateerrorpagesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alternateerrorpagesenabled_recommended",
- "displayName": "Suggest similar pages when a webpage can't be found (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alternateerrorpagesenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alternateerrorpagesenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alwaysopenpdfexternally",
- "displayName": "Always open PDF files externally",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alwaysopenpdfexternally_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.alwaysopenpdfexternally_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.askbeforecloseenabled",
- "displayName": "Get user confirmation before closing a browser window with multiple tabs",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.askbeforecloseenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.askbeforecloseenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.askbeforecloseenabled_recommended",
- "displayName": "Get user confirmation before closing a browser window with multiple tabs (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.askbeforecloseenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.askbeforecloseenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.audiocaptureallowedurls",
- "displayName": "Sites that can access audio capture devices without requesting permission",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autodiscardsleepingtabsenabled",
- "displayName": "Configure auto discard sleeping tabs",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autodiscardsleepingtabsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autodiscardsleepingtabsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autodiscardsleepingtabsenabled_recommended",
- "displayName": "Configure auto discard sleeping tabs (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autodiscardsleepingtabsenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autodiscardsleepingtabsenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofilladdressenabled",
- "displayName": "Enable AutoFill for addresses",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofilladdressenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofilladdressenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofilladdressenabled_recommended",
- "displayName": "Enable AutoFill for addresses (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofilladdressenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofilladdressenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillcreditcardenabled",
- "displayName": "Enable AutoFill for payment instruments",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillcreditcardenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillcreditcardenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillcreditcardenabled_recommended",
- "displayName": "Enable AutoFill for payment instruments (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillcreditcardenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillcreditcardenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillmembershipsenabled",
- "displayName": "Save and fill memberships",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillmembershipsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillmembershipsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillmembershipsenabled_recommended",
- "displayName": "Save and fill memberships (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillmembershipsenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autofillmembershipsenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autolaunchprotocolscomponentenabled",
- "displayName": "AutoLaunch Protocols Component Enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autolaunchprotocolscomponentenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autolaunchprotocolscomponentenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autolaunchprotocolsfromorigins",
- "displayName": "Define a list of protocols that can launch an external application from listed origins without prompting the user",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automaticdownloadsallowedforurls",
- "displayName": "Allow multiple automatic downloads in quick succession on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automaticdownloadsblockedforurls",
- "displayName": "Block multiple automatic downloads in quick succession on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automaticfullscreenallowedforurls",
- "displayName": "Allow automatic full screen on specified sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automaticfullscreenblockedforurls",
- "displayName": "Block automatic full screen on specified sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automatichttpsdefault",
- "displayName": "Configure Automatic HTTPS (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automatichttpsdefault_disableautomatichttps",
- "displayName": "Automatic HTTPS functionality is disabled.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automatichttpsdefault_upgradecapabledomains",
- "displayName": "(Deprecated) Navigations delivered over HTTP are switched to HTTPS, only on domains likely to support HTTPS.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automatichttpsdefault_alwaysupgrade",
- "displayName": "All navigations delivered over HTTP are switched to HTTPS. Connection errors might occur more often.",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automatichttpsdefault_recommended",
- "displayName": "Configure Automatic HTTPS (Obsolete) (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automatichttpsdefault_recommended_disableautomatichttps",
- "displayName": "Automatic HTTPS functionality is disabled.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automatichttpsdefault_recommended_upgradecapabledomains",
- "displayName": "(Deprecated) Navigations delivered over HTTP are switched to HTTPS, only on domains likely to support HTTPS.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.automatichttpsdefault_recommended_alwaysupgrade",
- "displayName": "All navigations delivered over HTTP are switched to HTTPS. Connection errors might occur more often.",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autoopenallowedforurls",
- "displayName": "URLs where AutoOpenFileTypes can apply",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autoopenfiletypes",
- "displayName": "List of file types that should be automatically opened on download",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autoplayallowed",
- "displayName": "Allow media autoplay for websites",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autoplayallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autoplayallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autoplayallowlist",
- "displayName": "Allow media autoplay on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.autoselectcertificateforurls",
- "displayName": "Automatically select client certificates for these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.backgroundtemplatelistupdatesenabled",
- "displayName": "Enables background updates to the list of available templates for Collections and other features that use templates (Deprecated)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.backgroundtemplatelistupdatesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.backgroundtemplatelistupdatesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.beforeunloadeventcancelbypreventdefaultenabled",
- "displayName": "Control the behavior for the cancel dialog produced by the beforeunload event (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.beforeunloadeventcancelbypreventdefaultenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.beforeunloadeventcancelbypreventdefaultenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockexternalextensions",
- "displayName": "Blocks external extensions from being installed",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockexternalextensions_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockexternalextensions_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockthirdpartycookies",
- "displayName": "Block third party cookies",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockthirdpartycookies_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockthirdpartycookies_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockthirdpartycookies_recommended",
- "displayName": "Block third party cookies (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockthirdpartycookies_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blockthirdpartycookies_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blocktruncatedcookies",
- "displayName": "Block truncated cookies (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blocktruncatedcookies_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.blocktruncatedcookies_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.browsernetworktimequeriesenabled",
- "displayName": "Allow queries to a Browser Network Time service",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.browsernetworktimequeriesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.browsernetworktimequeriesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.browsingdatalifetime",
- "displayName": "Browsing Data Lifetime Settings",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.builtinaiapisenabled",
- "displayName": "Allow pages to use the built-in AI APIs.",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.builtinaiapisenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.builtinaiapisenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cacertificatemanagementallowed",
- "displayName": "Allow users to manage installed CA certificates.",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cacertificatemanagementallowed_all",
- "displayName": "Allow users to manage all certificates",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cacertificatemanagementallowed_useronly",
- "displayName": "Allow users to manage user certificates",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cacertificatemanagementallowed_none",
- "displayName": "Disallow users from managing certificates",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cacertificates",
- "displayName": "TLS server certificates that should be trusted by Microsoft Edge",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cacertificateswithconstraints",
- "displayName": "TLS certificates that should be trusted by Microsoft Edge for server authentication with constraints",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cadistrustedcertificates",
- "displayName": "TLS certificates that should be distrusted by Microsoft Edge for server authentication",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cahintcertificates",
- "displayName": "TLS certificates that are not trusted or distrusted but can be used in path-building for server authentication",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.caplatformintegrationenabled",
- "displayName": "Use user-added TLS certificates from platform trust stores for server authentication",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.caplatformintegrationenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.caplatformintegrationenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.certificatetransparencyenforcementdisabledforcas",
- "displayName": "Disable Certificate Transparency enforcement for a list of subjectPublicKeyInfo hashes",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.certificatetransparencyenforcementdisabledforlegacycas",
- "displayName": "Disable Certificate Transparency enforcement for a list of legacy certificate authorities (Obsolete)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearbrowsingdataonexit",
- "displayName": "Clear browsing data when Microsoft Edge closes",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearbrowsingdataonexit_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearbrowsingdataonexit_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearbrowsingdataonexit_recommended",
- "displayName": "Clear browsing data when Microsoft Edge closes (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearbrowsingdataonexit_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearbrowsingdataonexit_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearcachedimagesandfilesonexit",
- "displayName": "Clear cached images and files when Microsoft Edge closes",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearcachedimagesandfilesonexit_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearcachedimagesandfilesonexit_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearcachedimagesandfilesonexit_recommended",
- "displayName": "Clear cached images and files when Microsoft Edge closes (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearcachedimagesandfilesonexit_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clearcachedimagesandfilesonexit_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clipboardallowedforurls",
- "displayName": "Allow clipboard use on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.clipboardblockedforurls",
- "displayName": "Block clipboard use on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.collectionsservicesandexportsblocklist",
- "displayName": "Block access to a specified list of services and export targets in Collections",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.collectionsservicesandexportsblocklist_pinterest_suggestions",
- "displayName": "Pinterest suggestions",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.collectionsservicesandexportsblocklist_collections_share",
- "displayName": "Sharing of Collections",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.collectionsservicesandexportsblocklist_local_pdf",
- "displayName": "Save local PDFs in Collections to OneDrive",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.collectionsservicesandexportsblocklist_send_word",
- "displayName": "Send collection to Microsoft Word",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.collectionsservicesandexportsblocklist_send_excel",
- "displayName": "Send collection to Microsoft Excel",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.collectionsservicesandexportsblocklist_send_onenote",
- "displayName": "Send collection to Microsoft OneNote",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.collectionsservicesandexportsblocklist_send_pinterest",
- "displayName": "Send collection to Pinterest",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.composeinlineenabled",
- "displayName": "Control access to Microsoft 365 Copilot writing assistance in Microsoft Edge for Business",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.composeinlineenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.composeinlineenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.compressiondictionarytransportenabled",
- "displayName": "Enable compression dictionary transport support",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.compressiondictionarytransportenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.compressiondictionarytransportenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configuredonottrack",
- "displayName": "Configure Do Not Track",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configuredonottrack_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configuredonottrack_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurefriendlyurlformat",
- "displayName": "Configure the default paste format of URLs copied from Microsoft Edge, and determine if additional formats will be available to users",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurefriendlyurlformat_plaintext",
- "displayName": "The plain URL without any extra information, such as the page's title. This is the recommended option when this policy is configured. For more information, see the description.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurefriendlyurlformat_titledhyperlink",
- "displayName": "Titled Hyperlink: A hyperlink that points to the copied URL, but whose visible text is the title of the destination page. This is the Friendly URL format.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurefriendlyurlformat_webpreview",
- "displayName": "Coming soon. If set, behaves the same as 'Plain URL'.",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurefriendlyurlformat_recommended",
- "displayName": "Configure the default paste format of URLs copied from Microsoft Edge, and determine if additional formats will be available to users (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurefriendlyurlformat_recommended_plaintext",
- "displayName": "The plain URL without any extra information, such as the page's title. This is the recommended option when this policy is configured. For more information, see the description.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurefriendlyurlformat_recommended_titledhyperlink",
- "displayName": "Titled Hyperlink: A hyperlink that points to the copied URL, but whose visible text is the title of the destination page. This is the Friendly URL format.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurefriendlyurlformat_recommended_webpreview",
- "displayName": "Coming soon. If set, behaves the same as 'Plain URL'.",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configurekeyboardshortcuts",
- "displayName": "Configure the list of commands for which to disable keyboard shortcuts",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configureonlinetexttospeech",
- "displayName": "Configure Online Text To Speech",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configureonlinetexttospeech_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configureonlinetexttospeech_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configureshare",
- "displayName": "Configure the Share experience",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configureshare_shareallowed",
- "displayName": "Allow using the Share experience",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.configureshare_sharedisallowed",
- "displayName": "Don't allow using the Share experience",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.controldefaultstateofallowextensionfromotherstoressettingenabled",
- "displayName": "Configure default state of Allow extensions from other stores setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.controldefaultstateofallowextensionfromotherstoressettingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.controldefaultstateofallowextensionfromotherstoressettingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.controldefaultstateofallowextensionfromotherstoressettingenabled_recommended",
- "displayName": "Configure default state of Allow extensions from other stores setting (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.controldefaultstateofallowextensionfromotherstoressettingenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.controldefaultstateofallowextensionfromotherstoressettingenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cookiesallowedforurls",
- "displayName": "Allow cookies on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cookiesblockedforurls",
- "displayName": "Block cookies on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cookiessessiononlyforurls",
- "displayName": "Limit cookies from specific websites to the current session",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.copilotcdppagecontext",
- "displayName": "Control Copilot with Commercial Data Protection access to page context for Microsoft Entra ID profiles (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.copilotcdppagecontext_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.copilotcdppagecontext_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.copilotpagecontext",
- "displayName": "Control Copilot access to page context for Microsoft Entra ID profiles",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.copilotpagecontext_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.copilotpagecontext_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.corsnonwildcardrequestheaderssupport",
- "displayName": "CORS non-wildcard request header support enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.corsnonwildcardrequestheaderssupport_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.corsnonwildcardrequestheaderssupport_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.createpasskeysinicloudkeychain",
- "displayName": "Control whether passkey creation will default to iCloud Keychain.",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.createpasskeysinicloudkeychain_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.createpasskeysinicloudkeychain_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.crossoriginwebassemblymodulesharingenabled",
- "displayName": "Specifies whether WebAssembly modules can be sent cross-origin (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.crossoriginwebassemblymodulesharingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.crossoriginwebassemblymodulesharingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cryptowalletenabled",
- "displayName": "Enable CryptoWallet feature (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cryptowalletenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.cryptowalletenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.csscustomstatedeprecatedsyntaxenabled",
- "displayName": "Controls whether the deprecated :--foo syntax for CSS custom state is enabled (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.csscustomstatedeprecatedsyntaxenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.csscustomstatedeprecatedsyntaxenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.customhelplink",
- "displayName": "Specify custom help link",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.dataurlinsvguseenabled",
- "displayName": "Data URL support for SVGUseElement",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.dataurlinsvguseenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.dataurlinsvguseenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultautomaticdownloadssetting",
- "displayName": "Default automatic downloads setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultautomaticdownloadssetting_allowautomaticdownloads",
- "displayName": "Allow all websites to perform multiple downloads without requiring a user gesture between each download.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultautomaticdownloadssetting_blockautomaticdownloads",
- "displayName": "Prevent all websites from performing multiple downloads, even after a user gesture.",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultclipboardsetting",
- "displayName": "Default clipboard site permission",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultclipboardsetting_blockclipboard",
- "displayName": "Do not allow any site to use the clipboard site permission",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultclipboardsetting_askclipboard",
- "displayName": "Allow sites to ask the user to grant the clipboard site permission",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultcookiessetting",
- "displayName": "Configure cookies",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultcookiessetting_allowcookies",
- "displayName": "Let all sites create cookies",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultcookiessetting_blockcookies",
- "displayName": "Don't let any site create cookies",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultcookiessetting_sessiononly",
- "displayName": "Keep cookies for the duration of the session, except ones listed in \"SaveCookiesOnExit\"",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultfilesystemreadguardsetting",
- "displayName": "Control use of the File System API for reading",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultfilesystemreadguardsetting_blockfilesystemread",
- "displayName": "Don't allow any site to request read access to files and directories via the File System API",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultfilesystemreadguardsetting_askfilesystemread",
- "displayName": "Allow sites to ask the user to grant read access to files and directories via the File System API",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultfilesystemwriteguardsetting",
- "displayName": "Control use of the File System API for writing",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultfilesystemwriteguardsetting_blockfilesystemwrite",
- "displayName": "Don't allow any site to request write access to files and directories",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultfilesystemwriteguardsetting_askfilesystemwrite",
- "displayName": "Allow sites to ask the user to grant write access to files and directories",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultgeolocationsetting",
- "displayName": "Default geolocation setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultgeolocationsetting_allowgeolocation",
- "displayName": "Allow sites to track users' physical location",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultgeolocationsetting_blockgeolocation",
- "displayName": "Don't allow any site to track users' physical location",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultgeolocationsetting_askgeolocation",
- "displayName": "Ask whenever a site wants to track users' physical location",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultimagessetting",
- "displayName": "Default images setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultimagessetting_allowimages",
- "displayName": "Allow all sites to show all images",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultimagessetting_blockimages",
- "displayName": "Don't allow any site to show images",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultinsecurecontentsetting",
- "displayName": "Control use of insecure content exceptions",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultinsecurecontentsetting_blockinsecurecontent",
- "displayName": "Do not allow any site to load mixed content",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultinsecurecontentsetting_allowexceptionsinsecurecontent",
- "displayName": "Allow users to add exceptions to allow mixed content",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptjitsetting",
- "displayName": "Control use of JavaScript JIT",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptjitsetting_allowjavascriptjit",
- "displayName": "Allow any site to run JavaScript JIT",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptjitsetting_blockjavascriptjit",
- "displayName": "Do not allow any site to run JavaScript JIT",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptoptimizersetting",
- "displayName": "Control use of JavaScript optimizers",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptoptimizersetting_allowjavascriptoptimizer",
- "displayName": "Enable advanced JavaScript optimizations on all sites",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptoptimizersetting_blockjavascriptoptimizer",
- "displayName": "Disable advanced JavaScript optimizations on all sites",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptsetting",
- "displayName": "Default JavaScript setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptsetting_allowjavascript",
- "displayName": "Allow all sites to run JavaScript",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultjavascriptsetting_blockjavascript",
- "displayName": "Don't allow any site to run JavaScript",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultnotificationssetting",
- "displayName": "Default notification setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultnotificationssetting_allownotifications",
- "displayName": "Allow sites to show desktop notifications",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultnotificationssetting_blocknotifications",
- "displayName": "Don't allow any site to show desktop notifications",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultnotificationssetting_asknotifications",
- "displayName": "Ask every time a site wants to show desktop notifications",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultpluginssetting",
- "displayName": "Default Adobe Flash setting (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultpluginssetting_blockplugins",
- "displayName": "Block the Adobe Flash plugin",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultpluginssetting_clicktoplay",
- "displayName": "Click to play",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultpopupssetting",
- "displayName": "Default pop-up window setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultpopupssetting_allowpopups",
- "displayName": "Allow all sites to show pop-ups",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultpopupssetting_blockpopups",
- "displayName": "Do not allow any site to show popups",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultprinterselection",
- "displayName": "Default printer selection rules",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidercontextmenuaccessallowed",
- "displayName": "Allow default search provider context menu search access",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidercontextmenuaccessallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidercontextmenuaccessallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderenabled",
- "displayName": "Enable the default search provider",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderenabled_recommended",
- "displayName": "Enable the default search provider (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderencodings",
- "displayName": "Default search provider encodings",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderencodings_recommended",
- "displayName": "Default search provider encodings (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderimageurl",
- "displayName": "Specifies the search-by-image feature for the default search provider",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderimageurl_recommended",
- "displayName": "Specifies the search-by-image feature for the default search provider (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderimageurlpostparams",
- "displayName": "Parameters for an image URL that uses POST",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderimageurlpostparams_recommended",
- "displayName": "Parameters for an image URL that uses POST (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderkeyword",
- "displayName": "Default search provider keyword",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchproviderkeyword_recommended",
- "displayName": "Default search provider keyword (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidername",
- "displayName": "Default search provider name",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidername_recommended",
- "displayName": "Default search provider name (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidersearchurl",
- "displayName": "Default search provider search URL",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidersearchurl_recommended",
- "displayName": "Default search provider search URL (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidersuggesturl",
- "displayName": "Default search provider URL for suggestions",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsearchprovidersuggesturl_recommended",
- "displayName": "Default search provider URL for suggestions (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsensorssetting",
- "displayName": "Default sensors setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsensorssetting_allowsensors",
- "displayName": "Allow sites to access sensors",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultsensorssetting_blocksensors",
- "displayName": "Do not allow any site to access sensors",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultserialguardsetting",
- "displayName": "Control use of the Serial API",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultserialguardsetting_blockserial",
- "displayName": "Do not allow any site to request access to serial ports via the Serial API",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultserialguardsetting_askserial",
- "displayName": "Allow sites to ask for user permission to access a serial port",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultshareadditionalosregionsetting",
- "displayName": "Set the default \"share additional operating system region\" setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultshareadditionalosregionsetting_limited",
- "displayName": "Limited",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultshareadditionalosregionsetting_always",
- "displayName": "Always share the OS Regional format",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultshareadditionalosregionsetting_never",
- "displayName": "Never share the OS Regional format",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultshareadditionalosregionsetting_recommended",
- "displayName": "Set the default \"share additional operating system region\" setting (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultshareadditionalosregionsetting_recommended_limited",
- "displayName": "Limited",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultshareadditionalosregionsetting_recommended_always",
- "displayName": "Always share the OS Regional format",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultshareadditionalosregionsetting_recommended_never",
- "displayName": "Never share the OS Regional format",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultthirdpartystoragepartitioningsetting",
- "displayName": "Default setting for third-party storage partitioning (Deprecated)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultthirdpartystoragepartitioningsetting_allowpartitioning",
- "displayName": "Allow third-party storage partitioning by default.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultthirdpartystoragepartitioningsetting_blockpartitioning",
- "displayName": "Disable third-party storage partitioning.",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebbluetoothguardsetting",
- "displayName": "Control use of the Web Bluetooth API",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebbluetoothguardsetting_blockwebbluetooth",
- "displayName": "Do not allow any site to request access to Bluetooth devices via the Web Bluetooth API",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebbluetoothguardsetting_askwebbluetooth",
- "displayName": "Allow sites to ask the user to grant access to a nearby Bluetooth device",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebhidguardsetting",
- "displayName": "Control use of the WebHID API",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebhidguardsetting_blockwebhid",
- "displayName": "Do not allow any site to request access to HID devices via the WebHID API",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebhidguardsetting_askwebhid",
- "displayName": "Allow sites to ask the user to grant access to a HID device",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebusbguardsetting",
- "displayName": "Control use of the WebUSB API",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebusbguardsetting_blockwebusb",
- "displayName": "Do not allow any site to request access to USB devices via the WebUSB API",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwebusbguardsetting_askwebusb",
- "displayName": "Allow sites to ask the user to grant access to a connected USB device",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwindowmanagementsetting",
- "displayName": "Default Window Management permission setting",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwindowmanagementsetting_blockwindowmanagement",
- "displayName": "Denies the Window Management permission on all sites by default",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.defaultwindowmanagementsetting_askwindowmanagement",
- "displayName": "Ask every time a site wants obtain the Window Management permission",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.definepreferredlanguages",
- "displayName": "Define an ordered list of preferred languages that websites should display in if the site supports the language",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.delaynavigationsforinitialsitelistdownload",
- "displayName": "Require that the Enterprise Mode Site List is available before tab navigation",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.delaynavigationsforinitialsitelistdownload_none",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.delaynavigationsforinitialsitelistdownload_all",
- "displayName": "All eligible navigations",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.deletingundecryptablepasswordsenabled",
- "displayName": "Enable deleting undecryptable passwords",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.deletingundecryptablepasswordsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.deletingundecryptablepasswordsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.developertoolsavailability",
- "displayName": "Control where developer tools can be used",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.developertoolsavailability_developertoolsdisallowedforforceinstalledextensions",
- "displayName": "Block the developer tools on extensions installed by enterprise policy, allow in other contexts",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.developertoolsavailability_developertoolsallowed",
- "displayName": "Allow using the developer tools",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.developertoolsavailability_developertoolsdisallowed",
- "displayName": "Don't allow using the developer tools",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.disable3dapis",
- "displayName": "Disable support for 3D graphics APIs",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.disable3dapis_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.disable3dapis_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.discoverpagecontextenabled",
- "displayName": "Enable Discover access to page contents for AAD profiles (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.discoverpagecontextenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.discoverpagecontextenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.displaycapturepermissionspolicyenabled",
- "displayName": "Specifies whether the display-capture permissions-policy is checked or skipped (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.displaycapturepermissionspolicyenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.displaycapturepermissionspolicyenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.donotsilentlyblockprotocolsfromorigins",
- "displayName": "Define a list of protocols that can not be silently blocked by anti-flood protection",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.doubleclickclosetabenabled",
- "displayName": "Double Click feature in Microsoft Edge enabled (only available in China)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.doubleclickclosetabenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.doubleclickclosetabenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloaddirectory",
- "displayName": "Set download directory",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloaddirectory_recommended",
- "displayName": "Set download directory (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions",
- "displayName": "Allow download restrictions",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_defaultdownloadsecurity",
- "displayName": "No special restrictions",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_blockdangerousdownloads",
- "displayName": "Block malicious downloads and dangerous file types",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_blockpotentiallydangerousdownloads",
- "displayName": "Block potentially dangerous or unwanted downloads and dangerous file types",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_blockalldownloads",
- "displayName": "Block all downloads",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_blockmaliciousdownloads",
- "displayName": "Block malicious downloads",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_recommended",
- "displayName": "Allow download restrictions (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_recommended_defaultdownloadsecurity",
- "displayName": "No special restrictions",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_recommended_blockdangerousdownloads",
- "displayName": "Block malicious downloads and dangerous file types",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_recommended_blockpotentiallydangerousdownloads",
- "displayName": "Block potentially dangerous or unwanted downloads and dangerous file types",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_recommended_blockalldownloads",
- "displayName": "Block all downloads",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.downloadrestrictions_recommended_blockmaliciousdownloads",
- "displayName": "Block malicious downloads",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeassetdeliveryserviceenabled",
- "displayName": "Allow features to download assets from the Asset Delivery Service",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeassetdeliveryserviceenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeassetdeliveryserviceenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeassetdeliveryserviceenabled_recommended",
- "displayName": "Allow features to download assets from the Asset Delivery Service (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeassetdeliveryserviceenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeassetdeliveryserviceenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeautofillmlenabled",
- "displayName": "Machine learning powered autofill suggestions",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeautofillmlenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeautofillmlenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeautofillmlenabled_recommended",
- "displayName": "Machine learning powered autofill suggestions (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeautofillmlenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeautofillmlenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgecollectionsenabled",
- "displayName": "Enable the Collections feature",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgecollectionsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgecollectionsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgediscoverenabled",
- "displayName": "Discover feature In Microsoft Edge (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgediscoverenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgediscoverenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgediscoverenabled_recommended",
- "displayName": "Discover feature In Microsoft Edge (Obsolete) (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgediscoverenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgediscoverenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeedropenabled",
- "displayName": "Enable Drop feature in Microsoft Edge",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeedropenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeedropenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeenhanceimagesenabled",
- "displayName": "Enhance images enabled (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeenhanceimagesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeenhanceimagesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeentracopilotpagecontext",
- "displayName": "Control Copilot access to Microsoft Edge page content for Entra account user profiles when using Copilot in the Microsoft Edge sidepane",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeentracopilotpagecontext_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeentracopilotpagecontext_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgefollowenabled",
- "displayName": "Enable Follow service in Microsoft Edge (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgefollowenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgefollowenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgehistoryaisearchenabled",
- "displayName": "Control access to AI-enhanced search in History",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgehistoryaisearchenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgehistoryaisearchenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgemanagementextensionsfeedbackenabled",
- "displayName": "Microsoft Edge management extensions feedback enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgemanagementextensionsfeedbackenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgemanagementextensionsfeedbackenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeshoppingassistantenabled",
- "displayName": "Shopping in Microsoft Edge Enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeshoppingassistantenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeshoppingassistantenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeshoppingassistantenabled_recommended",
- "displayName": "Shopping in Microsoft Edge Enabled (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeshoppingassistantenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeshoppingassistantenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgesidebarappurlhostallowlist",
- "displayName": "Allow specific apps to be opened in Microsoft Edge sidebar",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgesidebarappurlhostblocklist",
- "displayName": "Control which apps cannot be opened in Microsoft Edge sidebar",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgesidebarappurlhostforcelist",
- "displayName": "Control which apps are forced to be shown in Microsoft Edge sidebar",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletcheckoutenabled",
- "displayName": "Enable Wallet Checkout feature",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletcheckoutenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletcheckoutenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletcheckoutenabled_recommended",
- "displayName": "Enable Wallet Checkout feature (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletcheckoutenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletcheckoutenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletetreeenabled",
- "displayName": "Edge Wallet E-Tree Enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletetreeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletetreeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletetreeenabled_recommended",
- "displayName": "Edge Wallet E-Tree Enabled (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletetreeenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgewalletetreeenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeworkspacesenabled",
- "displayName": "Enable Workspaces",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeworkspacesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.edgeworkspacesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.editfavoritesenabled",
- "displayName": "Allows users to edit favorites",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.editfavoritesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.editfavoritesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enabledeprecatedwebplatformfeatures",
- "displayName": "Re-enable deprecated web platform features for a limited time (Obsolete)",
- "options": {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enabledeprecatedwebplatformfeatures_exampledeprecatedfeature",
- "displayName": "Enable ExampleDeprecatedFeature API through 2008/09/02",
- "description": null
- }
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enablemediarouter",
- "displayName": "Enable Google Cast",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enablemediarouter_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enablemediarouter_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymode",
- "displayName": "Enhance the security state in Microsoft Edge",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymode_standardmode",
- "displayName": "Standard mode",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymode_balancedmode",
- "displayName": "Balanced mode",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymode_strictmode",
- "displayName": "Strict mode",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymode_basicmode",
- "displayName": "(Deprecated) Basic mode",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeallowuserbypass",
- "displayName": "Allow users to bypass Enhanced Security Mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeallowuserbypass_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeallowuserbypass_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodebypassintranet",
- "displayName": "Enhanced Security Mode configuration for Intranet zone sites",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodebypassintranet_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodebypassintranet_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodebypasslistdomains",
- "displayName": "Configure the list of domains for which enhance security mode will not be enforced",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeenforcelistdomains",
- "displayName": "Configure the list of domains for which enhance security mode will always be enforced",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeindicatoruienabled",
- "displayName": "Manage the indicator UI of the Enhanced Security Mode (ESM) feature in Microsoft Edge",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeindicatoruienabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeindicatoruienabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeoptoutuxenabled",
- "displayName": "Manage opt-out user experience for Enhanced Security Mode (ESM) in Microsoft Edge (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeoptoutuxenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enhancesecuritymodeoptoutuxenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enterprisehardwareplatformapienabled",
- "displayName": "Allow managed extensions to use the Enterprise Hardware Platform API",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enterprisehardwareplatformapienabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enterprisehardwareplatformapienabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enterprisemodesitelistmanagerallowed",
- "displayName": "Allow access to the Enterprise Mode Site List Manager tool",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enterprisemodesitelistmanagerallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.enterprisemodesitelistmanagerallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.eventpathenabled",
- "displayName": "Re-enable the Event.path API until Microsoft Edge version 115 (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.eventpathenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.eventpathenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.exemptdomainfiletypepairsfromfiletypedownloadwarnings",
- "displayName": "Disable download file type extension-based warnings for specified file types on domains (Obsolete)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.exemptfiletypedownloadwarnings",
- "displayName": "Disable download file type extension-based warnings for specified file types on domains",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.exemptsmartscreendownloadwarnings",
- "displayName": "Disable SmartScreen AppRep based warnings for specified file types on specified domains",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionallowedtypes",
- "displayName": "Configure allowed extension types",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionallowedtypes_extension",
- "displayName": "Extension",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionallowedtypes_theme",
- "displayName": "Theme",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionallowedtypes_user_script",
- "displayName": "User script",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionallowedtypes_hosted_app",
- "displayName": "Hosted app",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionallowedtypes_legacy_packaged_app",
- "displayName": "Legacy packaged app",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionallowedtypes_platform_app",
- "displayName": "Platform app",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensiondevelopermodesettings",
- "displayName": "Control the availability of developer mode on extensions page",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensiondevelopermodesettings_allow",
- "displayName": "Allow the usage of developer mode on extensions page",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensiondevelopermodesettings_disallow",
- "displayName": "Do not allow the usage of developer mode on extensions page",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionextendedbackgroundlifetimeforportconnectionstourls",
- "displayName": "Configure a list of origins that grant an extended background lifetime to connecting extensions.",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensioninstallallowlist",
- "displayName": "Allow specific extensions to be installed",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensioninstallblocklist",
- "displayName": "Control which extensions cannot be installed",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensioninstallforcelist",
- "displayName": "Control which extensions are installed silently",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensioninstallsources",
- "displayName": "Configure extension and user script install sources",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensioninstalltypeblocklist",
- "displayName": "Blocklist for extension install types",
- "options": {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensioninstalltypeblocklist_command_line",
- "displayName": "Blocks extensions from being loaded from command line",
- "description": null
- }
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionmanifestv2availability",
- "displayName": "Control Manifest v2 extension availability",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionmanifestv2availability_default",
- "displayName": "Default browser behavior",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionmanifestv2availability_disable",
- "displayName": "Manifest v2 is disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionmanifestv2availability_enable",
- "displayName": "Manifest v2 is enabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionmanifestv2availability_enableforforcedextensions",
- "displayName": "Manifest v2 is enabled for forced extensions only",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionsettings",
- "displayName": "Configure extension management settings",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionsperformancedetectorenabled",
- "displayName": "Extensions Performance Detector enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionsperformancedetectorenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionsperformancedetectorenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionsperformancedetectorenabled_recommended",
- "displayName": "Extensions Performance Detector enabled (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionsperformancedetectorenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.extensionsperformancedetectorenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.externalprotocoldialogshowalwaysopencheckbox",
- "displayName": "Show an \"Always open\" checkbox in external protocol dialog",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.externalprotocoldialogshowalwaysopencheckbox_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.externalprotocoldialogshowalwaysopencheckbox_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.familysafetysettingsenabled",
- "displayName": "Allow users to configure Family safety and Kids Mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.familysafetysettingsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.familysafetysettingsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.favoritesbarenabled",
- "displayName": "Enable favorites bar",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.favoritesbarenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.favoritesbarenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.favoritesbarenabled_recommended",
- "displayName": "Enable favorites bar (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.favoritesbarenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.favoritesbarenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.fetchkeepalivedurationsecondsonshutdown",
- "displayName": "Fetch keepalive duration on shutdown",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.fileordirectorypickerwithoutgestureallowedfororigins",
- "displayName": "Allow file or directory picker APIs to be called without prior user gesture",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.filesystemreadaskforurls",
- "displayName": "Allow read access via the File System API on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.filesystemreadblockedforurls",
- "displayName": "Block read access via the File System API on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.filesystemwriteaskforurls",
- "displayName": "Allow write access to files and directories on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.filesystemwriteblockedforurls",
- "displayName": "Block write access to files and directories on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcebingsafesearch",
- "displayName": "Enforce Bing SafeSearch",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcebingsafesearch_bingsafesearchnorestrictionsmode",
- "displayName": "Don't configure search restrictions in Bing",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcebingsafesearch_bingsafesearchmoderatemode",
- "displayName": "Configure moderate search restrictions in Bing",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcebingsafesearch_bingsafesearchstrictmode",
- "displayName": "Configure strict search restrictions in Bing",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forceephemeralprofiles",
- "displayName": "Enable use of ephemeral profiles",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forceephemeralprofiles_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forceephemeralprofiles_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcegooglesafesearch",
- "displayName": "Enforce Google SafeSearch",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcegooglesafesearch_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcegooglesafesearch_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcemajorversiontominorpositioninuseragent",
- "displayName": "Enable or disable freezing the User-Agent string at major version 99 (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcemajorversiontominorpositioninuseragent_default",
- "displayName": "Default to browser settings for User-Agent string version.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcemajorversiontominorpositioninuseragent_forcedisabled",
- "displayName": "The User-Agent string will not freeze the major version.",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcemajorversiontominorpositioninuseragent_forceenabled",
- "displayName": "The User-Agent string will freeze the major version as 99 and include the browser's major version in the minor position.",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcesync",
- "displayName": "Force synchronization of browser data and do not show the sync consent prompt",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcesync_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcesync_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forcesynctypes",
- "displayName": "Configure the list of types that are included for synchronization",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forceyoutuberestrict",
- "displayName": "Force minimum YouTube Restricted Mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forceyoutuberestrict_off",
- "displayName": "Do not enforce Restricted Mode on YouTube",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forceyoutuberestrict_moderate",
- "displayName": "Enforce at least Moderate Restricted Mode on YouTube",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.forceyoutuberestrict_strict",
- "displayName": "Enforce Strict Restricted Mode for YouTube",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.fullscreenallowed",
- "displayName": "Allow full screen mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.fullscreenallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.fullscreenallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.gamermodeenabled",
- "displayName": "Enable Gamer Mode (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.gamermodeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.gamermodeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.gamermodeenabled_recommended",
- "displayName": "Enable Gamer Mode (Obsolete) (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.gamermodeenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.gamermodeenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.geolocationblockedforurls",
- "displayName": "Block geolocation on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.globallyscopehttpauthcacheenabled",
- "displayName": "Enable globally scoped HTTP auth cache",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.globallyscopehttpauthcacheenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.globallyscopehttpauthcacheenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.guidedswitchenabled",
- "displayName": "Guided Switch Enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.guidedswitchenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.guidedswitchenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.homepageisnewtabpage",
- "displayName": "Set the new tab page as the home page",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.homepageisnewtabpage_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.homepageisnewtabpage_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.homepageisnewtabpage_recommended",
- "displayName": "Set the new tab page as the home page (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.homepageisnewtabpage_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.homepageisnewtabpage_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.homepagelocation",
- "displayName": "Configure the home page URL",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.homepagelocation_recommended",
- "displayName": "Configure the home page URL (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.hstspolicybypasslist",
- "displayName": "Configure the list of names that will bypass the HSTS policy check",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpallowlist",
- "displayName": "HTTP Allowlist",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpsonlymode",
- "displayName": "Allow HTTPS-Only Mode to be enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpsonlymode_allowed",
- "displayName": "Don't restrict users' HTTPS-Only Mode setting",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpsonlymode_disallowed",
- "displayName": "Don't allow users to enable any HTTPS-Only Mode",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpsonlymode_force_enabled",
- "displayName": "Force enable HTTPS-Only Mode in Strict mode",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpsonlymode_force_balanced_enabled",
- "displayName": "Force enable HTTPS-Only Mode in Balanced Mode",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpsupgradesenabled",
- "displayName": "Enable automatic HTTPS upgrades",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpsupgradesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.httpsupgradesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.hubssidebarenabled",
- "displayName": "Show Hubs Sidebar",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.hubssidebarenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.hubssidebarenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.hubssidebarenabled_recommended",
- "displayName": "Show Hubs Sidebar (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.hubssidebarenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.hubssidebarenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeout",
- "displayName": "Delay before running idle actions",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions",
- "displayName": "Actions to run when the computer is idle",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_close_browsers",
- "displayName": "Close Browsers",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_clear_browsing_history",
- "displayName": "Clear Browsing History",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_clear_download_history",
- "displayName": "Clear Download History",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_clear_cookies_and_other_site_data",
- "displayName": "Clear Cookies and Other Site Data",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_clear_cached_images_and_files",
- "displayName": "Clear Cached Images and Files",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_clear_password_signin",
- "displayName": "Clear Password sign in",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_clear_autofill",
- "displayName": "Clear Autofill",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_clear_site_settings",
- "displayName": "Clear Site Settings",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_reload_pages",
- "displayName": "Reload Pages",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_sign_out",
- "displayName": "Sign Out",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.idletimeoutactions_close_tabs",
- "displayName": "Close Tabs",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.imagesallowedforurls",
- "displayName": "Allow images on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.imagesblockedforurls",
- "displayName": "Block images on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.immersivereadergrammartoolsenabled",
- "displayName": "Enable Grammar Tools feature within Immersive Reader in Microsoft Edge (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.immersivereadergrammartoolsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.immersivereadergrammartoolsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.immersivereaderpicturedictionaryenabled",
- "displayName": "Enable Picture Dictionary feature within Immersive Reader in Microsoft Edge (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.immersivereaderpicturedictionaryenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.immersivereaderpicturedictionaryenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importautofillformdata",
- "displayName": "Allow importing of autofill form data",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importautofillformdata_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importautofillformdata_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importautofillformdata_recommended",
- "displayName": "Allow importing of autofill form data (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importautofillformdata_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importautofillformdata_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importbrowsersettings",
- "displayName": "Allow importing of browser settings",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importbrowsersettings_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importbrowsersettings_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importbrowsersettings_recommended",
- "displayName": "Allow importing of browser settings (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importbrowsersettings_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importbrowsersettings_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importcookies",
- "displayName": "Allow importing of Cookies",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importcookies_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importcookies_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importcookies_recommended",
- "displayName": "Allow importing of Cookies (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importcookies_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importcookies_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importextensions",
- "displayName": "Allow importing of extensions",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importextensions_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importextensions_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importextensions_recommended",
- "displayName": "Allow importing of extensions (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importextensions_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importextensions_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importfavorites",
- "displayName": "Allow importing of favorites",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importfavorites_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importfavorites_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importfavorites_recommended",
- "displayName": "Allow importing of favorites (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importfavorites_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importfavorites_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhistory",
- "displayName": "Allow importing of browsing history",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhistory_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhistory_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhistory_recommended",
- "displayName": "Allow importing of browsing history (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhistory_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhistory_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhomepage",
- "displayName": "Allow importing of home page settings",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhomepage_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importhomepage_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importoneachlaunch",
- "displayName": "Allow import of data from other browsers on each Microsoft Edge launch",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importoneachlaunch_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importoneachlaunch_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importopentabs",
- "displayName": "Allow importing of open tabs",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importopentabs_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importopentabs_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importopentabs_recommended",
- "displayName": "Allow importing of open tabs (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importopentabs_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importopentabs_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importpaymentinfo",
- "displayName": "Allow importing of payment info",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importpaymentinfo_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importpaymentinfo_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importpaymentinfo_recommended",
- "displayName": "Allow importing of payment info (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importpaymentinfo_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importpaymentinfo_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsavedpasswords",
- "displayName": "Allow importing of saved passwords",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsavedpasswords_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsavedpasswords_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsavedpasswords_recommended",
- "displayName": "Allow importing of saved passwords (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsavedpasswords_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsavedpasswords_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsearchengine",
- "displayName": "Allow importing of search engine settings",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsearchengine_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsearchengine_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsearchengine_recommended",
- "displayName": "Allow importing of search engine settings (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsearchengine_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importsearchengine_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importshortcuts",
- "displayName": "Allow importing of shortcuts",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importshortcuts_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importshortcuts_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importshortcuts_recommended",
- "displayName": "Allow importing of shortcuts (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importshortcuts_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importshortcuts_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importstartuppagesettings",
- "displayName": "Allow importing of startup page settings",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importstartuppagesettings_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importstartuppagesettings_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importstartuppagesettings_recommended",
- "displayName": "Allow importing of startup page settings (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importstartuppagesettings_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.importstartuppagesettings_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.inprivatemodeavailability",
- "displayName": "Configure InPrivate mode availability",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.inprivatemodeavailability_enabled",
- "displayName": "InPrivate mode available",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.inprivatemodeavailability_disabled",
- "displayName": "InPrivate mode disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.inprivatemodeavailability_forced",
- "displayName": "InPrivate mode forced",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecurecontentallowedforurls",
- "displayName": "Allow insecure content on specified sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecurecontentblockedforurls",
- "displayName": "Block insecure content on specified sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecureformswarningsenabled",
- "displayName": "Enable warnings for insecure forms (Deprecated)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecureformswarningsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecureformswarningsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecureprivatenetworkrequestsallowed",
- "displayName": "Specifies whether to allow websites to make requests to any network endpoint in an insecure manner. (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecureprivatenetworkrequestsallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecureprivatenetworkrequestsallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.insecureprivatenetworkrequestsallowedforurls",
- "displayName": "Allow the listed sites to make requests to more-private network endpoints from in an insecure manner (Obsolete)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationalwaysuseoscapture",
- "displayName": "Always use the OS capture engine to avoid issues with capturing Internet Explorer mode tabs",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationalwaysuseoscapture_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationalwaysuseoscapture_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationalwayswaitforunload",
- "displayName": "Wait for Internet Explorer mode tabs to completely unload before ending the browser session",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationalwayswaitforunload_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationalwayswaitforunload_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationcloudneutralsitesreporting",
- "displayName": "Configure reporting of potentially misconfigured neutral site URLs to the M365 Admin Center Site Lists app",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationcloudsitelist",
- "displayName": "Configure the Enterprise Mode Cloud Site List",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationcloudusersitesreporting",
- "displayName": "Configure reporting of IE Mode user list entries to the M365 Admin Center Site Lists app",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationcomplexnavdatatypes",
- "displayName": "Configure whether form data and HTTP headers will be sent when entering or exiting Internet Explorer mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationcomplexnavdatatypes_includenone",
- "displayName": "Do not send form data or headers",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationcomplexnavdatatypes_includeformdataonly",
- "displayName": "Send form data only",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationcomplexnavdatatypes_includeheadersonly",
- "displayName": "Send additional headers only",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationcomplexnavdatatypes_includeformdataandheaders",
- "displayName": "Send form data and additional headers",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationenhancedhangdetection",
- "displayName": "Configure enhanced hang detection for Internet Explorer mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationenhancedhangdetection_disabled",
- "displayName": "Enhanced hang detection disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationenhancedhangdetection_enabled",
- "displayName": "Enhanced hang detection enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlevel",
- "displayName": "Configure Internet Explorer integration",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlevel_none",
- "displayName": "None",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlevel_iemode",
- "displayName": "Internet Explorer mode",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlevel_needie",
- "displayName": "Internet Explorer 11",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalfileallowed",
- "displayName": "Allow launching of local files in Internet Explorer mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalfileallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalfileallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalfileextensionallowlist",
- "displayName": "Open local files in Internet Explorer mode file extension allow list",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalfileshowcontextmenu",
- "displayName": "Show context menu to open a file:// link in Internet Explorer mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalfileshowcontextmenu_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalfileshowcontextmenu_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalmhtfileallowed",
- "displayName": "Allow local MHTML files to open automatically in Internet Explorer mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalmhtfileallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationlocalmhtfileallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationreloadiniemodeallowed",
- "displayName": "Allow unconfigured sites to be reloaded in Internet Explorer mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationreloadiniemodeallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationreloadiniemodeallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationreloadiniemodeallowed_recommended",
- "displayName": "Allow unconfigured sites to be reloaded in Internet Explorer mode (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationreloadiniemodeallowed_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationreloadiniemodeallowed_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationsitelist",
- "displayName": "Configure the Enterprise Mode Site List",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationsitelistrefreshinterval",
- "displayName": "Configure how frequently the Enterprise Mode Site List is refreshed",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationsiteredirect",
- "displayName": "Specify how \"in-page\" navigations to unconfigured sites behave when started from Internet Explorer mode pages",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationsiteredirect_default",
- "displayName": "Default",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationsiteredirect_automaticnavigationsonly",
- "displayName": "Keep only automatic navigations in Internet Explorer mode",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationsiteredirect_allinpagenavigations",
- "displayName": "Keep all in-page navigations in Internet Explorer mode",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationtestingallowed",
- "displayName": "Allow Internet Explorer mode testing (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationtestingallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationtestingallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationwindowopenheightadjustment",
- "displayName": "Configure the pixel adjustment between window.open heights sourced from IE mode pages vs. Edge mode pages",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationwindowopenwidthadjustment",
- "displayName": "Configure the pixel adjustment between window.open widths sourced from IE mode pages vs. Edge mode pages",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationzoneidentifiermhtfileallowed",
- "displayName": "Automatically open downloaded MHT or MHTML files from the web in Internet Explorer mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationzoneidentifiermhtfileallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerintegrationzoneidentifiermhtfileallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodecleardataonexitenabled",
- "displayName": "Clear history for IE and IE mode every time you exit",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodecleardataonexitenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodecleardataonexitenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodeenablesavepageas",
- "displayName": "Allow Save page as in Internet Explorer mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodeenablesavepageas_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodeenablesavepageas_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetabinedgemodeallowed",
- "displayName": "Allow sites configured for Internet Explorer mode to open in Microsoft Edge",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetabinedgemodeallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetabinedgemodeallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetoolbarbuttonenabled",
- "displayName": "Show the Reload in Internet Explorer mode button in the toolbar",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetoolbarbuttonenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetoolbarbuttonenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetoolbarbuttonenabled_recommended",
- "displayName": "Show the Reload in Internet Explorer mode button in the toolbar (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetoolbarbuttonenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorermodetoolbarbuttonenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorersetforegroundwhenactive",
- "displayName": "Keep the active Microsoft Edge window with an Internet Explorer mode tab always in the foreground.",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorersetforegroundwhenactive_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorersetforegroundwhenactive_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerzoomdisplay",
- "displayName": "Display zoom in IE Mode tabs with DPI Scale included like it is in Internet Explorer",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerzoomdisplay_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.internetexplorerzoomdisplay_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.intranetfilelinksenabled",
- "displayName": "Allow intranet zone file URL links from Microsoft Edge to open in Windows File Explorer",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.intranetfilelinksenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.intranetfilelinksenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.javascriptallowedforurls",
- "displayName": "Allow JavaScript on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.javascriptblockedforurls",
- "displayName": "Block JavaScript on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.javascriptjitallowedforsites",
- "displayName": "Allow JavaScript to use JIT on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.javascriptjitblockedforsites",
- "displayName": "Block JavaScript from using JIT on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.javascriptoptimizerallowedforsites",
- "displayName": "Allow JavaScript optimization on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.javascriptoptimizerblockedforsites",
- "displayName": "Block JavaScript optimizations on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.keyboardfocusablescrollersenabled",
- "displayName": "Enable keyboard focusable scrollers (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.keyboardfocusablescrollersenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.keyboardfocusablescrollersenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.legacysamesitecookiebehaviorenabled",
- "displayName": "Enable default legacy SameSite cookie behavior setting (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.legacysamesitecookiebehaviorenabled_defaulttolegacysamesitecookiebehavior",
- "displayName": "Revert to legacy SameSite behavior for cookies on all sites",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.legacysamesitecookiebehaviorenabled_defaulttosamesitebydefaultcookiebehavior",
- "displayName": "Use SameSite-by-default behavior for cookies on all sites",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.legacysamesitecookiebehaviorenabledfordomainlist",
- "displayName": "Revert to legacy SameSite behavior for cookies on specified sites (Obsolete)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.linkedaccountenabled",
- "displayName": "Enable the linked account feature (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.linkedaccountenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.linkedaccountenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.livecaptionsallowed",
- "displayName": "Live captions allowed",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.livecaptionsallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.livecaptionsallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.livevideotranslationenabled",
- "displayName": "Allows users to translate videos to different languages.",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.livevideotranslationenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.livevideotranslationenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localbrowserdatashareenabled",
- "displayName": "Enable Windows to search local Microsoft Edge browsing data",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localbrowserdatashareenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localbrowserdatashareenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localbrowserdatashareenabled_recommended",
- "displayName": "Enable Windows to search local Microsoft Edge browsing data (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localbrowserdatashareenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localbrowserdatashareenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localnetworkaccessallowedforurls",
- "displayName": "Allow sites to make requests to local network endpoints.",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localnetworkaccessblockedforurls",
- "displayName": "Block sites from making requests to local network endpoints.",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localnetworkaccessrestrictionsenabled",
- "displayName": "Specifies whether to block requests from public websites to devices on a user's local network. (Deprecated)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localnetworkaccessrestrictionsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localnetworkaccessrestrictionsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localnetworkaccessrestrictionstemporaryoptout",
- "displayName": "Specifies whether to opt out of Local Network Access restrictions",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localnetworkaccessrestrictionstemporaryoptout_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localnetworkaccessrestrictionstemporaryoptout_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localprovidersenabled",
- "displayName": "Allow suggestions from local providers",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localprovidersenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localprovidersenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localprovidersenabled_recommended",
- "displayName": "Allow suggestions from local providers (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localprovidersenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.localprovidersenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.managedconfigurationperorigin",
- "displayName": "Sets managed configuration values for websites to specific origins",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.managedfavorites",
- "displayName": "Configure favorites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.managedsearchengines",
- "displayName": "Manage Search Engines",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.managedsearchengines_recommended",
- "displayName": "Manage Search Engines (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.mandatoryextensionsforinprivatenavigation",
- "displayName": "Specify extensions users must allow in order to navigate using InPrivate mode",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoft365copilotchaticonenabled",
- "displayName": "Control whether Microsoft 365 Copilot Chat shows in the Microsoft Edge for Business toolbar",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoft365copilotchaticonenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoft365copilotchaticonenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoft365copilotchaticonenabled_recommended",
- "displayName": "Control whether Microsoft 365 Copilot Chat shows in the Microsoft Edge for Business toolbar (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoft365copilotchaticonenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoft365copilotchaticonenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoftedgeinsiderpromotionenabled",
- "displayName": "Microsoft Edge Insider Promotion Enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoftedgeinsiderpromotionenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoftedgeinsiderpromotionenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsofteditorproofingenabled",
- "displayName": "Spell checking provided by Microsoft Editor",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsofteditorproofingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsofteditorproofingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsofteditorsynonymsenabled",
- "displayName": "Synonyms are provided when using Microsoft Editor spell checker",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsofteditorsynonymsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsofteditorsynonymsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoftofficemenuenabled",
- "displayName": "Allow users to access the Microsoft Office menu (Deprecated)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoftofficemenuenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.microsoftofficemenuenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.mousegestureenabled",
- "displayName": "Mouse Gesture Enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.mousegestureenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.mousegestureenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.mutationeventsenabled",
- "displayName": "Enable deprecated/removed Mutation Events (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.mutationeventsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.mutationeventsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.nativehostsexecutableslaunchdirectly",
- "displayName": "Force Windows executable Native Messaging hosts to launch directly",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.nativehostsexecutableslaunchdirectly_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.nativehostsexecutableslaunchdirectly_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.nativemessagingallowlist",
- "displayName": "Control which native messaging hosts users can use",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.nativemessagingblocklist",
- "displayName": "Configure native messaging block list",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.nativemessaginguserlevelhosts",
- "displayName": "Allow user-level native messaging hosts (installed without admin permissions)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.nativemessaginguserlevelhosts_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.nativemessaginguserlevelhosts_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.navigationdelayforinitialsitelistdownloadtimeout",
- "displayName": "Set a timeout for delay of tab navigation for the Enterprise Mode Site List",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.networkpredictionoptions",
- "displayName": "Enable network prediction",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.networkpredictionoptions_networkpredictionalways",
- "displayName": "Predict network actions on any network connection",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.networkpredictionoptions_networkpredictionwifionly",
- "displayName": "Not supported, if this value is used it will be treated as if 'Predict network actions on any network connection' (0) was set",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.networkpredictionoptions_networkpredictionnever",
- "displayName": "Don't predict network actions on any network connection",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.networkpredictionoptions_recommended",
- "displayName": "Enable network prediction (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.networkpredictionoptions_recommended_networkpredictionalways",
- "displayName": "Predict network actions on any network connection",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.networkpredictionoptions_recommended_networkpredictionwifionly",
- "displayName": "Not supported, if this value is used it will be treated as if 'Predict network actions on any network connection' (0) was set",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.networkpredictionoptions_recommended_networkpredictionnever",
- "displayName": "Don't predict network actions on any network connection",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newpdfreaderenabled",
- "displayName": "Microsoft Edge built-in PDF reader powered by Adobe Acrobat enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newpdfreaderenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newpdfreaderenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newpdfreaderenabled_recommended",
- "displayName": "Microsoft Edge built-in PDF reader powered by Adobe Acrobat enabled (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newpdfreaderenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newpdfreaderenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageallowedbackgroundtypes",
- "displayName": "Configure the background types allowed for the new tab page layout",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageallowedbackgroundtypes_disableimageoftheday",
- "displayName": "Disable daily background image type",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageallowedbackgroundtypes_disablecustomimage",
- "displayName": "Disable custom background image type",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageallowedbackgroundtypes_disableall",
- "displayName": "Disable all background image types",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageapplauncherenabled",
- "displayName": "Hide App Launcher on Microsoft Edge new tab page",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageapplauncherenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageapplauncherenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagebingchatenabled",
- "displayName": "Disable Bing chat entry-points on Microsoft Edge Enterprise new tab page",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagebingchatenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagebingchatenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagecompanylogo",
- "displayName": "Set new tab page company logo (Obsolete)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagecompanylogobackplatecolor",
- "displayName": "Set the company logo backplate color on the new tab page.",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagecompanylogoenabled",
- "displayName": "Hide the company logo on the Microsoft Edge new tab page",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagecompanylogoenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagecompanylogoenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagecontentenabled",
- "displayName": "Allow Microsoft content on the new tab page",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagecontentenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagecontentenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagehidedefaulttopsites",
- "displayName": "Hide the default top sites from the new tab page",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagehidedefaulttopsites_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagehidedefaulttopsites_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagelocation",
- "displayName": "Configure the new tab page URL",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagelocation_recommended",
- "displayName": "Configure the new tab page URL (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagemanagedquicklinks",
- "displayName": "Set new tab page quick links",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagemanagedquicklinks_recommended",
- "displayName": "Set new tab page quick links (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageprerenderenabled",
- "displayName": "Enable preload of the new tab page for faster rendering",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageprerenderenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageprerenderenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageprerenderenabled_recommended",
- "displayName": "Enable preload of the new tab page for faster rendering (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageprerenderenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpageprerenderenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagequicklinksenabled",
- "displayName": "Allow quick links on the new tab page",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagequicklinksenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagequicklinksenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesearchbox",
- "displayName": "Configure the new tab page search box experience",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesearchbox_bing",
- "displayName": "Search box (Recommended)",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesearchbox_redirect",
- "displayName": "Address bar",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesearchbox_recommended",
- "displayName": "Configure the new tab page search box experience (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesearchbox_recommended_bing",
- "displayName": "Search box (Recommended)",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesearchbox_recommended_redirect",
- "displayName": "Address bar",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesetfeedtype",
- "displayName": "Configure the Microsoft Edge new tab page experience (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesetfeedtype_news",
- "displayName": "Microsoft News feed experience",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesetfeedtype_office",
- "displayName": "Office 365 feed experience",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesetfeedtype_recommended",
- "displayName": "Configure the Microsoft Edge new tab page experience (Obsolete) (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesetfeedtype_recommended_news",
- "displayName": "Microsoft News feed experience",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.newtabpagesetfeedtype_recommended_office",
- "displayName": "Office 365 feed experience",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.notificationsallowedforurls",
- "displayName": "Allow notifications on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.notificationsblockedforurls",
- "displayName": "Block notifications on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.onbulkdataentryenterpriseconnector",
- "displayName": "Configuration policy for bulk data entry for Microsoft Edge for Business Data Loss Prevention Connectors",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.onfileattachedenterpriseconnector",
- "displayName": "Configuration policy for files attached for Microsoft Edge for Business Data Loss Prevention Connectors",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.onprintenterpriseconnector",
- "displayName": "Configuration policy for print for Microsoft Edge for Business Data Loss Prevention Connectors",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.onsecurityevententerpriseconnector",
- "displayName": "Configuration policy for Microsoft Edge for Business Reporting Connectors",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.organizationalbrandingonworkprofileuienabled_recommended",
- "displayName": "Allow the use of your organization's branding assets from Microsoft Entra on the profile-related UI of a work or school profile (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.organizationalbrandingonworkprofileuienabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.organizationalbrandingonworkprofileuienabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.organizationlogooverlayonappiconenabled_recommended",
- "displayName": "Allow your organization's logo from Microsoft Entra to be overlaid on the Microsoft Edge app icon of a work or school profile (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.organizationlogooverlayonappiconenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.organizationlogooverlayonappiconenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.originagentclusterdefaultenabled",
- "displayName": "Origin-keyed agent clustering enabled by default",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.originagentclusterdefaultenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.originagentclusterdefaultenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.outlookhubmenuenabled",
- "displayName": "Allow users to access the Outlook menu (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.outlookhubmenuenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.outlookhubmenuenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.outlookhubmenuenabled_recommended",
- "displayName": "Allow users to access the Outlook menu (Obsolete) (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.outlookhubmenuenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.outlookhubmenuenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.partitionedbloburlusage",
- "displayName": "Manage Blob URL Partitioning During Fetching and Navigation",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.partitionedbloburlusage_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.partitionedbloburlusage_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passworddeleteonbrowsercloseenabled",
- "displayName": "Prevent passwords from being deleted if any Edge settings is enabled to delete browsing data when Microsoft Edge closes",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passworddeleteonbrowsercloseenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passworddeleteonbrowsercloseenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passworddeleteonbrowsercloseenabled_recommended",
- "displayName": "Prevent passwords from being deleted if any Edge settings is enabled to delete browsing data when Microsoft Edge closes (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passworddeleteonbrowsercloseenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passworddeleteonbrowsercloseenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordexportenabled",
- "displayName": "Enable exporting saved passwords from Password Manager",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordexportenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordexportenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordgeneratorenabled",
- "displayName": "Allow users to get a strong password suggestion whenever they are creating an account online",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordgeneratorenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordgeneratorenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerblocklist",
- "displayName": "Configure the list of domains for which the password manager UI (Save and Fill) will be disabled",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerenabled",
- "displayName": "Enable saving passwords to the password manager",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerenabled_recommended",
- "displayName": "Enable saving passwords to the password manager (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerrestrictlengthenabled",
- "displayName": "Restrict the length of passwords that can be saved in the Password Manager",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerrestrictlengthenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmanagerrestrictlengthenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmonitorallowed",
- "displayName": "Allow users to be alerted if their passwords are found to be unsafe",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmonitorallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmonitorallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmonitorallowed_recommended",
- "displayName": "Allow users to be alerted if their passwords are found to be unsafe (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmonitorallowed_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordmonitorallowed_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordprotectionchangepasswordurl",
- "displayName": "Configure the change password URL",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordprotectionloginurls",
- "displayName": "Configure the list of enterprise login URLs where the password protection service should capture salted hashes of a password",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordprotectionwarningtrigger",
- "displayName": "Configure password protection warning trigger",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordprotectionwarningtrigger_passwordprotectionwarningoff",
- "displayName": "Password protection warning is off",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordprotectionwarningtrigger_passwordprotectionwarningonpasswordreuse",
- "displayName": "Password protection warning is triggered by password reuse",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordrevealenabled",
- "displayName": "Enable Password reveal button",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordrevealenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordrevealenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordrevealenabled_recommended",
- "displayName": "Enable Password reveal button (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordrevealenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.passwordrevealenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.paymentmethodqueryenabled",
- "displayName": "Allow websites to query for available payment methods",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.paymentmethodqueryenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.paymentmethodqueryenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfsecuremode",
- "displayName": "Secure mode and Certificate-based Digital Signature validation in native PDF reader",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfsecuremode_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfsecuremode_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfvieweroutofprocessiframeenabled",
- "displayName": "Use out-of-process iframe PDF Viewer",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfvieweroutofprocessiframeenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfvieweroutofprocessiframeenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfxfaenabled",
- "displayName": "XFA support in native PDF reader enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfxfaenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pdfxfaenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.performancedetectorenabled",
- "displayName": "Performance Detector Enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.performancedetectorenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.performancedetectorenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.performancedetectorenabled_recommended",
- "displayName": "Performance Detector Enabled (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.performancedetectorenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.performancedetectorenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.personalizationreportingenabled",
- "displayName": "Allow personalization of ads, Microsoft Edge, search, news and other Microsoft services by sending browsing history, favorites and collections, usage and other browsing data to Microsoft",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.personalizationreportingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.personalizationreportingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.personalizetopsitesincustomizesidebarenabled",
- "displayName": "Personalize my top sites in Customize Sidebar enabled by default",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.personalizetopsitesincustomizesidebarenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.personalizetopsitesincustomizesidebarenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pictureinpictureoverlayenabled",
- "displayName": "Enable Picture in Picture overlay feature on supported webpages in Microsoft Edge",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pictureinpictureoverlayenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pictureinpictureoverlayenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pinbrowseressentialstoolbarbutton",
- "displayName": "Pin browser essentials toolbar button",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pinbrowseressentialstoolbarbutton_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pinbrowseressentialstoolbarbutton_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pinbrowseressentialstoolbarbutton_recommended",
- "displayName": "Pin browser essentials toolbar button (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pinbrowseressentialstoolbarbutton_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pinbrowseressentialstoolbarbutton_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pluginsallowedforurls",
- "displayName": "Allow the Adobe Flash plug-in on specific sites (Obsolete)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.pluginsblockedforurls",
- "displayName": "Block the Adobe Flash plug-in on specific sites (Obsolete)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.popupsallowedforurls",
- "displayName": "Allow pop-up windows on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.popupsblockedforurls",
- "displayName": "Block pop-up windows on specific sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.precisegeolocationallowedforurls",
- "displayName": "Allow precise geolocation on these sites",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.prefetchwithserviceworkerenabled",
- "displayName": "Allow SpeculationRules prefetch for ServiceWorker-controlled URLs",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.prefetchwithserviceworkerenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.prefetchwithserviceworkerenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventsmartscreenpromptoverride",
- "displayName": "Prevent bypassing Microsoft Defender SmartScreen prompts for sites",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventsmartscreenpromptoverride_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventsmartscreenpromptoverride_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventsmartscreenpromptoverrideforfiles",
- "displayName": "Prevent bypassing of Microsoft Defender SmartScreen warnings about downloads",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventsmartscreenpromptoverrideforfiles_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventsmartscreenpromptoverrideforfiles_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventtyposquattingpromptoverride",
- "displayName": "Prevent bypassing Edge Website Typo Protection prompts for sites",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventtyposquattingpromptoverride_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.preventtyposquattingpromptoverride_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.primarypasswordsetting",
- "displayName": "Configures a setting that asks users to enter their device password while using password autofill",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.primarypasswordsetting_automatically",
- "displayName": "Automatically",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.primarypasswordsetting_withdevicepassword",
- "displayName": "With device password",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.primarypasswordsetting_withcustomprimarypassword",
- "displayName": "With custom primary password",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.primarypasswordsetting_autofilloff",
- "displayName": "Autofill off",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printertypedenylist",
- "displayName": "Disable printer types on the deny list",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printertypedenylist_privet",
- "displayName": "Zeroconf-based (mDNS + DNS-SD) protocol destinations",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printertypedenylist_extension",
- "displayName": "Extension-based destinations",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printertypedenylist_pdf",
- "displayName": "The 'Save as PDF' destination. (93 or later, also disables from context menu)",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printertypedenylist_local",
- "displayName": "Local printer destinations",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printertypedenylist_onedrive",
- "displayName": "Save as PDF (OneDrive) printer destinations. (103 or later)",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingallowedbackgroundgraphicsmodes",
- "displayName": "Restrict background graphics printing mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingallowedbackgroundgraphicsmodes_any",
- "displayName": "Allow printing with and without background graphics",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingallowedbackgroundgraphicsmodes_enabled",
- "displayName": "Allow printing only with background graphics",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingallowedbackgroundgraphicsmodes_disabled",
- "displayName": "Allow printing only without background graphics",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingbackgroundgraphicsdefault",
- "displayName": "Default background graphics printing mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingbackgroundgraphicsdefault_enabled",
- "displayName": "Enable background graphics printing mode by default",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingbackgroundgraphicsdefault_disabled",
- "displayName": "Disable background graphics printing mode by default",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingenabled",
- "displayName": "Enable printing",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingpapersizedefault",
- "displayName": "Default printing page size",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingwebpagelayout",
- "displayName": "Sets layout for printing",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingwebpagelayout_portrait",
- "displayName": "Sets layout option as portrait",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingwebpagelayout_landscape",
- "displayName": "Sets layout option as landscape",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingwebpagelayout_recommended",
- "displayName": "Sets layout for printing (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingwebpagelayout_recommended_portrait",
- "displayName": "Sets layout option as portrait",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printingwebpagelayout_recommended_landscape",
- "displayName": "Sets layout option as landscape",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpdfasimagedefault",
- "displayName": "Print PDF as Image Default",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpdfasimagedefault_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpdfasimagedefault_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpostscriptmode",
- "displayName": "Print PostScript Mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpostscriptmode_default",
- "displayName": "Default",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpostscriptmode_type42",
- "displayName": "Type42",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpreviewstickysettings",
- "displayName": "Configure the sticky print preview settings",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpreviewstickysettings_recommended",
- "displayName": "Configure the sticky print preview settings (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpreviewusesystemdefaultprinter",
- "displayName": "Set the system default printer as the default printer",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpreviewusesystemdefaultprinter_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpreviewusesystemdefaultprinter_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpreviewusesystemdefaultprinter_recommended",
- "displayName": "Set the system default printer as the default printer (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpreviewusesystemdefaultprinter_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printpreviewusesystemdefaultprinter_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printrasterizationmode",
- "displayName": "Print Rasterization Mode",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printrasterizationmode_full",
- "displayName": "Full page rasterization",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printrasterizationmode_fast",
- "displayName": "Avoid rasterization if possible",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printrasterizepdfdpi",
- "displayName": "Print Rasterize PDF DPI",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printstickysettings",
- "displayName": "Print preview sticky settings",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printstickysettings_enableall",
- "displayName": "Enable sticky settings for PDF and Webpages",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printstickysettings_disableall",
- "displayName": "Disable sticky settings for PDF and Webpages",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printstickysettings_disablepdf",
- "displayName": "Disable sticky settings for PDF",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.printstickysettings_disablewebpage",
- "displayName": "Disable sticky settings for Webpages",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proactiveauthenabled",
- "displayName": "Enable Proactive Authentication (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proactiveauthenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proactiveauthenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proactiveauthworkflowenabled",
- "displayName": "Enable proactive authentication",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proactiveauthworkflowenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proactiveauthworkflowenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.promptfordownloadlocation",
- "displayName": "Ask where to save downloaded files",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.promptfordownloadlocation_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.promptfordownloadlocation_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.promptonmultiplematchingcertificates",
- "displayName": "Prompt the user to select a certificate when multiple certificates match",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.promptonmultiplematchingcertificates_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.promptonmultiplematchingcertificates_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxybypasslist",
- "displayName": "Configure proxy bypass rules (Deprecated)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxymode",
- "displayName": "Configure proxy server settings (Deprecated)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxymode_proxydisabled",
- "displayName": "Never use a proxy",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxymode_proxyautodetect",
- "displayName": "Auto detect proxy settings",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxymode_proxypacscript",
- "displayName": "Use a .pac proxy script",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxymode_proxyfixedservers",
- "displayName": "Use fixed proxy servers",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxymode_proxyusesystem",
- "displayName": "Use system proxy settings",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxypacurl",
- "displayName": "Set the proxy .pac file URL (Deprecated)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxyserver",
- "displayName": "Configure address or URL of proxy server (Deprecated)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.proxysettings",
- "displayName": "Proxy settings",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quicksearchshowminimenu",
- "displayName": "Enables Microsoft Edge mini menu",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quicksearchshowminimenu_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quicksearchshowminimenu_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quicksearchshowminimenu_recommended",
- "displayName": "Enables Microsoft Edge mini menu (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quicksearchshowminimenu_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quicksearchshowminimenu_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quickviewofficefilesenabled",
- "displayName": "Manage QuickView Office files capability in Microsoft Edge",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quickviewofficefilesenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.quickviewofficefilesenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.readaloudenabled",
- "displayName": "Enable Read Aloud feature in Microsoft Edge",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.readaloudenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.readaloudenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.registeredprotocolhandlers",
- "displayName": "Register protocol handlers",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.registeredprotocolhandlers_recommended",
- "displayName": "Register protocol handlers (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.relatedmatchescloudserviceenabled",
- "displayName": "Configure Related Matches in Find on Page (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.relatedmatchescloudserviceenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.relatedmatchescloudserviceenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.relatedwebsitesetsenabled",
- "displayName": "Enable Related Website Sets (Deprecated)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.relatedwebsitesetsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.relatedwebsitesetsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.relatedwebsitesetsoverrides",
- "displayName": "Override Related Website Sets. (Deprecated)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.resolvenavigationerrorsusewebservice",
- "displayName": "Enable resolution of navigation errors using a web service",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.resolvenavigationerrorsusewebservice_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.resolvenavigationerrorsusewebservice_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.resolvenavigationerrorsusewebservice_recommended",
- "displayName": "Enable resolution of navigation errors using a web service (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.resolvenavigationerrorsusewebservice_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.resolvenavigationerrorsusewebservice_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup",
- "displayName": "Action to take on Microsoft Edge startup",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_restoreonstartupisnewtabpage",
- "displayName": "Open a new tab",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_restoreonstartupislastsession",
- "displayName": "Restore the last session",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_restoreonstartupisurls",
- "displayName": "Open a list of URLs",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_restoreonstartupislastsessionandurls",
- "displayName": "Open a list of URLs and restore the last session",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_recommended",
- "displayName": "Action to take on Microsoft Edge startup (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_recommended_restoreonstartupisnewtabpage",
- "displayName": "Open a new tab",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_recommended_restoreonstartupislastsession",
- "displayName": "Restore the last session",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_recommended_restoreonstartupisurls",
- "displayName": "Open a list of URLs",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartup_recommended_restoreonstartupislastsessionandurls",
- "displayName": "Open a list of URLs and restore the last session",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartupurls",
- "displayName": "Sites to open when the browser starts",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartupurls_recommended",
- "displayName": "Sites to open when the browser starts (users can override)",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartupuserurlsenabled",
- "displayName": "Allow users to add and remove their own sites during startup when the RestoreOnStartupURLs policy is configured",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartupuserurlsenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restoreonstartupuserurlsenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restorepdfview",
- "displayName": "Restore PDF view",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restorepdfview_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.restorepdfview_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.runallflashinallowmode",
- "displayName": "Extend Adobe Flash content setting to all content (Obsolete)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.runallflashinallowmode_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.runallflashinallowmode_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.sameorigintabcaptureallowedbyorigins",
- "displayName": "Allow Same Origin Tab capture by these origins",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.sandboxexternalprotocolblocked",
- "displayName": "Allow Microsoft Edge to block navigations to external protocols in a sandboxed iframe",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.sandboxexternalprotocolblocked_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.sandboxexternalprotocolblocked_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.savecookiesonexit",
- "displayName": "Save cookies when Microsoft Edge closes",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.savingbrowserhistorydisabled",
- "displayName": "Disable saving browser history",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.savingbrowserhistorydisabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.savingbrowserhistorydisabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.scarewareblockerallowlistdomains",
- "displayName": "Configure the list of domains where Microsoft Edge Scareware blockers don't run",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.screencaptureallowed",
- "displayName": "Allow or deny screen capture",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.screencaptureallowed_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.screencaptureallowed_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.screencaptureallowedbyorigins",
- "displayName": "Allow Desktop, Window, and Tab capture by these origins",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.screencapturewithoutgestureallowedfororigins",
- "displayName": "Allow screen capture without prior user gesture",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.scrolltotextfragmentenabled",
- "displayName": "Enable scrolling to text specified in URL fragments",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.scrolltotextfragmentenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.scrolltotextfragmentenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchfiltersenabled",
- "displayName": "Search Filters Enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchfiltersenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchfiltersenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchfiltersenabled_recommended",
- "displayName": "Search Filters Enabled (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchfiltersenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchfiltersenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchforimageenabled",
- "displayName": "Search for image enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchforimageenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchforimageenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchinsidebarenabled",
- "displayName": "Search in Sidebar enabled",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchinsidebarenabled_enablesearchinsidebar",
- "displayName": "Enable search in sidebar",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchinsidebarenabled_disablesearchinsidebarforkidsmode",
- "displayName": "Disable search in sidebar for Kids Mode",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchinsidebarenabled_disablesearchinsidebar",
- "displayName": "Disable search in sidebar",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchsuggestenabled",
- "displayName": "Enable search suggestions",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchsuggestenabled_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchsuggestenabled_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchsuggestenabled_recommended",
- "displayName": "Enable search suggestions (users can override)",
- "options": [
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchsuggestenabled_recommended_false",
- "displayName": "Disabled",
- "description": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.searchsuggestenabled_recommended_true",
- "displayName": "Enabled",
- "description": null
- }
- ]
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.securitykeypermitattestation",
- "displayName": "Websites or domains that don't need permission to use direct Security Key attestation",
- "options": null
- },
- {
- "id": "com.microsoft.edge.mamedgeappconfigsettings.selectparserrelaxationenabled",
- "displayName": "Controls whether the new HTML parser behavior for the
@@ -371,20 +528,20 @@ function CippJsonView({
}
/>
- );
- } else if (typeof value === "string" && isGuid(value) && isLoadingGuids) {
+ )
+ } else if (typeof value === 'string' && isGuid(value) && isLoadingGuids) {
items.push(
+
{getCippFormatting(value, key)}
}
/>
- );
+ )
} else {
items.push(
- );
+ )
}
- });
+ })
}
- return items;
- };
+ return items
+ }
useEffect(() => {
- if (!type && (object?.omaSettings || object?.settings || object?.added)) {
- type = "intune";
- }
const blacklist = [
- "selectedOption",
- "GUID",
- "ID",
- "id",
- "noSubmitButton",
- "createdDateTime",
- "modifiedDateTime",
- ];
- const cleanedObj = cleanObject(object) || {};
+ 'selectedOption',
+ 'GUID',
+ 'ID',
+ 'id',
+ 'noSubmitButton',
+ 'createdDateTime',
+ 'modifiedDateTime',
+ ]
+ const cleanedObj = cleanObject(object) || {}
const filteredObj = Object.fromEntries(
Object.entries(cleanedObj).filter(([key]) => !blacklist.includes(key))
- );
- setDrilldownData([{ data: filteredObj, title: null }]);
+ )
+ setDrilldownData([{ data: filteredObj, title: null }])
// Using the resolveGuids function from the hook to handle GUID resolution
- resolveGuids(cleanedObj);
+ resolveGuids(cleanedObj)
// eslint-disable-next-line react-hooks/exhaustive-deps
- }, [object]);
+ }, [object])
- const toggleView = () => setViewJson(!viewJson);
+ const toggleView = () => setViewJson(!viewJson)
const handleItemClick = (itemData, level) => {
- const updatedData = drilldownData.slice(0, level + 1);
+ const updatedData = drilldownData.slice(0, level + 1)
// Helper to check if an array contains only simple key/value objects
const isArrayOfKeyValuePairs = (arr) => {
- if (!Array.isArray(arr) || arr.length === 0) return false;
+ if (!Array.isArray(arr) || arr.length === 0) return false
return arr.every((item) => {
- if (typeof item !== "object" || item === null || Array.isArray(item)) return false;
+ if (typeof item !== 'object' || item === null || Array.isArray(item)) return false
// Check if all values are primitives (not nested objects/arrays)
- return Object.values(item).every((val) => typeof val !== "object" || val === null);
- });
- };
+ return Object.values(item).every((val) => typeof val !== 'object' || val === null)
+ })
+ }
// Compress single-property objects and single-item arrays into the same pane
- let dataToAdd = itemData;
- const compressedKeys = [];
- let wasCompressed = false;
+ let dataToAdd = itemData
+ const compressedKeys = []
+ let wasCompressed = false
// Special handling for diff changes object
if (dataToAdd?.changes && Array.isArray(dataToAdd.changes)) {
- const diffObject = {};
- const blacklistFields = ["createdDateTime", "modifiedDateTime", "id"];
+ const diffObject = {}
+ const blacklistFields = ['createdDateTime', 'modifiedDateTime', 'id']
dataToAdd.changes.forEach((change) => {
- const label = change.path;
+ const label = change.path
// Skip blacklisted fields in nested paths
- const pathParts = label.split(".");
- const lastPart = pathParts[pathParts.length - 1];
+ const pathParts = label.split('.')
+ const lastPart = pathParts[pathParts.length - 1]
if (blacklistFields.includes(lastPart)) {
- return;
+ return
}
- let hasValue = false;
- let displayValue = "";
+ let hasValue = false
+ let displayValue = ''
- if (change.type === "added") {
- if (change.newValue !== null && change.newValue !== undefined && change.newValue !== "") {
- displayValue = `[ADDED] ${JSON.stringify(change.newValue)}`;
- hasValue = true;
+ if (change.type === 'added') {
+ if (change.newValue !== null && change.newValue !== undefined && change.newValue !== '') {
+ displayValue = `[ADDED] ${JSON.stringify(change.newValue)}`
+ hasValue = true
}
- } else if (change.type === "removed") {
- if (change.oldValue !== null && change.oldValue !== undefined && change.oldValue !== "") {
- displayValue = `[REMOVED] ${JSON.stringify(change.oldValue)}`;
- hasValue = true;
+ } else if (change.type === 'removed') {
+ if (change.oldValue !== null && change.oldValue !== undefined && change.oldValue !== '') {
+ displayValue = `[REMOVED] ${JSON.stringify(change.oldValue)}`
+ hasValue = true
}
- } else if (change.type === "modified") {
+ } else if (change.type === 'modified') {
const oldHasValue =
- change.oldValue !== null && change.oldValue !== undefined && change.oldValue !== "";
+ change.oldValue !== null && change.oldValue !== undefined && change.oldValue !== ''
const newHasValue =
- change.newValue !== null && change.newValue !== undefined && change.newValue !== "";
+ change.newValue !== null && change.newValue !== undefined && change.newValue !== ''
// Only show if at least one side has a meaningful value (not both empty)
if (oldHasValue || newHasValue) {
@@ -484,90 +638,90 @@ function CippJsonView({
if (oldHasValue && newHasValue) {
displayValue = `${JSON.stringify(change.oldValue)} → ${JSON.stringify(
change.newValue
- )}`;
- hasValue = true;
+ )}`
+ hasValue = true
}
// If only new has value, treat as added
else if (newHasValue) {
- displayValue = `[ADDED] ${JSON.stringify(change.newValue)}`;
- hasValue = true;
+ displayValue = `[ADDED] ${JSON.stringify(change.newValue)}`
+ hasValue = true
}
// If only old has value, treat as removed
else if (oldHasValue) {
- displayValue = `[REMOVED] ${JSON.stringify(change.oldValue)}`;
- hasValue = true;
+ displayValue = `[REMOVED] ${JSON.stringify(change.oldValue)}`
+ hasValue = true
}
}
}
if (hasValue) {
- diffObject[label] = displayValue;
+ diffObject[label] = displayValue
}
- });
+ })
// Mark this object as containing diff data
- dataToAdd = { ...diffObject, __isDiffData: true };
+ dataToAdd = { ...diffObject, __isDiffData: true }
}
// Check if this is an array of items with oldValue/newValue (modifiedProperties pattern)
const hasOldNewValues = (arr) => {
- if (!Array.isArray(arr) || arr.length === 0) return false;
- return arr.some((item) => item?.oldValue !== undefined || item?.newValue !== undefined);
- };
+ if (!Array.isArray(arr) || arr.length === 0) return false
+ return arr.some((item) => item?.oldValue !== undefined || item?.newValue !== undefined)
+ }
// If the data is an array of key/value pairs, convert to a flat object
// But skip if it's an array with oldValue/newValue properties (let normal rendering handle it)
if (isArrayOfKeyValuePairs(dataToAdd) && !hasOldNewValues(dataToAdd)) {
- const flatObject = {};
+ const flatObject = {}
dataToAdd.forEach((item) => {
- const key = item.key || item.name || item.displayName;
- const value = item.value || item.newValue || "";
+ const key = item.key || item.name || item.displayName
+ const value = item.value || item.newValue || ''
if (key) {
- flatObject[key] = value;
+ flatObject[key] = value
}
- });
- dataToAdd = flatObject;
+ })
+ dataToAdd = flatObject
}
- while (dataToAdd && typeof dataToAdd === "object") {
+ while (dataToAdd && typeof dataToAdd === 'object') {
// Handle single-item arrays
if (Array.isArray(dataToAdd) && dataToAdd.length === 1) {
- const singleItem = dataToAdd[0];
- if (singleItem && typeof singleItem === "object") {
- compressedKeys.push("[0]");
- dataToAdd = singleItem;
- wasCompressed = true;
- continue;
+ const singleItem = dataToAdd[0]
+ if (singleItem && typeof singleItem === 'object') {
+ compressedKeys.push('[0]')
+ dataToAdd = singleItem
+ wasCompressed = true
+ continue
} else {
- break;
+ break
}
}
// Handle single-property objects
if (!Array.isArray(dataToAdd) && Object.keys(dataToAdd).length === 1) {
- const singleKey = Object.keys(dataToAdd)[0];
- const singleValue = dataToAdd[singleKey];
+ const singleKey = Object.keys(dataToAdd)[0]
+ const singleValue = dataToAdd[singleKey]
// Only compress if the value is also an object or single-item array
- if (singleValue && typeof singleValue === "object") {
- compressedKeys.push(singleKey);
- dataToAdd = singleValue;
- wasCompressed = true;
- continue;
+ if (singleValue && typeof singleValue === 'object') {
+ compressedKeys.push(singleKey)
+ dataToAdd = singleValue
+ wasCompressed = true
+ continue
}
}
- break;
+ break
}
// Create title from compressed keys if compression occurred
- const title = wasCompressed ? compressedKeys.join(" > ") : null;
+ const title = wasCompressed ? compressedKeys.join(' > ') : null
- updatedData[level + 1] = { data: dataToAdd, title };
- setDrilldownData(updatedData);
+ updatedData[level + 1] = { data: dataToAdd, title }
+ setDrilldownData(updatedData)
// Use the resolveGuids function from the hook to handle GUID resolution for drill-down data
- resolveGuids(dataToAdd);
- };
+ resolveGuids(dataToAdd)
+ }
return (
}
- sx={{ display: "flex", alignItems: "center" }}
+ sx={{ display: 'flex', alignItems: 'center' }}
>
-
+
{title}
{isLoadingGuids && (
-
+
Resolving object identifiers...
)}
@@ -602,24 +756,25 @@ function CippJsonView({
?.filter((item) => item !== null && item !== undefined)
.map((item, index) => (
4, and add spacing between the top and bottom items
paddingTop: index === 0 ? 0 : 2,
- borderTop: index >= 4 && type !== "intune" ? "1px solid lightgrey" : "none",
- borderRight: index < drilldownData.length - 1 ? "1px solid lightgrey" : "none",
- overflowWrap: "anywhere",
- whiteSpace: "pre-line",
+ borderTop:
+ index >= 4 && resolvedType !== 'intune' ? '1px solid lightgrey' : 'none',
+ borderRight: index < drilldownData.length - 1 ? '1px solid lightgrey' : 'none',
+ overflowWrap: 'anywhere',
+ whiteSpace: 'pre-line',
paddingRight: 2,
}}
>
{item.title && (
-
+
{getCippTranslation(item.title)}
)}
- {type !== "intune" && (
+ {resolvedType !== 'intune' && (
{renderListItems(
item.data,
@@ -630,14 +785,16 @@ function CippJsonView({
)}
)}
- {type === "intune" && {renderIntuneItems(item.data)}}
+ {resolvedType === 'intune' && (
+ {renderIntuneItems(item.data)}
+ )}
))}
)}
- );
+ )
}
-export default CippJsonView;
+export default CippJsonView
diff --git a/src/pages/endpoint/MEM/list-policies/index.js b/src/pages/endpoint/MEM/list-policies/index.js
index 8cc3cd2cb653..dd241aa91016 100644
--- a/src/pages/endpoint/MEM/list-policies/index.js
+++ b/src/pages/endpoint/MEM/list-policies/index.js
@@ -5,6 +5,7 @@ import { CippPolicyDeployDrawer } from '../../../../components/CippComponents/Ci
import { useSettings } from '../../../../hooks/use-settings.js'
import { useCippIntunePolicyActions } from '../../../../components/CippComponents/CippIntunePolicyActions.jsx'
import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
+import { CippIntunePolicyDetails } from '../../../../components/CippComponents/CippIntunePolicyDetails.jsx'
import { Stack } from '@mui/system'
const Page = () => {
@@ -37,6 +38,8 @@ const Page = () => {
'PolicyTypeName',
],
actions: actions,
+ children: (row) => ,
+ size: 'lg',
}
const simpleColumns = [
From a442361473e13802c700b3a8ece4a0aaa02e3065 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 28 Apr 2026 17:30:08 -0400
Subject: [PATCH 080/181] fix: add sync button to remove groups
---
src/components/CippFormPages/CippAddEditUser.jsx | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx
index ac2b9a0262c8..d33a9705dfdb 100644
--- a/src/components/CippFormPages/CippAddEditUser.jsx
+++ b/src/components/CippFormPages/CippAddEditUser.jsx
@@ -851,6 +851,17 @@ const CippAddEditUser = (props) => {
}))}
creatable={false}
formControl={formControl}
+ customAction={{
+ icon: ,
+ tooltip: 'Refresh groups',
+ onClick: () => {
+ tenantGroups.refetch()
+ if (formType === 'edit') {
+ userGroups.refetch()
+ }
+ },
+ position: 'outside',
+ }}
/>
)}
From 3a709a13999faec107e333b0cd143f110fcac0eb Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 28 Apr 2026 17:31:26 -0400
Subject: [PATCH 081/181] chore: bump version to 10.4.2
---
package.json | 2 +-
public/version.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/package.json b/package.json
index 0560615cafee..b6cd7f8010a3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "cipp",
- "version": "10.4.1",
+ "version": "10.4.2",
"author": "CIPP Contributors",
"homepage": "https://cipp.app/",
"bugs": {
diff --git a/public/version.json b/public/version.json
index 4d2e87f1cdee..fdddd5f6239a 100644
--- a/public/version.json
+++ b/public/version.json
@@ -1,3 +1,3 @@
{
- "version": "10.4.1"
+ "version": "10.4.2"
}
From fbe9bc25519e474c01485c971a9990c3562e3519 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 28 Apr 2026 17:39:17 -0400
Subject: [PATCH 082/181] fix: dbcache resolved query key
---
src/components/CippComponents/CippReportDBControls.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/CippComponents/CippReportDBControls.jsx b/src/components/CippComponents/CippReportDBControls.jsx
index 84e7955830db..75d9c70e32c8 100644
--- a/src/components/CippComponents/CippReportDBControls.jsx
+++ b/src/components/CippComponents/CippReportDBControls.jsx
@@ -125,7 +125,7 @@ export function useCippReportDB(config) {
<>
Date: Wed, 29 Apr 2026 12:09:43 +0800
Subject: [PATCH 083/181] Bring in more deviation information into overview
---
src/pages/tenant/standards/alignment/index.js | 1 +
src/utils/get-cipp-formatting.js | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/src/pages/tenant/standards/alignment/index.js b/src/pages/tenant/standards/alignment/index.js
index a3cb0bab905e..45238be2960a 100644
--- a/src/pages/tenant/standards/alignment/index.js
+++ b/src/pages/tenant/standards/alignment/index.js
@@ -482,6 +482,7 @@ const Page = () => {
'alignmentScore',
'LicenseMissingPercentage',
'combinedAlignmentScore',
+ 'currentDeviationsCount',
]
}
queryKey={granular ? 'listTenantAlignment-granular' : 'listTenantAlignment'}
diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js
index b900905202ca..268c0f40b953 100644
--- a/src/utils/get-cipp-formatting.js
+++ b/src/utils/get-cipp-formatting.js
@@ -268,6 +268,14 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr
)
}
+ if (cellName === 'currentDeviationsCount') {
+ if (data === undefined || data === null) return isText ? 'N/A' :
+ const count = Number(data)
+ const color = count > 0 ? 'warning' : 'success'
+ const label = count > 0 ? `${count} Deviation${count !== 1 ? 's' : ''}` : 'None'
+ return isText ? label :
+ }
+
if (cellName === 'LicenseMissingPercentage') {
return isText ? (
`${data}%`
From 9dfb743e040cee3d21032196fb2b145568bb8a7e Mon Sep 17 00:00:00 2001
From: Chris Dewey <142454021+chris-dewey-1991@users.noreply.github.com>
Date: Wed, 29 Apr 2026 11:33:32 +0100
Subject: [PATCH 084/181] Update standards.json to remove Conflict
Reviewed and updated standards.json to remove conflict with Configure Encrypted Message Branding.
Signed-off-by: Chris Dewey <142454021+chris-dewey-1991@users.noreply.github.com>
---
src/data/standards.json | 72 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 70 insertions(+), 2 deletions(-)
diff --git a/src/data/standards.json b/src/data/standards.json
index 25052a9b610c..16caabd4ecd8 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -6304,7 +6304,75 @@
"EXCHANGE_S_ENTERPRISE_GOV",
"EXCHANGE_LITE"
]
- },,
+ },
+ {
+ "name": "standards.SPDisableCustomScripts",
+ "cat": "SharePoint Standards",
+ "tag": [],
+ "helpText": "Prevents users from running custom scripts on SharePoint and OneDrive sites. Custom scripts can modify site behaviors and bypass governance controls.",
+ "docsDescription": "Disables the ability to add and run custom scripts on SharePoint and OneDrive sites at the tenant level. When custom scripts are allowed, governance cannot be enforced, and the capabilities of inserted code cannot be scoped or blocked. Microsoft recommends using the SharePoint Framework instead of custom scripts.",
+ "executiveText": "Blocks custom scripts from being added to SharePoint and OneDrive sites, enforcing governance controls and preventing unscoped code execution. This aligns with Microsoft's Baseline Security Mode recommendation to permanently remove the ability to add new custom scripts, directing organizations to use the SharePoint Framework instead.",
+ "addedComponent": [],
+ "label": "Disable custom scripts on SharePoint sites",
+ "impact": "High Impact",
+ "impactColour": "danger",
+ "addedDate": "2026-04-28",
+ "powershellEquivalent": "Set-SPOTenant -CustomScriptsRestrictMode $true",
+ "recommendedBy": ["CIPP"],
+ "requiredCapabilities": [
+ "SHAREPOINTWAC",
+ "SHAREPOINTSTANDARD",
+ "SHAREPOINTENTERPRISE",
+ "SHAREPOINTENTERPRISE_EDU",
+ "ONEDRIVE_BASIC",
+ "ONEDRIVE_ENTERPRISE"
+ ]
+ },
+ {
+ "name": "standards.SPDisableStoreAccess",
+ "cat": "SharePoint Standards",
+ "tag": [],
+ "helpText": "Disables end users from installing applications from the Microsoft Store into SharePoint sites.",
+ "docsDescription": "Removes the ability for end users to install applications directly from the Microsoft Store into SharePoint. This prevents uncontrolled app installations that can increase governance costs and go against organizational policies.",
+ "executiveText": "Prevents end users from installing applications from the Microsoft Store into SharePoint sites, ensuring that only approved applications are available. This reduces governance overhead and aligns with Microsoft's Baseline Security Mode recommendations.",
+ "addedComponent": [],
+ "label": "Disable SharePoint Store access",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2026-04-28",
+ "powershellEquivalent": "Set-SPOTenant -DisableSharePointStoreAccess $true",
+ "recommendedBy": ["CIPP"],
+ "requiredCapabilities": [
+ "SHAREPOINTWAC",
+ "SHAREPOINTSTANDARD",
+ "SHAREPOINTENTERPRISE",
+ "SHAREPOINTENTERPRISE_EDU",
+ "ONEDRIVE_BASIC",
+ "ONEDRIVE_ENTERPRISE"
+ ]
+ },
+ {
+ "name": "standards.DisableEWS",
+ "cat": "Exchange Standards",
+ "tag": [],
+ "helpText": "Disables Exchange Web Services (EWS) organization-wide. This reduces the attack surface by blocking legacy API access to mailbox data. Warning: This may break Office web add-ins on builds older than 16.0.19127.",
+ "docsDescription": "Disables Exchange Web Services (EWS) at the organization level to reduce attack surface. EWS provides cross-platform API access to sensitive Exchange Online data such as emails, meetings, and contacts. If compromised, attackers can access confidential data, send phishing emails, or spoof identities. Disabling EWS also reduces legacy app usage and minimizes exploitable endpoints. Note that this may break first-party features including web add-ins for Word, Excel, PowerPoint, and Outlook on builds older than 16.0.19127.",
+ "executiveText": "Disables Exchange Web Services (EWS) across the organization to reduce attack surface and prevent legacy API access to sensitive mailbox data. This aligns with Microsoft's Baseline Security Mode recommendation to minimize exploitable endpoints while requiring updates to applications that depend on EWS.",
+ "addedComponent": [],
+ "label": "Disable Exchange Web Services",
+ "impact": "High Impact",
+ "impactColour": "danger",
+ "addedDate": "2026-04-28",
+ "powershellEquivalent": "Set-OrganizationConfig -EwsEnabled $false",
+ "recommendedBy": ["CIPP"],
+ "requiredCapabilities": [
+ "EXCHANGE_S_STANDARD",
+ "EXCHANGE_S_ENTERPRISE",
+ "EXCHANGE_S_STANDARD_GOV",
+ "EXCHANGE_S_ENTERPRISE_GOV",
+ "EXCHANGE_LITE"
+ ]
+ },
{
"name": "standards.OMEBranding",
"cat": "Exchange Standards",
@@ -6420,7 +6488,7 @@
"addedDate": "2026-04-25",
"powershellEquivalent": "Set-OMEConfiguration",
"recommendedBy": [],
- "requiredCapabilities": [
+ "requiredCapabilities": [
"EXCHANGE_S_STANDARD",
"EXCHANGE_S_ENTERPRISE",
"EXCHANGE_S_STANDARD_GOV",
From 7500ef13302b60986f685afc6f85c27267c67c76 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Wed, 29 Apr 2026 10:47:55 -0400
Subject: [PATCH 085/181] fix: remove groups type
---
src/components/CippFormPages/CippAddEditUser.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx
index d33a9705dfdb..1e4ac2353fd8 100644
--- a/src/components/CippFormPages/CippAddEditUser.jsx
+++ b/src/components/CippFormPages/CippAddEditUser.jsx
@@ -846,7 +846,7 @@ const CippAddEditUser = (props) => {
label: userGroups.DisplayName,
value: userGroups.id,
addedFields: {
- groupType: userGroups.groupType,
+ groupType: userGroups.calculatedGroupType || userGroups.groupType,
},
}))}
creatable={false}
From 5e963617608dbc7459900c541b3bc04efa697a75 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Wed, 29 Apr 2026 13:06:43 -0400
Subject: [PATCH 086/181] fix: build issue
---
next.config.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/next.config.js b/next.config.js
index 2399b9b84ed7..2922dd48c81e 100644
--- a/next.config.js
+++ b/next.config.js
@@ -23,6 +23,7 @@ const config = {
},
output: 'export',
distDir: './out',
+ productionBrowserSourceMaps: false,
}
module.exports = config
From c7c9dc06766312463e1e9e163d8cf98cae2ff6b4 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Wed, 29 Apr 2026 13:12:17 -0400
Subject: [PATCH 087/181] undo change
---
next.config.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/next.config.js b/next.config.js
index 2922dd48c81e..2399b9b84ed7 100644
--- a/next.config.js
+++ b/next.config.js
@@ -23,7 +23,6 @@ const config = {
},
output: 'export',
distDir: './out',
- productionBrowserSourceMaps: false,
}
module.exports = config
From 46cf0519d963e0b6b59c7923c53ef28f4df58034 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Wed, 29 Apr 2026 16:00:03 -0400
Subject: [PATCH 088/181] fix: turbopack prod build issues, switch to webpack
---
next.config.js | 27 +-
package.json | 2 +-
.../CippWizard/OnboardingWizardPage.jsx | 156 ++++++++++
src/layouts/index.js | 281 +++++++++---------
src/pages/_app.js | 10 +-
src/pages/onboardingv2.js | 162 +---------
6 files changed, 329 insertions(+), 309 deletions(-)
create mode 100644 src/components/CippWizard/OnboardingWizardPage.jsx
diff --git a/next.config.js b/next.config.js
index 2399b9b84ed7..97685f34f91e 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,6 +1,27 @@
+const disableOptimizePackageImports = process.env.NEXT_DISABLE_OPTIMIZE_PACKAGE_IMPORTS === '1'
+
/** @type {import('next').NextConfig} */
const config = {
reactStrictMode: false,
+ experimental: {
+ optimizePackageImports: disableOptimizePackageImports
+ ? []
+ : [
+ '@mui/material',
+ '@mui/icons-material',
+ '@mui/lab',
+ '@mui/system',
+ '@mui/x-date-pickers',
+ 'material-react-table',
+ 'mui-tiptap',
+ 'recharts',
+ '@react-pdf/renderer',
+ ],
+ webpackMemoryOptimizations: true,
+ preloadEntriesOnStart: false,
+ turbopackFileSystemCacheForDev: false,
+ turbopackMemoryLimit: 4096,
+ },
images: {
unoptimized: true,
},
@@ -12,12 +33,6 @@ const config = {
},
},
},
- experimental: {
- webpackMemoryOptimizations: true,
- preloadEntriesOnStart: false,
- turbopackFileSystemCacheForDev: false,
- turbopackMemoryLimit: 4096,
- },
async redirects() {
return []
},
diff --git a/package.json b/package.json
index b6cd7f8010a3..c482c5a02a21 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,7 @@
},
"scripts": {
"dev": "next -H 127.0.0.1",
- "build": "next build && rm -rf package.json yarn.lock",
+ "build": "next build --webpack && rm -rf package.json yarn.lock",
"start": "next start",
"export": "next export",
"lint": "npx eslint .",
diff --git a/src/components/CippWizard/OnboardingWizardPage.jsx b/src/components/CippWizard/OnboardingWizardPage.jsx
new file mode 100644
index 000000000000..c80416dc8622
--- /dev/null
+++ b/src/components/CippWizard/OnboardingWizardPage.jsx
@@ -0,0 +1,156 @@
+import { CippWizardConfirmation } from './CippWizardConfirmation.jsx'
+import { CippDeploymentStep } from './CIPPDeploymentStep.jsx'
+import CippWizardPage from './CippWizardPage.jsx'
+import { CippWizardOptionsList } from './CippWizardOptionsList.jsx'
+import { CippSAMDeploy } from './CippSAMDeploy.jsx'
+import { CippTenantModeDeploy } from './CippTenantModeDeploy.jsx'
+import { CippBaselinesStep } from './CippBaselinesStep.jsx'
+import { CippNotificationsStep } from './CippNotificationsStep.jsx'
+import { CippAlertsStep } from './CippAlertsStep.jsx'
+import { CippAddTenantTypeSelection } from './CippAddTenantTypeSelection.jsx'
+import { CippDirectTenantDeploy } from './CippDirectTenantDeploy.jsx'
+import { CippGDAPTenantSetup } from './CippGDAPTenantSetup.jsx'
+import { CippGDAPTenantOnboarding } from './CippGDAPTenantOnboarding.jsx'
+import { BuildingOfficeIcon, CloudIcon, CpuChipIcon } from '@heroicons/react/24/outline'
+import { useRouter } from 'next/router'
+
+const OnboardingWizardPage = () => {
+ const router = useRouter()
+ const selectedOptionQuery = router.query?.selectedOption
+ const deepLinkedOption = Array.isArray(selectedOptionQuery)
+ ? selectedOptionQuery[0]
+ : selectedOptionQuery
+
+ const setupOptions = [
+ {
+ description:
+ "Choose this option if this is your first setup, or if you'd like to redo the previous setup.",
+ icon: ,
+ label: 'First Setup',
+ value: 'FirstSetup',
+ },
+ {
+ description: 'Choose this option if you would like to add a tenant to your environment.',
+ icon: ,
+ label: 'Add a tenant',
+ value: 'AddTenant',
+ },
+ {
+ description:
+ 'Choose this option if you want to setup which application registration is used to connect to your tenants.',
+ icon: ,
+ label: 'Create a new application registration for me and connect to my tenants',
+ value: 'CreateApp',
+ },
+ {
+ description: "I would like to refresh my token or replace the account I've used.",
+ icon: ,
+ label: 'Refresh Tokens for existing application registration',
+ value: 'UpdateTokens',
+ },
+ {
+ description:
+ 'I have an existing application and would like to manually enter my token, or update them. This is only recommended for advanced users.',
+ icon: ,
+ label: 'Manually enter credentials',
+ value: 'Manual',
+ },
+ ]
+
+ const hasDeepLinkedOption =
+ typeof deepLinkedOption === 'string' &&
+ setupOptions.some((option) => option.value === deepLinkedOption)
+
+ const steps = [
+ {
+ description: 'Onboarding',
+ component: CippWizardOptionsList,
+ hideStepWhen: () => hasDeepLinkedOption,
+ componentProps: {
+ title: 'Select your setup method',
+ subtext:
+ 'This wizard will guide you through setting up CIPPs access to your client tenants. If this is your first time setting up CIPP you will want to choose the option "Create application for me and connect to my tenants".',
+ valuesKey: 'SyncTool',
+ options: setupOptions,
+ },
+ },
+ {
+ description: 'Application',
+ component: CippSAMDeploy,
+ showStepWhen: (values) =>
+ values?.selectedOption === 'CreateApp' || values?.selectedOption === 'FirstSetup',
+ },
+ {
+ description: 'Tenants',
+ component: CippTenantModeDeploy,
+ showStepWhen: (values) =>
+ values?.selectedOption === 'CreateApp' || values?.selectedOption === 'FirstSetup',
+ },
+ {
+ description: 'Tenant Type',
+ component: CippAddTenantTypeSelection,
+ showStepWhen: (values) => values?.selectedOption === 'AddTenant',
+ },
+ {
+ description: 'Direct Tenant',
+ component: CippDirectTenantDeploy,
+ showStepWhen: (values) =>
+ values?.selectedOption === 'AddTenant' && values?.tenantType === 'Direct',
+ },
+ {
+ description: 'GDAP Setup',
+ component: CippGDAPTenantSetup,
+ showStepWhen: (values) =>
+ values?.selectedOption === 'AddTenant' && values?.tenantType === 'GDAP',
+ },
+ {
+ description: 'GDAP Onboarding',
+ component: CippGDAPTenantOnboarding,
+ showStepWhen: (values) =>
+ values?.selectedOption === 'AddTenant' &&
+ values?.tenantType === 'GDAP' &&
+ values?.GDAPInviteAccepted === true,
+ },
+ {
+ description: 'Baselines',
+ component: CippBaselinesStep,
+ showStepWhen: (values) => values?.selectedOption === 'FirstSetup',
+ },
+ {
+ description: 'Notifications',
+ component: CippNotificationsStep,
+ showStepWhen: (values) => values?.selectedOption === 'FirstSetup',
+ },
+ {
+ description: 'Next Steps',
+ component: CippAlertsStep,
+ showStepWhen: (values) => values?.selectedOption === 'FirstSetup',
+ },
+ {
+ description: 'Refresh Tokens',
+ component: CippDeploymentStep,
+ showStepWhen: (values) => values?.selectedOption === 'UpdateTokens',
+ },
+ {
+ description: 'Manually enter credentials',
+ component: CippDeploymentStep,
+ showStepWhen: (values) => values?.selectedOption === 'Manual',
+ },
+ {
+ description: 'Confirmation',
+ component: CippWizardConfirmation,
+ },
+ ]
+
+ return (
+
+ )
+}
+
+export default OnboardingWizardPage
diff --git a/src/layouts/index.js b/src/layouts/index.js
index b3ef2244cd1f..b741d5bd0ea4 100644
--- a/src/layouts/index.js
+++ b/src/layouts/index.js
@@ -1,133 +1,140 @@
-import { useCallback, useEffect, useState, useRef } from "react";
-import { usePathname } from "next/navigation";
+import { useCallback, useEffect, useState, useRef } from 'react'
+import { usePathname } from 'next/navigation'
+import dynamic from 'next/dynamic'
import {
Alert,
+ Box,
Button,
+ Container,
Dialog,
Divider,
DialogContent,
DialogTitle,
+ Stack,
useMediaQuery,
-} from "@mui/material";
-import { Stack } from "@mui/system";
-import { styled } from "@mui/material/styles";
-import { useSettings } from "../hooks/use-settings";
-import { Footer } from "./footer";
-import { MobileNav } from "./mobile-nav";
-import { SideNav } from "./side-nav";
-import { TopNav } from "./top-nav";
-import { ApiGetCall } from "../api/ApiCall";
-import { useDispatch } from "react-redux";
-import { showToast } from "../store/toasts";
-import { Box, Container, Grid } from "@mui/system";
-import { CippImageCard } from "../components/CippCards/CippImageCard";
-import Page from "../pages/onboardingv2";
-import { useDialog } from "../hooks/use-dialog";
-import { nativeMenuItems } from "./config";
-import { CippBreadcrumbNav } from "../components/CippComponents/CippBreadcrumbNav";
-
-const SIDE_NAV_WIDTH = 270;
-const SIDE_NAV_PINNED_WIDTH = 50;
-const TOP_NAV_HEIGHT = 50;
+} from '@mui/material'
+import { styled } from '@mui/material/styles'
+import { useSettings } from '../hooks/use-settings'
+import { Footer } from './footer'
+import { MobileNav } from './mobile-nav'
+import { SideNav } from './side-nav'
+import { TopNav } from './top-nav'
+import { ApiGetCall } from '../api/ApiCall'
+import { useDispatch } from 'react-redux'
+import { showToast } from '../store/toasts'
+import Grid from '@mui/system/Grid'
+import { CippImageCard } from '../components/CippCards/CippImageCard'
+import { useDialog } from '../hooks/use-dialog'
+import { nativeMenuItems } from './config'
+import { CippBreadcrumbNav } from '../components/CippComponents/CippBreadcrumbNav'
+
+const OnboardingWizardPage = dynamic(
+ () => import('../components/CippWizard/OnboardingWizardPage.jsx'),
+ { ssr: false }
+)
+
+const SIDE_NAV_WIDTH = 270
+const SIDE_NAV_PINNED_WIDTH = 50
+const TOP_NAV_HEIGHT = 50
const useMobileNav = () => {
- const pathname = usePathname();
- const [open, setOpen] = useState(false);
+ const pathname = usePathname()
+ const [open, setOpen] = useState(false)
const handlePathnameChange = useCallback(() => {
if (open) {
- setOpen(false);
+ setOpen(false)
}
- }, [open]);
+ }, [open])
useEffect(() => {
- handlePathnameChange();
- }, [pathname]);
+ handlePathnameChange()
+ }, [pathname])
const handleOpen = useCallback(() => {
- setOpen(true);
- }, []);
+ setOpen(true)
+ }, [])
const handleClose = useCallback(() => {
- setOpen(false);
- }, []);
+ setOpen(false)
+ }, [])
return {
handleClose,
handleOpen,
open,
- };
-};
+ }
+}
-const LayoutRoot = styled("div")(({ theme }) => ({
+const LayoutRoot = styled('div')(({ theme }) => ({
backgroundColor: theme.palette.background.default,
- display: "flex",
- flex: "1 1 auto",
- maxWidth: "100%",
- height: "100vh",
- overflow: "hidden",
+ display: 'flex',
+ flex: '1 1 auto',
+ maxWidth: '100%',
+ height: '100vh',
+ overflow: 'hidden',
paddingTop: TOP_NAV_HEIGHT,
- [theme.breakpoints.up("lg")]: {
+ [theme.breakpoints.up('lg')]: {
paddingLeft: SIDE_NAV_WIDTH,
},
-}));
+}))
-const LayoutContainer = styled("div")({
- display: "flex",
- flex: "1 1 auto",
- flexDirection: "column",
- width: "100%",
- overflowY: "auto",
- overscrollBehavior: "contain",
-});
+const LayoutContainer = styled('div')({
+ display: 'flex',
+ flex: '1 1 auto',
+ flexDirection: 'column',
+ width: '100%',
+ overflowY: 'auto',
+ overscrollBehavior: 'contain',
+})
export const Layout = (props) => {
- const { children, allTenantsSupport = true } = props;
- const mdDown = useMediaQuery((theme) => theme.breakpoints.down("md"));
- const settings = useSettings();
- const mobileNav = useMobileNav();
- const [fetchingVisible, setFetchingVisible] = useState([]);
- const [menuItems, setMenuItems] = useState(nativeMenuItems);
- const lastUserSettingsUpdate = useRef(null);
- const currentTenant = settings?.currentTenant;
- const [hideSidebar, setHideSidebar] = useState(false);
+ const { children, allTenantsSupport = true } = props
+ const mdDown = useMediaQuery((theme) => theme.breakpoints.down('md'))
+ const settings = useSettings()
+ const mobileNav = useMobileNav()
+ const [fetchingVisible, setFetchingVisible] = useState([])
+ const [menuItems, setMenuItems] = useState(nativeMenuItems)
+ const lastUserSettingsUpdate = useRef(null)
+ const currentTenant = settings?.currentTenant
+ const [hideSidebar, setHideSidebar] = useState(false)
const swaStatus = ApiGetCall({
- url: "/.auth/me",
- queryKey: "authmeswa",
+ url: '/.auth/me',
+ queryKey: 'authmeswa',
staleTime: 120000,
refetchOnWindowFocus: true,
- });
+ })
const currentRole = ApiGetCall({
- url: "/api/me",
- queryKey: "authmecipp",
+ url: '/api/me',
+ queryKey: 'authmecipp',
waiting: !swaStatus.isSuccess || swaStatus.data?.clientPrincipal === null,
- });
+ })
const featureFlags = ApiGetCall({
- url: "/api/ListFeatureFlags",
- queryKey: "featureFlags",
+ url: '/api/ListFeatureFlags',
+ queryKey: 'featureFlags',
staleTime: 600000, // Cache for 10 minutes
- });
+ })
useEffect(() => {
if (currentRole.isSuccess && !currentRole.isFetching) {
- const userRoles = currentRole.data?.clientPrincipal?.userRoles;
- const userPermissions = currentRole.data?.permissions;
+ const userRoles = currentRole.data?.clientPrincipal?.userRoles
+ const userPermissions = currentRole.data?.permissions
if (!userRoles) {
- setMenuItems([]);
- setHideSidebar(true);
- return;
+ setMenuItems([])
+ setHideSidebar(true)
+ return
}
// Get disabled pages from feature flags - only filter if we have valid data
- let disabledPages = [];
+ let disabledPages = []
if (featureFlags.isSuccess && Array.isArray(featureFlags.data)) {
disabledPages = featureFlags.data
.filter((flag) => flag.Enabled === false || flag.enabled === false)
.flatMap((flag) => flag.Pages || flag.pages || [])
- .filter((page) => typeof page === "string");
+ .filter((page) => typeof page === 'string')
}
const filterItemsByRole = (items) => {
@@ -135,7 +142,7 @@ export const Layout = (props) => {
.map((item) => {
// Check if page is disabled by feature flag
if (item.path && disabledPages.length > 0 && disabledPages.includes(item.path)) {
- return null;
+ return null
}
// Check permission with pattern matching support
@@ -144,47 +151,47 @@ export const Layout = (props) => {
return item.permissions.some((requiredPerm) => {
// Exact match
if (userPerm === requiredPerm) {
- return true;
+ return true
}
// Pattern matching - check if required permission contains wildcards
- if (requiredPerm.includes("*")) {
+ if (requiredPerm.includes('*')) {
// Convert wildcard pattern to regex
const regexPattern = requiredPerm
- .replace(/\./g, "\\.") // Escape dots
- .replace(/\*/g, ".*"); // Convert * to .*
- const regex = new RegExp(`^${regexPattern}$`);
- return regex.test(userPerm);
+ .replace(/\./g, '\\.') // Escape dots
+ .replace(/\*/g, '.*') // Convert * to .*
+ const regex = new RegExp(`^${regexPattern}$`)
+ return regex.test(userPerm)
}
- return false;
- });
- });
+ return false
+ })
+ })
if (!hasPermission) {
- return null;
+ return null
}
} else {
- return null;
+ return null
}
// check sub-items
if (item.items && item.items.length > 0) {
- const filteredSubItems = filterItemsByRole(item.items).filter(Boolean);
- return { ...item, items: filteredSubItems };
+ const filteredSubItems = filterItemsByRole(item.items).filter(Boolean)
+ return { ...item, items: filteredSubItems }
}
- return item;
+ return item
})
- .filter(Boolean);
- };
- const filteredMenu = filterItemsByRole(nativeMenuItems);
- setMenuItems(filteredMenu);
+ .filter(Boolean)
+ }
+ const filteredMenu = filterItemsByRole(nativeMenuItems)
+ setMenuItems(filteredMenu)
} else if (
swaStatus.isLoading ||
swaStatus.data?.clientPrincipal === null ||
swaStatus.data === undefined ||
currentRole.isLoading
) {
- setHideSidebar(true);
+ setHideSidebar(true)
}
}, [
currentRole.isSuccess,
@@ -195,47 +202,47 @@ export const Layout = (props) => {
currentRole.isFetching,
featureFlags.isSuccess,
featureFlags.data,
- ]);
+ ])
const handleNavPin = useCallback(() => {
settings.handleUpdate({
pinNav: !settings.pinNav,
- });
- }, [settings]);
+ })
+ }, [settings])
- const offset = settings.pinNav ? SIDE_NAV_WIDTH : SIDE_NAV_PINNED_WIDTH;
+ const offset = settings.pinNav ? SIDE_NAV_WIDTH : SIDE_NAV_PINNED_WIDTH
const userSettingsAPI = ApiGetCall({
- url: "/api/ListUserSettings",
- queryKey: "userSettings",
- });
+ url: '/api/ListUserSettings',
+ queryKey: 'userSettings',
+ })
useEffect(() => {
if (userSettingsAPI.isSuccess && !userSettingsAPI.isFetching) {
// Only update if the data has actually changed (using dataUpdatedAt as a proxy)
- const dataUpdatedAt = userSettingsAPI.dataUpdatedAt;
+ const dataUpdatedAt = userSettingsAPI.dataUpdatedAt
if (dataUpdatedAt && dataUpdatedAt !== lastUserSettingsUpdate.current) {
- const { bookmarks: _bookmarks, ...serverSettings } = userSettingsAPI.data || {};
+ const { bookmarks: _bookmarks, ...serverSettings } = userSettingsAPI.data || {}
//if userSettingsAPI.data contains offboardingDefaults.user, delete that specific key.
if (serverSettings.offboardingDefaults?.user) {
- delete serverSettings.offboardingDefaults.user;
+ delete serverSettings.offboardingDefaults.user
}
if (serverSettings.offboardingDefaults?.keepCopy) {
- delete serverSettings.offboardingDefaults.keepCopy;
+ delete serverSettings.offboardingDefaults.keepCopy
}
if (serverSettings?.currentTheme) {
- delete serverSettings.currentTheme;
+ delete serverSettings.currentTheme
}
// get current devtools settings (device-local only)
- var showDevtools = settings.showDevtools;
+ var showDevtools = settings.showDevtools
settings.handleUpdate({
...serverSettings,
showDevtools,
- });
+ })
// Track this update and set completion status
- lastUserSettingsUpdate.current = dataUpdatedAt;
+ lastUserSettingsUpdate.current = dataUpdatedAt
}
}
}, [
@@ -243,37 +250,37 @@ export const Layout = (props) => {
userSettingsAPI.data,
userSettingsAPI.isFetching,
userSettingsAPI.dataUpdatedAt,
- ]);
+ ])
const version = ApiGetCall({
- url: "/version.json",
- queryKey: "LocalVersion",
- });
+ url: '/version.json',
+ queryKey: 'LocalVersion',
+ })
const alertsAPI = ApiGetCall({
url: `/api/GetCippAlerts?localversion=${version?.data?.version}`,
- queryKey: "alertsDashboard",
+ queryKey: 'alertsDashboard',
waiting: false,
refetchOnMount: false,
refetchOnReconnect: false,
keepPreviousData: true,
- });
+ })
useEffect(() => {
if (!hideSidebar && version.isFetched && !alertsAPI.isFetched) {
- alertsAPI.waiting = true;
- alertsAPI.refetch();
+ alertsAPI.waiting = true
+ alertsAPI.refetch()
}
- }, [version, alertsAPI, hideSidebar]);
+ }, [version, alertsAPI, hideSidebar])
useEffect(() => {
if (alertsAPI.isSuccess && !alertsAPI.isFetching) {
- setFetchingVisible(new Array(alertsAPI.data.length).fill(true));
+ setFetchingVisible(new Array(alertsAPI.data.length).fill(true))
}
- }, [alertsAPI.isSuccess, alertsAPI.data, alertsAPI.isFetching]);
- const [setupCompleted, setSetupCompleted] = useState(true);
- const createDialog = useDialog();
- const dispatch = useDispatch();
+ }, [alertsAPI.isSuccess, alertsAPI.data, alertsAPI.isFetching])
+ const [setupCompleted, setSetupCompleted] = useState(true)
+ const createDialog = useDialog()
+ const dispatch = useDispatch()
useEffect(() => {
if (alertsAPI.isSuccess && !alertsAPI.isFetching) {
if (alertsAPI.data.length > 0) {
@@ -283,20 +290,20 @@ export const Layout = (props) => {
message: alert.Alert,
title: alert.title,
toastError: alert,
- }),
- );
- });
+ })
+ )
+ })
}
}
if (alertsAPI.isSuccess && !alertsAPI.isFetching) {
if (alertsAPI.data.length > 0) {
- const setupCompleted = alertsAPI.data.find((alert) => alert.setupCompleted === false);
+ const setupCompleted = alertsAPI.data.find((alert) => alert.setupCompleted === false)
if (setupCompleted) {
- setSetupCompleted(false);
+ setSetupCompleted(false)
}
}
}
- }, [alertsAPI.isSuccess]);
+ }, [alertsAPI.isSuccess])
return (
<>
@@ -312,7 +319,7 @@ export const Layout = (props) => {
@@ -325,7 +332,7 @@ export const Layout = (props) => {
>
Setup Wizard
-
+
{!setupCompleted && (
@@ -338,7 +345,7 @@ export const Layout = (props) => {
)}
- {(currentTenant === "AllTenants" || !currentTenant) && !allTenantsSupport ? (
+ {(currentTenant === 'AllTenants' || !currentTenant) && !allTenantsSupport ? (
@@ -348,7 +355,7 @@ export const Layout = (props) => {
title="Not supported"
imageUrl="/assets/illustrations/undraw_website_ij0l.svg"
text={
- "The page does not support all Tenants, please select a different tenant using the tenant selector."
+ 'The page does not support all Tenants, please select a different tenant using the tenant selector.'
}
/>
@@ -368,5 +375,5 @@ export const Layout = (props) => {
>
- );
-};
+ )
+}
diff --git a/src/pages/_app.js b/src/pages/_app.js
index 96a49eb32d99..f924bd5f626e 100644
--- a/src/pages/_app.js
+++ b/src/pages/_app.js
@@ -53,7 +53,6 @@ import {
ClearAll as ClearAllIcon,
} from '@mui/icons-material'
import { SvgIcon } from '@mui/material'
-import discordIcon from '../../public/discord-mark-blue.svg'
import React, { useEffect, useState, useRef } from 'react'
import { usePathname } from 'next/navigation'
import { useRouter } from 'next/router'
@@ -69,6 +68,7 @@ TimeAgo.addDefaultLocale(en)
const queryClient = new QueryClient()
const clientSideEmotionCache = createEmotionCache()
+
const App = (props) => {
const { Component, emotionCache = clientSideEmotionCache, pageProps } = props
const getLayout = Component.getLayout ?? ((page) => page)
@@ -226,13 +226,7 @@ const App = (props) => {
},
{
id: 'discord',
- icon: (
-
- ),
+ icon:
,
name: 'Join the Discord!',
href: 'https://discord.gg/cyberdrain',
onClick: () => window.open('https://discord.gg/cyberdrain', '_blank'),
diff --git a/src/pages/onboardingv2.js b/src/pages/onboardingv2.js
index 3046798627ac..c32d85a24b8c 100644
--- a/src/pages/onboardingv2.js
+++ b/src/pages/onboardingv2.js
@@ -1,160 +1,8 @@
-import { Layout as DashboardLayout } from "../layouts/index.js";
-import { CippWizardConfirmation } from "../components/CippWizard/CippWizardConfirmation.jsx";
-import { CippDeploymentStep } from "../components/CippWizard/CIPPDeploymentStep.jsx";
-import CippWizardPage from "../components/CippWizard/CippWizardPage.jsx";
-import { CippWizardOptionsList } from "../components/CippWizard/CippWizardOptionsList.jsx";
-import { CippSAMDeploy } from "../components/CippWizard/CippSAMDeploy.jsx";
-import { CippTenantModeDeploy } from "../components/CippWizard/CippTenantModeDeploy.jsx";
-import { CippBaselinesStep } from "../components/CippWizard/CippBaselinesStep.jsx";
-import { CippNotificationsStep } from "../components/CippWizard/CippNotificationsStep.jsx";
-import { CippAlertsStep } from "../components/CippWizard/CippAlertsStep.jsx";
-import { CippAddTenantTypeSelection } from "../components/CippWizard/CippAddTenantTypeSelection.jsx";
-import { CippDirectTenantDeploy } from "../components/CippWizard/CippDirectTenantDeploy.jsx";
-import { CippGDAPTenantSetup } from "../components/CippWizard/CippGDAPTenantSetup.jsx";
-import { CippGDAPTenantOnboarding } from "../components/CippWizard/CippGDAPTenantOnboarding.jsx";
-import { BuildingOfficeIcon, CloudIcon, CpuChipIcon } from "@heroicons/react/24/outline";
-import { useRouter } from "next/router";
+import { Layout as DashboardLayout } from '../layouts/index.js'
+import OnboardingWizardPage from '../components/CippWizard/OnboardingWizardPage.jsx'
-const Page = () => {
- const router = useRouter();
- const selectedOptionQuery = router.query?.selectedOption;
- const deepLinkedOption = Array.isArray(selectedOptionQuery)
- ? selectedOptionQuery[0]
- : selectedOptionQuery;
- const setupOptions = [
- {
- description:
- "Choose this option if this is your first setup, or if you'd like to redo the previous setup.",
- icon: ,
- label: "First Setup",
- value: "FirstSetup",
- },
- {
- description: "Choose this option if you would like to add a tenant to your environment.",
- icon: ,
- label: "Add a tenant",
- value: "AddTenant",
- },
- {
- description:
- "Choose this option if you want to setup which application registration is used to connect to your tenants.",
- icon: ,
- label: "Create a new application registration for me and connect to my tenants",
- value: "CreateApp",
- },
- {
- description: "I would like to refresh my token or replace the account I've used.",
- icon: ,
- label: "Refresh Tokens for existing application registration",
- value: "UpdateTokens",
- },
- {
- description:
- "I have an existing application and would like to manually enter my token, or update them. This is only recommended for advanced users.",
- icon: ,
- label: "Manually enter credentials",
- value: "Manual",
- },
- ];
+const Page = () =>
- const hasDeepLinkedOption =
- typeof deepLinkedOption === "string" &&
- setupOptions.some((option) => option.value === deepLinkedOption);
+Page.getLayout = (page) => {page}
- const steps = [
- {
- description: "Onboarding",
- component: CippWizardOptionsList,
- hideStepWhen: () => hasDeepLinkedOption,
- componentProps: {
- title: "Select your setup method",
- subtext: `This wizard will guide you through setting up CIPPs access to your client tenants. If this is your first time setting up CIPP you will want to choose the option "Create application for me and connect to my tenants",`,
- valuesKey: "SyncTool",
- options: setupOptions,
- },
- },
- {
- description: "Application",
- component: CippSAMDeploy,
- showStepWhen: (values) =>
- values?.selectedOption === "CreateApp" || values?.selectedOption === "FirstSetup",
- },
- {
- description: "Tenants",
- component: CippTenantModeDeploy,
- showStepWhen: (values) =>
- values?.selectedOption === "CreateApp" || values?.selectedOption === "FirstSetup",
- },
- {
- description: "Tenant Type",
- component: CippAddTenantTypeSelection,
- showStepWhen: (values) => values?.selectedOption === "AddTenant",
- },
- {
- description: "Direct Tenant",
- component: CippDirectTenantDeploy,
- showStepWhen: (values) =>
- values?.selectedOption === "AddTenant" && values?.tenantType === "Direct",
- },
- {
- description: "GDAP Setup",
- component: CippGDAPTenantSetup,
- showStepWhen: (values) =>
- values?.selectedOption === "AddTenant" && values?.tenantType === "GDAP",
- },
- {
- description: "GDAP Onboarding",
- component: CippGDAPTenantOnboarding,
- showStepWhen: (values) =>
- values?.selectedOption === "AddTenant" &&
- values?.tenantType === "GDAP" &&
- values?.GDAPInviteAccepted === true,
- },
- {
- description: "Baselines",
- component: CippBaselinesStep,
- showStepWhen: (values) => values?.selectedOption === "FirstSetup",
- },
- {
- description: "Notifications",
- component: CippNotificationsStep,
- showStepWhen: (values) => values?.selectedOption === "FirstSetup",
- },
- {
- description: "Next Steps",
- component: CippAlertsStep,
- showStepWhen: (values) => values?.selectedOption === "FirstSetup",
- },
- {
- description: "Refresh Tokens",
- component: CippDeploymentStep,
- showStepWhen: (values) => values?.selectedOption === "UpdateTokens",
- },
- {
- description: "Manually enter credentials",
- component: CippDeploymentStep,
- showStepWhen: (values) => values?.selectedOption === "Manual",
- },
- {
- description: "Confirmation",
- component: CippWizardConfirmation,
- //confirm and finish button, perform tasks, launch checks etc.
- },
- ];
-
- return (
- <>
-
- >
- );
-};
-
-Page.getLayout = (page) => {page};
-
-export default Page;
+export default Page
From a92b206e3d66377a68cb7e0fc06b7c950506e8d7 Mon Sep 17 00:00:00 2001
From: John Martin <50556267+StoricU@users.noreply.github.com>
Date: Thu, 30 Apr 2026 09:20:05 +0200
Subject: [PATCH 089/181] fix: update CheckExtension recommendedRunInterval to
valid interval
15m is not available in the recurrenceOptions dropdown, causing
form validation to fail and the Save button to be disabled when
selecting the Check phishing extension alert.
Change to 30m which exists in the dropdown and matches similar
security alerts like NewRiskyUsers and RestrictedUsers.
---
src/data/alerts.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/data/alerts.json b/src/data/alerts.json
index 6f864fbe1699..041719bf5ca9 100644
--- a/src/data/alerts.json
+++ b/src/data/alerts.json
@@ -600,7 +600,7 @@
{
"name": "CheckExtension",
"label": "Alert on new Check phishing extension detections",
- "recommendedRunInterval": "15m",
+ "recommendedRunInterval": "30m",
"description": "Monitors for new phishing site detections reported by the Check browser extension. Alerts when a user visits a page that the extension flags as a potential credential phishing or AiTM attack. Requires the Check browser extension to be deployed to users."
}
]
From 4d09517912e6008e2ef0a4ad3e0a6ab260cc1a2d Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Thu, 30 Apr 2026 19:13:10 +0200
Subject: [PATCH 090/181] feat(mem): use tooltip-enabled policy details in
compare view
---
.../endpoint/MEM/compare-policies/index.js | 43 ++++++-------------
1 file changed, 12 insertions(+), 31 deletions(-)
diff --git a/src/pages/endpoint/MEM/compare-policies/index.js b/src/pages/endpoint/MEM/compare-policies/index.js
index da74c739462b..b634a6335839 100644
--- a/src/pages/endpoint/MEM/compare-policies/index.js
+++ b/src/pages/endpoint/MEM/compare-policies/index.js
@@ -4,7 +4,7 @@ import { ApiPostCall } from "../../../../api/ApiCall";
import { CippFormComponent } from "../../../../components/CippComponents/CippFormComponent";
import { CippFormCondition } from "../../../../components/CippComponents/CippFormCondition";
import { CippFormTenantSelector } from "../../../../components/CippComponents/CippFormTenantSelector";
-import { CippCodeBlock } from "../../../../components/CippComponents/CippCodeBlock";
+import CippJsonView from "../../../../components/CippFormPages/CippJSONView";
import {
Box,
Button,
@@ -19,16 +19,12 @@ import {
TableHead,
TableRow,
Paper,
- Accordion,
- AccordionSummary,
- AccordionDetails,
Alert,
Stack,
Chip,
Skeleton,
} from "@mui/material";
import {
- ExpandMore as ExpandMoreIcon,
CompareArrows as CompareArrowsIcon,
CheckCircle as CheckCircleIcon,
Error as ErrorIcon,
@@ -359,15 +355,6 @@ const Page = () => {
return errData?.Results || compareApi.error?.message || "An error occurred";
}, [compareApi.isError, compareApi.error]);
- const sourceAJson = useMemo(
- () => (results?.sourceAData ? JSON.stringify(results.sourceAData, null, 2) : ""),
- [results?.sourceAData],
- );
- const sourceBJson = useMemo(
- () => (results?.sourceBData ? JSON.stringify(results.sourceBData, null, 2) : ""),
- [results?.sourceBData],
- );
-
return (
@@ -457,23 +444,17 @@ const Page = () => {
)}
-
- }>
- Source A Raw JSON — {results.sourceALabel}
-
-
-
-
-
-
-
- }>
- Source B Raw JSON — {results.sourceBLabel}
-
-
-
-
-
+
+
+
)}
From 17077aa800c59b90ce4ac6e6b16ecf502c9b0e15 Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Thu, 30 Apr 2026 19:51:30 +0200
Subject: [PATCH 091/181] feat(compare): add null safety
---
src/pages/endpoint/MEM/compare-policies/index.js | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/pages/endpoint/MEM/compare-policies/index.js b/src/pages/endpoint/MEM/compare-policies/index.js
index b634a6335839..80b660e666a1 100644
--- a/src/pages/endpoint/MEM/compare-policies/index.js
+++ b/src/pages/endpoint/MEM/compare-policies/index.js
@@ -355,6 +355,11 @@ const Page = () => {
return errData?.Results || compareApi.error?.message || "An error occurred";
}, [compareApi.isError, compareApi.error]);
+ const comparisonRows = useMemo(() => {
+ if (!Array.isArray(results?.Results)) return [];
+ return results.Results.filter(Boolean);
+ }, [results?.Results]);
+
return (
@@ -405,14 +410,14 @@ const Page = () => {
>
{results.identical
? "Policies are identical - no differences found."
- : `${results.Results?.length || 0} difference${results.Results?.length === 1 ? "" : "s"} found between policies.`}
+ : `${comparisonRows.length} difference${comparisonRows.length === 1 ? "" : "s"} found between policies.`}
A: {results.sourceALabel} — B:{" "}
{results.sourceBLabel}
- {!results.identical && results.Results?.length > 0 && (
+ {!results.identical && comparisonRows.length > 0 && (
@@ -424,7 +429,7 @@ const Page = () => {
- {results.Results.map((row, index) => (
+ {comparisonRows.map((row, index) => (
({
From 1bcf7bd7a9446066f0960e76d89beb832ea16afb Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Fri, 1 May 2026 00:53:23 +0200
Subject: [PATCH 092/181] feat(intune): show administrative template policy
details
Add tenant-aware definition lookup and presentation rendering so administrative template settings can be read in detail views.
---
.../CippIntunePolicyDetails.jsx | 22 +-
src/components/CippFormPages/CippJSONView.jsx | 287 +++++++++++++++++-
src/hooks/use-admin-template-definitions.js | 82 +++++
src/utils/intune-bind-helpers.js | 14 +
4 files changed, 386 insertions(+), 19 deletions(-)
create mode 100644 src/hooks/use-admin-template-definitions.js
create mode 100644 src/utils/intune-bind-helpers.js
diff --git a/src/components/CippComponents/CippIntunePolicyDetails.jsx b/src/components/CippComponents/CippIntunePolicyDetails.jsx
index ca822e61739a..064230da3e18 100644
--- a/src/components/CippComponents/CippIntunePolicyDetails.jsx
+++ b/src/components/CippComponents/CippIntunePolicyDetails.jsx
@@ -4,37 +4,41 @@ import CippJsonView from '../CippFormPages/CippJSONView'
export const CippIntunePolicyDetails = ({ row, tenant }) => {
const isConfigurationPolicy = row?.URLName?.toLowerCase() === 'configurationpolicies'
+ const isAdministrativeTemplate = row?.URLName?.toLowerCase() === 'grouppolicyconfigurations'
+ const isSupportedPolicyType = isConfigurationPolicy || isAdministrativeTemplate
+ const urlName = isAdministrativeTemplate ? 'groupPolicyConfigurations' : 'configurationPolicies'
+ const policyTypeLabel = isAdministrativeTemplate ? 'Administrative Template' : 'Settings Catalog'
const tenantFilter = tenant === 'AllTenants' && row?.Tenant ? row.Tenant : tenant
const policyDetails = ApiGetCall({
url: '/api/ListIntunePolicy',
- queryKey: `ListIntunePolicyDetails-${tenantFilter}-${row?.id}`,
+ queryKey: `ListIntunePolicyDetails-${urlName}-${tenantFilter}-${row?.id}`,
data: {
TenantFilter: tenantFilter,
ID: row?.id,
- URLName: 'configurationPolicies',
+ URLName: urlName,
IncludeSettingDefinitions: true,
},
- waiting: Boolean(isConfigurationPolicy && tenantFilter && row?.id),
+ waiting: Boolean(isSupportedPolicyType && tenantFilter && row?.id),
retry: 1,
refetchOnWindowFocus: false,
toast: false,
})
- if (!isConfigurationPolicy) {
+ if (!isSupportedPolicyType) {
return null
}
const details = Array.isArray(policyDetails.data) ? policyDetails.data[0] : policyDetails.data
- const fallbackDetails = row?.settings ? row : null
- const settingsObject = details?.settings ? details : fallbackDetails
+ const fallbackDetails = row?.settings || row?.definitionValues ? row : null
+ const settingsObject = details?.settings || details?.definitionValues ? details : fallbackDetails
if (policyDetails.isLoading || policyDetails.isFetching) {
return (
- Loading policy settings and Microsoft descriptions...
+ Loading policy details and Microsoft descriptions...
)
@@ -43,7 +47,7 @@ export const CippIntunePolicyDetails = ({ row, tenant }) => {
if (policyDetails.isError && !settingsObject) {
return (
- Could not load live Settings Catalog details for this policy.
+ Could not load live {policyTypeLabel} details for this policy.
)
}
@@ -51,7 +55,7 @@ export const CippIntunePolicyDetails = ({ row, tenant }) => {
if (!settingsObject) {
return (
- This Settings Catalog policy did not return any settings.
+ This {policyTypeLabel} policy did not return any settings.
)
}
diff --git a/src/components/CippFormPages/CippJSONView.jsx b/src/components/CippFormPages/CippJSONView.jsx
index cc7fe72e749e..f5044792b149 100644
--- a/src/components/CippFormPages/CippJSONView.jsx
+++ b/src/components/CippFormPages/CippJSONView.jsx
@@ -24,6 +24,12 @@ import { getCippFormatting } from '../../utils/get-cipp-formatting'
import { CippCodeBlock } from '../CippComponents/CippCodeBlock'
import intuneCollection from '../../data/intuneCollection.json'
import { useGuidResolver } from '../../hooks/use-guid-resolver'
+import { useAdminTemplateDefinitions } from '../../hooks/use-admin-template-definitions'
+import {
+ definitionBindPattern,
+ presentationBindPattern,
+ extractBindGuid,
+} from '../../utils/intune-bind-helpers'
const intuneCollectionMap = new Map(
(intuneCollection || []).filter((item) => item?.id).map((item) => [item.id, item])
@@ -250,7 +256,21 @@ function CippJsonView({
// Use the GUID resolver hook
const { guidMapping, isLoadingGuids, resolveGuids, isGuid } = useGuidResolver()
const resolvedType =
- type || (object?.omaSettings || object?.settings || object?.added ? 'intune' : undefined)
+ type ||
+ (object?.omaSettings || object?.settings || object?.definitionValues || object?.added
+ ? 'intune'
+ : undefined)
+ const adminTemplateTenant =
+ object?.Tenant || object?.tenant || object?.TenantFilter || object?.tenantFilter || null
+ const {
+ definitionsMap: addedDefinitionsMap,
+ isLoadingDefinitions,
+ isDefinitionsError,
+ } = useAdminTemplateDefinitions({
+ added: object?.added,
+ manualTenant: adminTemplateTenant,
+ waiting: resolvedType === 'intune',
+ })
const renderIntuneItems = (data) => {
const items = []
@@ -292,7 +312,7 @@ function CippJsonView({
}
const renderDefinitionTooltip = (definition, optionDefinition) => {
- const description = definition?.helpText || definition?.description
+ const description = definition?.helpText || definition?.description || definition?.explainText
const optionDescription = optionDefinition?.helpText || optionDefinition?.description
const infoUrls = Array.isArray(definition?.infoUrls) ? definition.infoUrls : []
@@ -395,6 +415,185 @@ function CippJsonView({
}
}
+ const getDisplayValue = (value) => {
+ if (value === null || value === undefined || value === '') {
+ return ''
+ }
+
+ if (typeof value === 'boolean') {
+ return value ? 'Yes' : 'No'
+ }
+
+ if (typeof value === 'string' || typeof value === 'number') {
+ return value
+ }
+
+ try {
+ return JSON.stringify(value)
+ } catch {
+ return String(value)
+ }
+ }
+
+ const getAdministrativeTemplatePresentationValue = (presentationValue) => {
+ if (!presentationValue || typeof presentationValue !== 'object') {
+ return 'Not configured'
+ }
+
+ if (Object.prototype.hasOwnProperty.call(presentationValue, 'value')) {
+ const displayValue = getDisplayValue(presentationValue.value)
+ if (displayValue !== '') {
+ return displayValue
+ }
+ }
+
+ if (Array.isArray(presentationValue.values)) {
+ const values = presentationValue.values
+ .map((entry) => {
+ if (entry && typeof entry === 'object') {
+ const entryLabel =
+ entry.name ||
+ entry.key ||
+ entry.displayName ||
+ entry.id ||
+ entry.PresentationDefinitionLabel ||
+ ''
+ const entryValue = getDisplayValue(
+ entry.value ?? entry.text ?? entry.Value ?? entry.StringValue ?? entry
+ )
+
+ if (entryLabel && entryValue !== '') {
+ return `${entryLabel}: ${entryValue}`
+ }
+
+ return entryValue
+ }
+
+ return getDisplayValue(entry)
+ })
+ .filter((entry) => entry !== null && entry !== undefined && entry !== '')
+
+ if (values.length > 0) {
+ return values.join(', ')
+ }
+ }
+
+ return 'Not configured'
+ }
+
+ const getStatusText = (enabled) =>
+ enabled === true ? 'Enabled' : enabled === false ? 'Disabled' : 'Configured'
+
+ const addAdministrativeTemplateValue = (
+ value,
+ index,
+ { definition, definitionId, label, keyPrefix, presentationKeyInfix, resolvePresentationLabel }
+ ) => {
+ if (!value || typeof value !== 'object') {
+ return
+ }
+
+ const categoryPath = definition?.categoryPath
+ const presentationValues = Array.isArray(value.presentationValues)
+ ? value.presentationValues
+ : []
+ const itemKey = value.id || definitionId || index
+
+ items.push(
+
+
+ {getStatusText(value.enabled)}
+
+ {categoryPath && (
+
+ {categoryPath}
+
+ )}
+ {!definition && definitionId && (
+
+ Definition ID: {definitionId}
+
+ )}
+ {presentationValues.map((presentationValue, presentationIndex) => {
+ const presentationLabel = resolvePresentationLabel(
+ definition,
+ presentationValue,
+ presentationIndex
+ )
+ const presentationDisplayValue = getAdministrativeTemplatePresentationValue(
+ presentationValue
+ )
+
+ return (
+
+
+ {presentationLabel}:
+ {' '}
+ {renderSettingValue(presentationDisplayValue)}
+
+ )
+ })}
+
+ }
+ />
+ )
+ }
+
+ const getPresentationTypeLabel = (odataType) => {
+ switch (odataType) {
+ case '#microsoft.graph.groupPolicyPresentationValueBoolean':
+ return 'Boolean value'
+ case '#microsoft.graph.groupPolicyPresentationValueDecimal':
+ case '#microsoft.graph.groupPolicyPresentationValueLongDecimal':
+ return 'Numeric value'
+ case '#microsoft.graph.groupPolicyPresentationValueMultiText':
+ return 'Text list'
+ case '#microsoft.graph.groupPolicyPresentationValueList':
+ return 'List value'
+ case '#microsoft.graph.groupPolicyPresentationValueText':
+ return 'Text value'
+ default:
+ return 'Value'
+ }
+ }
+
+ const getAddedPresentationLabel = (definition, presentationValue) => {
+ const presentationId = extractBindGuid(
+ presentationValue?.['presentation@odata.bind'],
+ presentationBindPattern
+ )
+
+ if (presentationId && Array.isArray(definition?.presentations)) {
+ const resolvedPresentation = definition.presentations.find(
+ (presentation) => String(presentation?.id || '').toLowerCase() === presentationId
+ )
+
+ if (resolvedPresentation) {
+ return (
+ resolvedPresentation.label ||
+ resolvedPresentation.displayName ||
+ resolvedPresentation.id ||
+ getPresentationTypeLabel(presentationValue?.['@odata.type'])
+ )
+ }
+ }
+
+ return getPresentationTypeLabel(presentationValue?.['@odata.type'])
+ }
+
+ const resolveLivePresentationLabel = (_definition, presentationValue, presentationIndex) =>
+ presentationValue?.presentation?.label ||
+ presentationValue?.presentation?.displayName ||
+ presentationValue?.presentation?.id ||
+ `Value ${presentationIndex + 1}`
+
const addSettingInstance = (settingInstance, setting, keyPrefix) => {
if (!settingInstance) {
return
@@ -498,14 +697,82 @@ function CippJsonView({
data.settings.forEach((setting, index) => {
addSettingInstance(setting.settingInstance, setting, `setting-${index}`)
})
- } else if (data.added) {
- items.push(
-
- )
+ } else if (Array.isArray(data.definitionValues)) {
+ if (data.definitionValues.length === 0) {
+ items.push(
+
+ )
+ }
+
+ data.definitionValues.forEach((definitionValue, index) => {
+ const definition = definitionValue?.definition
+ addAdministrativeTemplateValue(definitionValue, index, {
+ definition,
+ definitionId: null,
+ label: definition?.displayName || definition?.id || definitionValue?.id || 'Setting',
+ keyPrefix: 'definitionValue',
+ presentationKeyInfix: 'presentation',
+ resolvePresentationLabel: resolveLivePresentationLabel,
+ })
+ })
+ } else if (Array.isArray(data.added)) {
+ const hasResolvedDefinitions = Object.keys(addedDefinitionsMap).length > 0
+
+ if (isLoadingDefinitions && !hasResolvedDefinitions) {
+ items.push(
+
+
+ Resolving administrative template settings...
+
+ }
+ />
+ )
+ return items
+ }
+
+ if (data.added.length === 0) {
+ items.push(
+
+ )
+ }
+
+ if (isDefinitionsError && !hasResolvedDefinitions) {
+ items.push(
+
+ )
+ }
+
+ data.added.forEach((addedValue, index) => {
+ const definitionId = extractBindGuid(
+ addedValue?.['definition@odata.bind'],
+ definitionBindPattern
+ )
+ const definition = definitionId ? addedDefinitionsMap[definitionId] : null
+ addAdministrativeTemplateValue(addedValue, index, {
+ definition,
+ definitionId,
+ label: definition?.displayName || definitionId || `Setting ${index + 1}`,
+ keyPrefix: 'addedDefinition',
+ presentationKeyInfix: 'added-presentation',
+ resolvePresentationLabel: getAddedPresentationLabel,
+ })
+ })
} else {
Object.entries(data).forEach(([key, value]) => {
// Check if value is a GUID that we've resolved
diff --git a/src/hooks/use-admin-template-definitions.js b/src/hooks/use-admin-template-definitions.js
new file mode 100644
index 000000000000..8b129daeae27
--- /dev/null
+++ b/src/hooks/use-admin-template-definitions.js
@@ -0,0 +1,82 @@
+// Resolves groupPolicyDefinitions metadata per-tenant. Can't be a static JSON:
+// tenants can import custom ADMX files, so the available definitions are
+// tenant-specific.
+import { useMemo } from 'react'
+import { ApiGetCall } from '../api/ApiCall'
+import { useSettings } from './use-settings'
+import { definitionBindPattern, extractBindGuid } from '../utils/intune-bind-helpers'
+
+export const useAdminTemplateDefinitions = ({ added = [], manualTenant = null, waiting = true } = {}) => {
+ const tenantFilter = useSettings().currentTenant
+ const activeTenant = manualTenant || tenantFilter
+
+ const definitionIds = useMemo(() => {
+ if (!Array.isArray(added)) {
+ return []
+ }
+
+ const ids = new Set()
+ added.forEach((item) => {
+ const definitionId = extractBindGuid(item?.['definition@odata.bind'], definitionBindPattern)
+ if (definitionId) {
+ ids.add(definitionId)
+ }
+ })
+
+ return Array.from(ids).sort()
+ }, [added])
+
+ const canResolveDefinitions =
+ waiting && Boolean(activeTenant) && activeTenant !== 'AllTenants' && definitionIds.length > 0
+
+ const definitionsRequest = ApiGetCall({
+ url: '/api/ListIntunePolicy',
+ queryKey: `AdminTemplateDefinitions-${activeTenant}-${definitionIds.join(',') || 'none'}`,
+ data: {
+ TenantFilter: activeTenant,
+ URLName: 'GroupPolicyDefinitions',
+ DefinitionIds: definitionIds.join(','),
+ },
+ waiting: canResolveDefinitions,
+ retry: 1,
+ refetchOnWindowFocus: false,
+ refetchOnMount: false,
+ toast: false,
+ staleTime: 15 * 60 * 1000,
+ })
+
+ const definitions = useMemo(() => {
+ if (Array.isArray(definitionsRequest.data)) {
+ return definitionsRequest.data
+ }
+
+ if (Array.isArray(definitionsRequest.data?.Results)) {
+ return definitionsRequest.data.Results
+ }
+
+ if (Array.isArray(definitionsRequest.data?.value)) {
+ return definitionsRequest.data.value
+ }
+
+ return []
+ }, [definitionsRequest.data])
+
+ const definitionsMap = useMemo(() => {
+ const mapping = {}
+
+ definitions.forEach((definition) => {
+ if (definition?.id) {
+ mapping[String(definition.id).toLowerCase()] = definition
+ }
+ })
+
+ return mapping
+ }, [definitions])
+
+ return {
+ definitionsMap,
+ isLoadingDefinitions:
+ canResolveDefinitions && (definitionsRequest.isLoading || definitionsRequest.isFetching),
+ isDefinitionsError: canResolveDefinitions && definitionsRequest.isError,
+ }
+}
diff --git a/src/utils/intune-bind-helpers.js b/src/utils/intune-bind-helpers.js
new file mode 100644
index 000000000000..6ff61ff0d5bf
--- /dev/null
+++ b/src/utils/intune-bind-helpers.js
@@ -0,0 +1,14 @@
+// Parsers for Intune Admin Template @odata.bind refs (e.g. `groupPolicyDefinitions('GUID')`).
+// Shared so the hook and CippJSONView renderer can't drift.
+
+export const definitionBindPattern = /groupPolicyDefinitions\('([0-9a-f-]{36})'\)/i
+export const presentationBindPattern = /presentations\('([0-9a-f-]{36})'\)/i
+
+export const extractBindGuid = (value, pattern) => {
+ if (typeof value !== 'string') {
+ return null
+ }
+
+ const match = value.match(pattern)
+ return match?.[1]?.toLowerCase() || null
+}
From 57b8f2bdfe0ff8fb4131f73035bce5283405b471 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Fri, 1 May 2026 17:24:13 +0800
Subject: [PATCH 093/181] Add ResultMode, GitHub import & cache explorer
Multiple UI and behavior updates across custom tests:
- CippApiResults: simplify results selection by filtering errorsOnly before mapping.
- CippTestDetailOffCanvas: export markdownStyles and prefer explicit row.ResultMarkdown when deciding how to render custom script output.
- pages/tools/custom-tests/add.jsx: add ResultMode form field, options, and persistence; reset test results on run; add many UX tweaks and explanatory copy; add multiple example PowerShell scripts with CippCodeBlock examples; add a cache explorer to view sample cached data per tenant (collapse + API call + loading states); render CIPPResultMarkdown using ReactMarkdown with markdownStyles and show CIPPStatus as a Chip.
- pages/tools/custom-tests/index.jsx: add GitHub import dialog (repo/branch selection, file tree, import action), Save to GitHub action in table row actions, and related API calls/queries.
These changes improve result rendering flexibility, make it easier to preview sample cache data, provide example scripts, and enable importing/exporting custom tests to/from GitHub.
---
.../CippComponents/CippApiResults.jsx | 32 +-
.../CippTestDetailOffCanvas.jsx | 8 +-
src/pages/tools/custom-tests/add.jsx | 623 +++++++++++++++---
src/pages/tools/custom-tests/index.jsx | 251 ++++++-
4 files changed, 797 insertions(+), 117 deletions(-)
diff --git a/src/components/CippComponents/CippApiResults.jsx b/src/components/CippComponents/CippApiResults.jsx
index 1c4ca364c362..12a0ec4be593 100644
--- a/src/components/CippComponents/CippApiResults.jsx
+++ b/src/components/CippComponents/CippApiResults.jsx
@@ -188,21 +188,23 @@ export const CippApiResults = (props) => {
} else {
setFetchingVisible(false);
}
- if (!errorsOnly) {
- if (allResults.length > 0) {
- setFinalResults(
- allResults.map((res, index) => ({
- id: index,
- text: res.text,
- copyField: res.copyField,
- severity: res.severity,
- visible: true,
- ...res,
- })),
- );
- } else {
- setFinalResults([]);
- }
+ const resultsToShow = errorsOnly
+ ? allResults.filter((r) => r.severity === "error")
+ : allResults;
+
+ if (resultsToShow.length > 0) {
+ setFinalResults(
+ resultsToShow.map((res, index) => ({
+ id: index,
+ text: res.text,
+ copyField: res.copyField,
+ severity: res.severity,
+ visible: true,
+ ...res,
+ })),
+ );
+ } else {
+ setFinalResults([]);
}
}, [
apiObject.isError,
diff --git a/src/components/CippTestDetail/CippTestDetailOffCanvas.jsx b/src/components/CippTestDetail/CippTestDetailOffCanvas.jsx
index 290387d2bb75..64abc9b224e4 100644
--- a/src/components/CippTestDetail/CippTestDetailOffCanvas.jsx
+++ b/src/components/CippTestDetail/CippTestDetailOffCanvas.jsx
@@ -67,7 +67,7 @@ const checkCIPPStandardAvailable = (testName) => {
};
// Shared markdown styling for consistent rendering
-const markdownStyles = {
+export const markdownStyles = {
"& a": {
color: (theme) => theme.palette.primary.main,
textDecoration: "underline",
@@ -135,11 +135,11 @@ export const CippTestDetailOffCanvas = ({ row }) => {
}
const computedCustomMarkdown =
- hasRawCustomData && parsedCustomResult !== null
+ hasRawCustomData && parsedCustomResult !== null && !row.ResultMarkdown
? renderCustomScriptMarkdownTemplate(parsedCustomResult, row.MarkdownTemplate || "")
: null;
- const shouldRenderCustomJson = hasRawCustomData && row.ReturnType === "JSON";
- const shouldRenderCustomMarkdown = hasRawCustomData && !shouldRenderCustomJson;
+ const shouldRenderCustomJson = hasRawCustomData && row.ReturnType === "JSON" && !row.ResultMarkdown;
+ const shouldRenderCustomMarkdown = hasRawCustomData && !shouldRenderCustomJson && !row.ResultMarkdown;
return (
diff --git a/src/pages/tools/custom-tests/add.jsx b/src/pages/tools/custom-tests/add.jsx
index df7fe5f1cd50..59ad7bba9daf 100644
--- a/src/pages/tools/custom-tests/add.jsx
+++ b/src/pages/tools/custom-tests/add.jsx
@@ -7,6 +7,8 @@ import {
Typography,
Box,
Button,
+ Chip,
+ Collapse,
Dialog,
DialogTitle,
DialogContent,
@@ -16,6 +18,8 @@ import {
AccordionDetails,
CircularProgress,
Divider,
+ IconButton,
+ Tooltip,
} from '@mui/material'
import { useEffect, useMemo, useRef, useState } from 'react'
import { Stack, Grid } from '@mui/system'
@@ -23,11 +27,10 @@ import ReactMarkdown from 'react-markdown'
import remarkGfm from 'remark-gfm'
import {
ExpandMore,
- CheckCircleOutline,
- ErrorOutline,
NotificationsActive,
Code,
TableChart,
+ Visibility,
} from '@mui/icons-material'
import cacheTypes from '../../../data/CIPPDBCacheTypes.json'
import { renderCustomScriptMarkdownTemplate } from '../../../utils/customScriptTemplate'
@@ -36,6 +39,7 @@ import CippFormPage from '../../../components/CippFormPages/CippFormPage'
import CippFormComponent from '../../../components/CippComponents/CippFormComponent'
import { CippApiResults } from '../../../components/CippComponents/CippApiResults'
import { CippCodeBlock } from '../../../components/CippComponents/CippCodeBlock'
+import { markdownStyles } from '../../../components/CippTestDetail/CippTestDetailOffCanvas'
const Page = () => {
const getValueType = (value) => {
@@ -89,6 +93,7 @@ const Page = () => {
const { ScriptGuid } = router.query
const isEdit = !!ScriptGuid
const [cacheTypesDialogOpen, setCacheTypesDialogOpen] = useState(false)
+ const [expandedCacheType, setExpandedCacheType] = useState(null)
const [testResults, setTestResults] = useState(null)
const [guidanceExpanded, setGuidanceExpanded] = useState(true)
const [configExpanded, setConfigExpanded] = useState(true)
@@ -112,6 +117,7 @@ const Page = () => {
Enabled: false,
AlertOnFailure: false,
ReturnType: 'JSON',
+ ResultMode: { value: 'Auto', label: 'Auto' },
MarkdownTemplate: '',
Description: '',
Category: { value: 'General', label: 'General' },
@@ -140,6 +146,7 @@ const Page = () => {
Enabled: script.Enabled || false,
AlertOnFailure: script.AlertOnFailure || false,
ReturnType: script.ReturnType || 'JSON',
+ ResultMode: toSelectOption(script.ResultMode, 'Auto'),
MarkdownTemplate: script.MarkdownTemplate || '',
ResultSchema: script.ResultSchema || '',
Category: toSelectOption(script.Category, 'General'),
@@ -160,6 +167,18 @@ const Page = () => {
setTesterExpanded(true)
}, [isEdit])
+ const cacheExplorerTenant = router.query.tenantFilter || settings?.currentTenant
+ const cacheExplorerApi = ApiGetCall({
+ url: '/api/ListDBCache',
+ data: { tenantFilter: cacheExplorerTenant, type: expandedCacheType },
+ queryKey: `CacheExplorer-${cacheExplorerTenant}-${expandedCacheType}`,
+ waiting: !!expandedCacheType && !!cacheExplorerTenant,
+ })
+
+ const handleExploreCache = (cacheType) => {
+ setExpandedCacheType(expandedCacheType === cacheType ? null : cacheType)
+ }
+
const testScriptApi = ApiPostCall({
urlFromData: true,
onResult: (result) => {
@@ -178,6 +197,8 @@ const Page = () => {
return
}
+ setTestResults(null)
+
let parsedParams = {}
const rawParams = formControl.getValues('TestParameters')
@@ -223,6 +244,7 @@ const Page = () => {
Enabled: data.Enabled,
AlertOnFailure: data.AlertOnFailure,
ReturnType: data.ReturnType,
+ ResultMode: data.ResultMode?.value ?? data.ResultMode,
MarkdownTemplate: data.MarkdownTemplate,
ResultSchema: data.ResultSchema,
Description: data.Description,
@@ -275,6 +297,12 @@ const Page = () => {
{ value: 'Markdown', label: 'Markdown' },
]
+ const resultModeOptions = [
+ { value: 'Auto', label: 'Auto' },
+ { value: 'AlwaysPass', label: 'Always Pass' },
+ { value: 'AlwaysInfo', label: 'Always Info' },
+ ]
+
const scriptNameField = {
name: 'ScriptName',
label: 'Script Name',
@@ -370,7 +398,21 @@ const Page = () => {
placeholder: 'Select how test results are rendered',
options: returnTypeOptions,
creatable: false,
- helperText: 'Choose how failed test results are rendered in CIPP test details.',
+ helperText:
+ 'Controls the default display when no CIPPResultMarkdown is returned by the script. If the script returns CIPPResultMarkdown, it takes priority over this setting.',
+ }
+
+ const resultModeField = {
+ name: 'ResultMode',
+ label: 'Result Mode',
+ type: 'autoComplete',
+ required: true,
+ multiple: false,
+ placeholder: 'Select result mode',
+ options: resultModeOptions,
+ creatable: false,
+ helperText:
+ 'Auto: script output determines pass/fail. Always Pass: result is always Passed. Always Info: result is always Info.',
}
const markdownTemplateField = {
@@ -404,23 +446,6 @@ All UPNs: {{join(Result[*].UserPrincipalName, ", ")}}`,
required: true,
multiline: true,
rows: 22,
- placeholder: `# Example: Find disabled users with licenses
-param($TenantFilter, $DaysThreshold = 30)
-
-$users = Get-CIPPTestData -TenantFilter $TenantFilter -Type 'Users'
-$results = $users | Where-Object {
- $_.assignedLicenses.Count -gt 0 -and
- $_.accountEnabled -eq $false
-} | ForEach-Object {
- [PSCustomObject]@{
- UserPrincipalName = $_.userPrincipalName
- DisplayName = $_.displayName
- Message = "User has license but is disabled"
- }
-}
-
-# Return is optional; pipeline output is also captured.
-return $results`,
disableVariables: true,
}
@@ -566,103 +591,154 @@ return $results`,
}}
>
- Custom tests run PowerShell against each tenant. The script output determines pass or
- fail.
+ Custom tests run PowerShell against each tenant. The script output determines the
+ result status.
-
-
+
+
-
-
- Pass
+
+
+
+ Pass
+
+
+ Return $null, $false, empty string, or{' '}
+ @()
+
+
+
+
+
+ Fail
+
+
+ Return any non-empty value — the returned data becomes the test output
+
+
-
- Return $null, $false, an empty string, or{' '}
- @()
-
-
+
-
-
- Fail
-
+
+ Explicit Status
+
- Return any non-empty value — object, array, string, or $true. The
- returned data becomes the test output.
+ Return a hashtable with CIPPStatus (Passed/
+ Failed/Info), CIPPResults, and optional{' '}
+ CIPPResultMarkdown to control status and rendering directly (Auto
+ result mode only)
-
-
-
+
-
-
- Alerts
+
+
+
+ Alerts
+
-
- Enable "Notify on Alert" to create alerts on failure. Deduplicated per tenant
- per day, then routed to email, webhook, or PSA via Alert Configuration.
+
+ Enable "Notify on Alert" for failure alerts, deduplicated per tenant
+ per day.
-
-
- Scripting Rules
+
+
+
+ Scripting Rules
+
-
- PowerShell AST allowlist — only approved cmdlets (ForEach-Object, Where-Object,
- Select-Object, etc.). The += operator is blocked.{' '}
- $TenantFilter is available automatically.
+
+ AST allowlist — approved cmdlets only. += is blocked.{' '}
+ $TenantFilter is injected automatically.
-
-
- Data Access
+
+
+
+ Data Access
+
-
- Read-only via Get-CIPPTestData and Get-CIPPDbItem{' '}
- with a -Type parameter.
+
+ Read-only via Get-CIPPTestData with -Type.
setCacheTypesDialogOpen(true)}
+ sx={{ mt: 0.5 }}
>
View Cached Types ({cacheTypes.length})
@@ -670,37 +746,380 @@ return $results`,
-
+
Manual testing on this page is preview-only. Results are persisted only during
scheduled tenant test runs with the script enabled.
+
+
+
+
+ Example Scripts
+
+
+
+ }>
+
+ Licensed Users with Resolved SKU Names
+
+
+
+
+ Lists all users with licenses, resolves SKU IDs to friendly names using the
+ license cache, and returns a markdown table with an explicit Passed status.
+ Demonstrates CIPPStatus, CIPPResults, and{' '}
+ CIPPResultMarkdown.
+
+ display name lookup hashtable
+$SkuLookup = @{}
+$Licenses | ForEach-Object {
+ $SkuLookup[$_.skuId] = $_.License
+}
+
+# Build results - users with their resolved license names
+$results = $Users | Where-Object {
+ $_.assignedLicenses.Count -gt 0
+} | ForEach-Object {
+ $user = $_
+ $licenseNames = @($user.assignedLicenses | ForEach-Object {
+ $name = $SkuLookup[$_.skuId]
+ if ($name) { $name } else { $_.skuId }
+ })
+ [PSCustomObject]@{
+ UserPrincipalName = $user.userPrincipalName
+ DisplayName = $user.displayName
+ AccountEnabled = $user.accountEnabled
+ LicenseCount = $licenseNames.Count
+ Licenses = $licenseNames -join ', '
+ }
+}
+
+# Build markdown table
+$header = "### Licensed Users: $($results.Count)\\n\\n| User | Display Name | Enabled | Licenses |\\n|---|---|---|---|"
+$rows = $results | ForEach-Object {
+ "| $($_.UserPrincipalName) | $($_.DisplayName) | $($_.AccountEnabled) | $($_.Licenses) |"
+}
+$md = @($header) + @($rows) -join "\\n"
+
+# Return with explicit pass + markdown
+@{
+ CIPPStatus = 'Passed'
+ CIPPResults = $results
+ CIPPResultMarkdown = $md
+}`}
+ language="powershell"
+ showLineNumbers={true}
+ />
+
+
+
+
+ }>
+
+ Disabled Users with Active Licenses
+
+
+
+
+ Finds disabled accounts that still have licenses assigned — a common cost waste
+ indicator. Returns failed rows as JSON (default Result Display Type behavior). No
+ wrapper needed — non-empty output automatically means fail.
+
+
+
+
+
+
+ }>
+
+ MFA Registration Gaps
+
+
+
+
+ Checks user registration details for accounts that haven't registered any MFA
+ method. Uses Info status so results are always informational rather
+ than a hard fail.
+
+
+
+
+
+
+ }>
+
+ Stale Guest Accounts
+
+
+
+
+ Identifies guest accounts that haven't signed in within 90 days. Uses a{' '}
+ param with a default so the threshold is configurable via Test
+ Parameters. Simple auto-detection — empty result = pass, non-empty = fail.
+
+
+
+
+
+
+ }>
+
+ Conditional Access Policy Summary
+
+
+
+
+ Provides an informational summary of all Conditional Access policies grouped by
+ state. Demonstrates using Group-Object and building a multi-section
+ markdown report. Always passes since it's informational.
+
+
+
+
@@ -766,6 +1185,13 @@ return $results`,
disabled={isScriptLoading}
/>
+
+
+
)}
- {testResults?.Results !== undefined && (
+ {(testResults?.Results !== undefined || testResults?.CIPPResultMarkdown) && (
-
- Test Results
-
- {selectedReturnType === 'Markdown' ? (
+
+ Test Results
+ {testResults?.CIPPStatus && (
+
+ )}
+
+ {testResults?.CIPPResultMarkdown ? (
+
+
+ {testResults.CIPPResultMarkdown.replace(/\\n/g, '\n')}
+
+
+ ) : selectedReturnType === 'Markdown' ? (
{
const pageTitle = "Custom Tests";
+ const [importDialogOpen, setImportDialogOpen] = useState(false);
+ const [selectedRepo, setSelectedRepo] = useState(null);
+ const [selectedBranch, setSelectedBranch] = useState(null);
+
+ const integrations = ApiGetCall({
+ url: "/api/ListExtensionsConfig",
+ queryKey: "Integrations",
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
+
+ const branchQuery = ApiGetCall({
+ url: "/api/ExecGitHubAction",
+ data: { Action: "GetBranches", FullName: selectedRepo },
+ queryKey: `${selectedRepo}-branches`,
+ waiting: !!selectedRepo,
+ });
+
+ const fileTreeQuery = ApiGetCall({
+ url: "/api/ExecGitHubAction",
+ data: {
+ Action: "GetFileTree",
+ FullName: selectedRepo,
+ Branch: selectedBranch,
+ },
+ queryKey: `${selectedRepo}-${selectedBranch}-filetree-customtests`,
+ waiting: !!selectedRepo && !!selectedBranch,
+ });
+
+ const importScriptApi = ApiPostCall({
+ relatedQueryKeys: ["Custom Tests"],
+ urlFromData: true,
+ });
+
+ const scriptFiles = (fileTreeQuery.data?.Results || []).filter(
+ (f) => f.path?.endsWith(".json") && f.path?.startsWith("CustomTests/")
+ );
+
+ const handleImportClose = () => {
+ setImportDialogOpen(false);
+ setSelectedRepo(null);
+ setSelectedBranch(null);
+ };
const simpleColumns = [
"ScriptName",
"Description",
"Enabled",
"AlertOnFailure",
+ "ResultMode",
"ReturnType",
"Category",
"Pillar",
@@ -35,18 +103,33 @@ const Page = () => {
title={pageTitle}
queryKey="Custom Tests"
cardButton={
-
-
-
-
- Add Test
-
+
+ {integrations.isSuccess && integrations?.data?.GitHub?.Enabled && (
+ setImportDialogOpen(true)}
+ >
+
+
+
+ Import from GitHub
+
+ )}
+
+
+
+
+ Add Test
+
+
}
tenantInTitle={false}
apiUrl="/api/ListCustomScripts"
@@ -126,8 +209,150 @@ const Page = () => {
confirmText:
"Are you sure you want to delete the test '[ScriptName]'? This will permanently delete ALL versions of this script.",
},
+ {
+ label: "Save to GitHub",
+ type: "POST",
+ url: "/api/ExecCommunityRepo",
+ icon: ,
+ data: {
+ Action: "UploadScript",
+ GUID: "ScriptGuid",
+ },
+ fields: [
+ {
+ label: "Repository",
+ name: "FullName",
+ type: "select",
+ api: {
+ url: "/api/ListCommunityRepos",
+ data: { WriteAccess: true },
+ queryKey: "CommunityRepos-Write",
+ dataKey: "Results",
+ valueField: "FullName",
+ labelField: "FullName",
+ },
+ multiple: false,
+ creatable: false,
+ required: true,
+ validators: {
+ required: { value: true, message: "This field is required" },
+ },
+ },
+ {
+ label: "Commit Message",
+ placeholder: "Enter a commit message for adding this script to GitHub",
+ name: "Message",
+ type: "textField",
+ multiline: true,
+ required: true,
+ rows: 4,
+ },
+ ],
+ confirmText:
+ "Are you sure you want to save '[ScriptName]' to the selected repository?",
+ condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
+ },
]}
/>
+
+
>
);
};
From be2a3b42f903ee899c61a701155fc06aab259558 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Fri, 1 May 2026 17:32:12 +0800
Subject: [PATCH 094/181] correct MD examples
---
src/pages/tools/custom-tests/add.jsx | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/pages/tools/custom-tests/add.jsx b/src/pages/tools/custom-tests/add.jsx
index 59ad7bba9daf..a44ec637d0ea 100644
--- a/src/pages/tools/custom-tests/add.jsx
+++ b/src/pages/tools/custom-tests/add.jsx
@@ -906,15 +906,14 @@ $noMfa = $RegDetails | Where-Object {
}
$count = @($noMfa).Count
-$md = "### Users Without MFA: $count\\n\\n"
if ($count -gt 0) {
- $md = $md + "| User | Admin | Message |\\n|---|---|---|\\n"
+ $header = "### Users Without MFA: $count\n\n| User | Admin | Message |\n|---|---|---|"
$tableRows = $noMfa | ForEach-Object {
"| $($_.UserPrincipalName) | $($_.IsAdmin) | $($_.Message) |"
}
- $md = @($md) + @($tableRows) -join "\\n"
+ $md = @($header) + @($tableRows) -join "\n"
} else {
- $md = $md + "All users have at least one MFA method registered."
+ $md = "### Users Without MFA: 0\n\nAll users have at least one MFA method registered."
}
@{
@@ -1007,20 +1006,20 @@ $counts = $grouped | ForEach-Object {
}
# Build markdown summary
-$md = "### Conditional Access Policies: $(@($Policies).Count) total\\n\\n"
-$md = $md + "| State | Count |\\n|---|---|\\n"
+$header = "### Conditional Access Policies: $(@($Policies).Count) total\n\n| State | Count |\n|---|---|"
$countRows = $counts | ForEach-Object {
"| $($_.State) | $($_.Count) |"
}
-$md = @($md) + @($countRows) -join "\\n"
-$md = $md + "\\n\\n---\\n\\n"
+$summaryTable = @($header) + @($countRows) -join "\n"
# List each policy
-$md = $md + "| Policy | State | Created |\\n|---|---|---|\\n"
+$policyHeader = "| Policy | State | Created |\n|---|---|---|"
$policyRows = $Policies | Sort-Object -Property state, displayName | ForEach-Object {
"| $($_.displayName) | $($_.state) | $($_.createdDateTime) |"
}
-$md = @($md) + @($policyRows) -join "\\n"
+$policyTable = @($policyHeader) + @($policyRows) -join "\n"
+
+$md = $summaryTable + "\n\n---\n\n" + $policyTable
@{
CIPPStatus = 'Passed'
From fabce5a4a9191978827b049ba455f1faa872c25e Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Fri, 1 May 2026 18:21:33 +0800
Subject: [PATCH 095/181] Custom variable support + block explicit calls with
tenantfilter
---
src/pages/tools/custom-tests/add.jsx | 128 ++++++++++++++++++++++++---
1 file changed, 115 insertions(+), 13 deletions(-)
diff --git a/src/pages/tools/custom-tests/add.jsx b/src/pages/tools/custom-tests/add.jsx
index a44ec637d0ea..b101c5869550 100644
--- a/src/pages/tools/custom-tests/add.jsx
+++ b/src/pages/tools/custom-tests/add.jsx
@@ -100,6 +100,7 @@ const Page = () => {
const [scriptContentExpanded, setScriptContentExpanded] = useState(true)
const [testerExpanded, setTesterExpanded] = useState(true)
const markdownEditorRef = useRef(null)
+ const scriptEditorRef = useRef(null)
const toSelectOption = (value, fallback) =>
value
@@ -168,6 +169,15 @@ const Page = () => {
}, [isEdit])
const cacheExplorerTenant = router.query.tenantFilter || settings?.currentTenant
+
+ const variablesQuery = ApiGetCall({
+ url: `/api/ListCustomVariables?tenantFilter=${encodeURIComponent(cacheExplorerTenant || '')}`,
+ queryKey: `CustomVariables-${cacheExplorerTenant || 'global'}`,
+ waiting: !!cacheExplorerTenant,
+ staleTime: Infinity,
+ refetchOnMount: false,
+ })
+
const cacheExplorerApi = ApiGetCall({
url: '/api/ListDBCache',
data: { tenantFilter: cacheExplorerTenant, type: expandedCacheType },
@@ -452,6 +462,12 @@ All UPNs: {{join(Result[*].UserPrincipalName, ", ")}}`,
const selectedReturnType = formControl.watch('ReturnType')
const markdownTemplateValue = formControl.watch('MarkdownTemplate')
const resultSchemaValue = formControl.watch('ResultSchema')
+ const watchedScriptContent = formControl.watch('ScriptContent')
+
+ const hasTenantFilterParam = useMemo(() => {
+ if (!watchedScriptContent) return false
+ return /-TenantFilter\b/i.test(watchedScriptContent)
+ }, [watchedScriptContent])
const markdownAutocompleteOptions = useMemo(() => {
const suggestionsMap = new Map()
@@ -492,6 +508,71 @@ All UPNs: {{join(Result[*].UserPrincipalName, ", ")}}`,
return Array.from(suggestionsMap.values())
}, [resultSchemaValue])
+ const handleScriptEditorMount = (_editor, monaco) => {
+ scriptEditorRef.current = _editor
+
+ const provider = monaco.languages.registerCompletionItemProvider('powershell', {
+ triggerCharacters: ['%'],
+ provideCompletionItems: (model, position) => {
+ const linePrefix = model.getValueInRange({
+ startLineNumber: position.lineNumber,
+ startColumn: 1,
+ endLineNumber: position.lineNumber,
+ endColumn: position.column,
+ })
+
+ const triggerIndex = linePrefix.lastIndexOf('%')
+ if (triggerIndex === -1) {
+ return { suggestions: [] }
+ }
+
+ const range = {
+ startLineNumber: position.lineNumber,
+ startColumn: triggerIndex + 1,
+ endLineNumber: position.lineNumber,
+ endColumn: position.column,
+ }
+
+ const vars = variablesQuery.data?.Results || []
+ const suggestions = vars.map((v) => ({
+ label: v.Variable,
+ kind: monaco.languages.CompletionItemKind.Variable,
+ insertText: v.Variable,
+ detail: v.Type === 'reserved' ? `Built-in (${v.Category})` : `Custom (${v.Category})`,
+ documentation: v.Description || '',
+ range,
+ }))
+
+ return { suggestions }
+ },
+ })
+
+ const contentListener = _editor.onDidChangeModelContent(() => {
+ const model = _editor.getModel()
+ const position = _editor.getPosition()
+ if (!model || !position) return
+
+ const linePrefix = model.getValueInRange({
+ startLineNumber: position.lineNumber,
+ startColumn: 1,
+ endLineNumber: position.lineNumber,
+ endColumn: position.column,
+ })
+
+ if (linePrefix.endsWith('%')) {
+ _editor.trigger('cipp-variables', 'editor.action.triggerSuggest', {})
+ }
+ })
+
+ _editor.onDidDispose(() => {
+ provider.dispose()
+ contentListener.dispose()
+ if (scriptEditorRef.current === _editor) {
+ scriptEditorRef.current = null
+ }
+ })
+ }
+
const handleMarkdownEditorMount = (_editor, monaco) => {
markdownEditorRef.current = _editor
@@ -706,8 +787,10 @@ All UPNs: {{join(Result[*].UserPrincipalName, ", ")}}`,
- AST allowlist — approved cmdlets only. += is blocked.{' '}
- $TenantFilter is injected automatically.
+ AST allowlist — approved cmdlets only. += is blocked. Data access
+ is automatically tenant-locked — do not pass{' '}
+ -TenantFilter. Type % in the editor for replacement
+ variables.
@@ -732,7 +815,9 @@ All UPNs: {{join(Result[*].UserPrincipalName, ", ")}}`,
color="text.secondary"
sx={{ display: 'block', mb: 0.5 }}
>
- Read-only via Get-CIPPTestData with -Type.
+ Read-only via Get-CIPPTestData with -Type.{' '}
+ Tenant is auto-locked — do not pass -TenantFilter. Use{' '}
+ %variable% syntax for replacement variables.
display name lookup hashtable
$SkuLookup = @{}
@@ -850,7 +935,7 @@ $md = @($header) + @($rows) -join "\\n"
Provides an informational summary of all Conditional Access policies grouped by
- state. Demonstrates using Group-Object and building a multi-section
- markdown report. Always passes since it's informational.
+ state. Demonstrates using Group-Object, building a multi-section
+ markdown report, and %tenantname% replacement variables. Always
+ passes since it's informational.
field.onChange(value || '')}
/>
{scriptContentField.placeholder}
+
+ Type % to insert replacement variables (e.g.{' '}
+ %tenantid%, %defaultdomain%, or custom variables).
+
+ {hasTenantFilterParam && (
+
+ -TenantFilter is not needed — data access functions are
+ automatically locked to the execution tenant. Remove{' '}
+ -TenantFilter $TenantFilter from your calls.
+
+ )}
{fieldState.error?.message && (
{fieldState.error.message}
From 4dfe578c57fd390a45899e70894a026446a644d0 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Fri, 1 May 2026 23:25:03 +0800
Subject: [PATCH 096/181] Bye Bye audit log ServiceFilter, you will not be
missed
---
.../CippAuditLogSearchDrawer.jsx | 29 -------------------
1 file changed, 29 deletions(-)
diff --git a/src/components/CippComponents/CippAuditLogSearchDrawer.jsx b/src/components/CippComponents/CippAuditLogSearchDrawer.jsx
index 9c3179f0490d..54ee0f5c0e6e 100644
--- a/src/components/CippComponents/CippAuditLogSearchDrawer.jsx
+++ b/src/components/CippComponents/CippAuditLogSearchDrawer.jsx
@@ -98,13 +98,6 @@ export const CippAuditLogSearchDrawer = ({
);
}
- // Extract values from ServiceFilters array
- if (Array.isArray(formattedData.ServiceFilters)) {
- formattedData.ServiceFilters = formattedData.ServiceFilters.map((item) =>
- typeof item === "object" ? item.value : item
- );
- }
-
// Extract values from OperationsFilters array
if (Array.isArray(formattedData.OperationsFilters)) {
formattedData.OperationsFilters = formattedData.OperationsFilters.map((item) =>
@@ -206,28 +199,6 @@ export const CippAuditLogSearchDrawer = ({
validators: { required: "End time is required" },
required: true,
},
- {
- type: "autoComplete",
- name: "ServiceFilters",
- label: "Services",
- multiple: true,
- creatable: false,
- options: [
- { label: "Azure Active Directory", value: "AzureActiveDirectory" },
- { label: "Dynamics 365", value: "CRM" },
- { label: "Exchange Online", value: "Exchange" },
- { label: "Microsoft Flow", value: "MicrosoftFlow" },
- { label: "Microsoft Teams", value: "MicrosoftTeams" },
- { label: "OneDrive for Business", value: "OneDrive" },
- { label: "Power BI", value: "PowerBI" },
- { label: "Security & Compliance", value: "ThreatIntelligence" },
- { label: "SharePoint Online", value: "SharePoint" },
- { label: "Yammer", value: "Yammer" },
- ],
- validators: {
- validate: (values) => values?.length > 0 || "Please select at least one service",
- },
- },
{
type: "autoComplete",
name: "RecordTypeFilters",
From 76ab16ec48bd9d439d4feb640901cfe4bf02ceab Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Fri, 1 May 2026 20:15:56 -0400
Subject: [PATCH 097/181] chore: bump version to 10.4.3
---
package.json | 2 +-
public/version.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/package.json b/package.json
index c482c5a02a21..ee84a95ad7bf 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "cipp",
- "version": "10.4.2",
+ "version": "10.4.3",
"author": "CIPP Contributors",
"homepage": "https://cipp.app/",
"bugs": {
diff --git a/public/version.json b/public/version.json
index fdddd5f6239a..521d35e0af9b 100644
--- a/public/version.json
+++ b/public/version.json
@@ -1,3 +1,3 @@
{
- "version": "10.4.2"
+ "version": "10.4.3"
}
From 0ba8d57d4b0da70b986268f718693523d31b0e09 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Mon, 4 May 2026 14:39:11 +0800
Subject: [PATCH 098/181] Pass tenant filter to alerts endpoint
---
src/pages/tenant/administration/alert-configuration/alert.jsx | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/pages/tenant/administration/alert-configuration/alert.jsx b/src/pages/tenant/administration/alert-configuration/alert.jsx
index d9af06f2b549..7829d9df639e 100644
--- a/src/pages/tenant/administration/alert-configuration/alert.jsx
+++ b/src/pages/tenant/administration/alert-configuration/alert.jsx
@@ -29,12 +29,14 @@ import { ApiGetCall, ApiPostCall } from '../../../../api/ApiCall'
import { PlusIcon } from '@heroicons/react/24/outline'
import { CippFormCondition } from '../../../../components/CippComponents/CippFormCondition'
import { CippHead } from '../../../../components/CippComponents/CippHead'
+import { useSettings } from '../../../../hooks/use-settings'
const AlertWizard = () => {
const apiRequest = ApiPostCall({
relatedQueryKeys: ['ListAlertsQueue', 'ListCurrentAlerts'],
})
const router = useRouter()
+ const tenantFilter = useSettings().currentTenant
const [editAlert, setAlertEdit] = useState(false)
useEffect(() => {
if (router.query.id) {
@@ -46,6 +48,8 @@ const AlertWizard = () => {
url: '/api/ListAlertsQueue',
relatedQueryKeys: 'ListAlertsQueue',
queryKey: 'ListCurrentAlerts',
+ data: { tenantFilter },
+ waiting: !!tenantFilter,
})
const [recurrenceOptions, setRecurrenceOptions] = useState([
{ value: '30m', label: 'Every 30 minutes' },
From 7189fe65b65a9dd29bae70d9b3997851707d385b Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Mon, 4 May 2026 14:22:11 +0200
Subject: [PATCH 099/181] updates CIS
---
src/data/standards.json | 179 ++++++++++++++++++++++------------------
1 file changed, 97 insertions(+), 82 deletions(-)
diff --git a/src/data/standards.json b/src/data/standards.json
index 9b4bea164814..ece980ca1c94 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -127,7 +127,7 @@
"name": "standards.AuditLog",
"cat": "Global Standards",
"tag": [
- "CIS M365 5.0 (3.1.1)",
+ "CIS M365 6.0.1 (3.1.1)",
"mip_search_auditlog",
"NIST CSF 2.0 (DE.CM-09)",
"CISAMSEXO171",
@@ -153,7 +153,7 @@
{
"name": "standards.RestrictThirdPartyStorageServices",
"cat": "Global Standards",
- "tag": ["CIS M365 5.0 (1.3.7)"],
+ "tag": ["CIS M365 6.0.1 (1.3.7)"],
"helpText": "Restricts third-party storage services in Microsoft 365 on the web by managing the Microsoft 365 on the web service principal. This disables integrations with services like Dropbox, Google Drive, Box, and other third-party storage providers.",
"docsDescription": "Third-party storage can be enabled for users in Microsoft 365, allowing them to store and share documents using services such as Dropbox, alongside OneDrive and team sites. This standard ensures Microsoft 365 on the web third-party storage services are restricted by creating and disabling the Microsoft 365 on the web service principal (appId: c1f33bc0-bdb4-4248-ba9b-096807ddb43e). By using external storage services an organization may increase the risk of data breaches and unauthorized access to confidential information. Additionally, third-party services may not adhere to the same security standards as the organization, making it difficult to maintain data privacy and security. Impact is highly dependent upon current practices - if users do not use other storage providers, then minimal impact is likely. However, if users regularly utilize providers outside of the tenant this will affect their ability to continue to do so.",
"executiveText": "Prevents employees from using external cloud storage services like Dropbox, Google Drive, and Box within Microsoft 365, reducing data security risks and ensuring all company data remains within controlled corporate systems. This helps maintain data governance and prevents potential data leaks to unauthorized platforms.",
@@ -271,7 +271,7 @@
{
"name": "standards.EnableCustomerLockbox",
"cat": "Global Standards",
- "tag": ["CIS M365 5.0 (1.3.6)", "CustomerLockBoxEnabled"],
+ "tag": ["CIS M365 6.0.1 (1.3.6)", "CustomerLockBoxEnabled"],
"helpText": "**Requires Entra ID P2.** Enables Customer Lockbox that offers an approval process for Microsoft support to access organization data",
"docsDescription": "**Requires Entra ID P2.** Customer Lockbox ensures that Microsoft can't access your content to do service operations without your explicit approval. Customer Lockbox ensures only authorized requests allow access to your organizations data.",
"executiveText": "Requires explicit organizational approval before Microsoft support staff can access company data for service operations. This provides an additional layer of data protection and ensures the organization maintains control over who can access sensitive business information, even during technical support scenarios.",
@@ -331,7 +331,7 @@
"name": "standards.DisableGuestDirectory",
"cat": "Global Standards",
"tag": [
- "CIS M365 5.0 (5.1.6.2)",
+ "CIS M365 6.0.1 (5.1.6.2)",
"CISA (MS.AAD.5.1v1)",
"EIDSCA.AP14",
"EIDSCA.ST08",
@@ -355,7 +355,7 @@
{
"name": "standards.DisableBasicAuthSMTP",
"cat": "Global Standards",
- "tag": ["CIS M365 5.0 (6.5.4)", "NIST CSF 2.0 (PR.IR-01)", "ZTNA21799", "CISAMSEXO51"],
+ "tag": ["CIS M365 6.0.1 (6.5.4)", "NIST CSF 2.0 (PR.IR-01)", "ZTNA21799", "CISAMSEXO51"],
"helpText": "Disables SMTP AUTH organization-wide, impacting POP and IMAP clients that rely on SMTP for sending emails. Default for new tenants. For more information, see the [Microsoft documentation](https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission)",
"docsDescription": "Disables tenant-wide SMTP basic authentication, including for all explicitly enabled users, impacting POP and IMAP clients that rely on SMTP for sending emails. For more information, see the [Microsoft documentation](https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission).",
"executiveText": "Disables outdated email authentication methods that are vulnerable to security attacks, forcing applications and devices to use modern, more secure authentication protocols. This reduces the risk of email-based security breaches and credential theft.",
@@ -378,7 +378,7 @@
"name": "standards.ActivityBasedTimeout",
"cat": "Global Standards",
"tag": [
- "CIS M365 5.0 (1.3.2)",
+ "CIS M365 6.0.1 (1.3.2)",
"spo_idle_session_timeout",
"NIST CSF 2.0 (PR.AA-03)",
"ZTNA21813",
@@ -413,7 +413,7 @@
{
"name": "standards.AuthMethodsSettings",
"cat": "Entra (AAD) Standards",
- "tag": ["EIDSCA.AG01", "EIDSCA.AG02", "EIDSCA.AG03", "EIDSCAAG02", "EIDSCAAG03"],
+ "tag": ["CIS M365 6.0.1 (5.2.3.6)", "EIDSCA.AG01", "EIDSCA.AG02", "EIDSCA.AG03", "EIDSCAAG02", "EIDSCAAG03"],
"helpText": "Configures the report suspicious activity settings and system credential preferences in the authentication methods policy.",
"docsDescription": "Controls the authentication methods policy settings for reporting suspicious activity and system credential preferences. These settings help enhance the security of authentication in your organization.",
"executiveText": "Configures security settings that allow users to report suspicious login attempts and manages how the system handles authentication credentials. This enhances overall security by enabling early detection of potential security threats and optimizing authentication processes.",
@@ -553,7 +553,7 @@
{
"name": "standards.laps",
"cat": "Entra (AAD) Standards",
- "tag": ["ZTNA21953", "ZTNA21955", "ZTNA24560"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.5)", "ZTNA21953", "ZTNA21955", "ZTNA24560"],
"helpText": "Enables the tenant to use LAPS. You must still create a policy for LAPS to be active on all devices. Use the template standards to deploy this by default.",
"docsDescription": "Enables the LAPS functionality on the tenant. Prerequisite for using Windows LAPS via Azure AD.",
"executiveText": "Enables Local Administrator Password Solution (LAPS) capability, which automatically manages and rotates local administrator passwords on company computers. This significantly improves security by preventing the use of shared or static administrator passwords that could be exploited by attackers.",
@@ -569,7 +569,7 @@
"name": "standards.PWdisplayAppInformationRequiredState",
"cat": "Entra (AAD) Standards",
"tag": [
- "CIS M365 5.0 (2.3.1)",
+ "CIS M365 6.0.1 (5.2.3.1)",
"EIDSCA.AM03",
"EIDSCA.AM04",
"EIDSCA.AM06",
@@ -701,7 +701,7 @@
{
"name": "standards.FormsPhishingProtection",
"cat": "Global Standards",
- "tag": ["CIS M365 5.0 (1.3.5)", "Security", "PhishingProtection"],
+ "tag": ["CIS M365 6.0.1 (1.3.5)", "Security", "PhishingProtection"],
"helpText": "Enables internal phishing protection for Microsoft Forms to help prevent malicious forms from being created and shared within the organization. This feature scans forms created by internal users for potential phishing content and suspicious patterns.",
"docsDescription": "Enables internal phishing protection for Microsoft Forms by setting the isInOrgFormsPhishingScanEnabled property to true. This security feature helps protect organizations from internal phishing attacks through Microsoft Forms by automatically scanning forms created by internal users for potential malicious content, suspicious links, and phishing patterns. When enabled, Forms will analyze form content and block or flag potentially dangerous forms before they can be shared within the organization.",
"executiveText": "Automatically scans Microsoft Forms created by employees for malicious content and phishing attempts, preventing the creation and distribution of harmful forms within the organization. This protects against both internal threats and compromised accounts that might be used to distribute malicious content.",
@@ -743,7 +743,7 @@
{
"name": "standards.PasswordExpireDisabled",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 5.0 (1.3.1)", "PWAgePolicyNew"],
+ "tag": ["CIS M365 6.0.1 (1.3.1)", "PWAgePolicyNew"],
"helpText": "Disables the expiration of passwords for the tenant by setting the password expiration policy to never expire for any user.",
"docsDescription": "Sets passwords to never expire for tenant, recommended to use in conjunction with secure password requirements.",
"executiveText": "Eliminates mandatory password expiration requirements, allowing employees to keep strong passwords indefinitely rather than forcing frequent changes that often lead to weaker passwords. This modern security approach reduces help desk calls and improves overall password security when combined with multi-factor authentication.",
@@ -759,7 +759,7 @@
"name": "standards.CustomBannedPasswordList",
"cat": "Entra (AAD) Standards",
"tag": [
- "CIS M365 5.0 (5.2.3.2)",
+ "CIS M365 6.0.1 (5.2.3.2)",
"ZTNA21848",
"ZTNA21849",
"ZTNA21850",
@@ -817,7 +817,7 @@
{
"name": "standards.DisableTenantCreation",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 5.0 (1.2.3)", "CISA (MS.AAD.6.1v1)", "ZTNA21772", "ZTNA21787"],
+ "tag": ["CIS M365 6.0.1 (5.1.2.3)", "CISA (MS.AAD.6.1v1)", "ZTNA21772", "ZTNA21787"],
"helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles.",
"docsDescription": "Users by default are allowed to create M365 tenants. This disables that so only admins can create new M365 tenants.",
"executiveText": "Prevents regular employees from creating new Microsoft 365 organizations, ensuring all new tenants are properly managed and controlled by IT administrators. This prevents unauthorized shadow IT environments and maintains centralized governance over Microsoft 365 resources.",
@@ -833,7 +833,7 @@
"name": "standards.EnableAppConsentRequests",
"cat": "Entra (AAD) Standards",
"tag": [
- "CIS M365 5.0 (1.5.2)",
+ "CIS M365 6.0.1 (5.1.5.2)",
"CISA (MS.AAD.9.1v1)",
"EIDSCA.CP04",
"EIDSCA.CR01",
@@ -929,7 +929,7 @@
"name": "standards.DisableAppCreation",
"cat": "Entra (AAD) Standards",
"tag": [
- "CIS M365 5.0 (1.2.2)",
+ "CIS M365 6.0.1 (5.1.2.2)",
"CISA (MS.AAD.4.1v1)",
"EIDSCA.AP10",
"Essential 8 (1175)",
@@ -950,7 +950,7 @@
{
"name": "standards.BitLockerKeysForOwnedDevice",
"cat": "Entra (AAD) Standards",
- "tag": ["ZTNA21954"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.6)", "ZTNA21954"],
"helpText": "Controls whether standard users can recover BitLocker keys for devices they own.",
"docsDescription": "Updates the Microsoft Entra authorization policy that controls whether standard users can read BitLocker recovery keys for devices they own. Choose to restrict access for tighter security or allow self-service recovery when operational needs require it.",
"executiveText": "Gives administrators centralized control over BitLocker recovery secrets—restrict access to ensure IT-assisted recovery flows, or allow self-service when rapid device unlocks are a priority.",
@@ -977,7 +977,7 @@
{
"name": "standards.DisableSecurityGroupUsers",
"cat": "Entra (AAD) Standards",
- "tag": ["CISA (MS.AAD.20.1v1)", "NIST CSF 2.0 (PR.AA-05)", "ZTNA21868"],
+ "tag": ["CIS M365 6.0.1 (5.1.3.2)", "CISA (MS.AAD.20.1v1)", "NIST CSF 2.0 (PR.AA-05)", "ZTNA21868"],
"helpText": "Completely disables the creation of security groups by users. This also breaks the ability to manage groups themselves, or create Teams",
"executiveText": "Restricts the creation of security groups to IT administrators only, preventing employees from creating unauthorized access groups that could bypass security controls. This ensures proper governance of access permissions and maintains centralized control over who can access what resources.",
"addedComponent": [],
@@ -1005,7 +1005,7 @@
{
"name": "standards.DisableSelfServiceLicenses",
"cat": "Entra (AAD) Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (1.3.4)"],
"helpText": "**Requires 'Billing Administrator' GDAP role.** This standard disables all self service licenses and enables all exclusions",
"executiveText": "Prevents employees from purchasing Microsoft 365 licenses independently, ensuring all software acquisitions go through proper procurement channels. This maintains budget control, prevents unauthorized spending, and ensures compliance with corporate licensing agreements.",
"addedComponent": [
@@ -1055,7 +1055,7 @@
"name": "standards.OauthConsent",
"cat": "Entra (AAD) Standards",
"tag": [
- "CIS M365 5.0 (1.5.1)",
+ "CIS M365 6.0.1 (5.1.5.1)",
"CISA (MS.AAD.4.2v1)",
"EIDSCA.AP08",
"EIDSCA.AP09",
@@ -1192,7 +1192,7 @@
{
"name": "standards.DisableSMS",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 5.0 (2.3.5)", "EIDSCA.AS04", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAS04"],
+ "tag": ["CIS M365 6.0.1 (5.2.3.5)", "EIDSCA.AS04", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAS04"],
"helpText": "This blocks users from using SMS as an MFA method. If a user only has SMS as a MFA method, they will be unable to log in.",
"docsDescription": "Disables SMS as an MFA method for the tenant. If a user only has SMS as a MFA method, they will be unable to sign in.",
"executiveText": "Disables SMS text messages as a multi-factor authentication method due to security vulnerabilities like SIM swapping attacks. This forces users to adopt more secure authentication methods like authenticator apps or hardware tokens, significantly improving account security.",
@@ -1207,7 +1207,7 @@
{
"name": "standards.DisableVoice",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 5.0 (2.3.5)", "EIDSCA.AV01", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAV01"],
+ "tag": ["CIS M365 6.0.1 (5.2.3.5)", "EIDSCA.AV01", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAV01"],
"helpText": "This blocks users from using Voice call as an MFA method. If a user only has Voice as a MFA method, they will be unable to log in.",
"docsDescription": "Disables Voice call as an MFA method for the tenant. If a user only has Voice call as a MFA method, they will be unable to sign in.",
"executiveText": "Disables voice call authentication due to security vulnerabilities and social engineering risks. This forces users to adopt more secure authentication methods like authenticator apps, improving overall account security by eliminating phone-based attack vectors.",
@@ -1222,7 +1222,7 @@
{
"name": "standards.DisableEmail",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 5.0 (2.3.5)", "NIST CSF 2.0 (PR.AA-03)"],
+ "tag": ["CIS M365 6.0.1 (5.2.3.7)", "NIST CSF 2.0 (PR.AA-03)"],
"helpText": "This blocks users from using email as an MFA method. This disables the email OTP option for guest users, and instead prompts them to create a Microsoft account.",
"executiveText": "Disables email-based authentication codes due to security concerns with email interception and account compromise. This forces users to adopt more secure authentication methods, particularly affecting guest users who must use stronger verification methods.",
"addedComponent": [],
@@ -1267,9 +1267,6 @@
"name": "standards.PerUserMFA",
"cat": "Entra (AAD) Standards",
"tag": [
- "CIS M365 5.0 (1.2.1)",
- "CIS M365 5.0 (1.1.1)",
- "CIS M365 5.0 (1.1.2)",
"CISA (MS.AAD.1.1v1)",
"CISA (MS.AAD.1.2v1)",
"Essential 8 (1504)",
@@ -1368,7 +1365,7 @@
{
"name": "standards.OutBoundSpamAlert",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (2.1.6)"],
+ "tag": ["CIS M365 6.0.1 (2.1.6)"],
"helpText": "Set the Outbound Spam Alert e-mail address",
"docsDescription": "Sets the e-mail address to which outbound spam alerts are sent.",
"addedComponent": [
@@ -1643,7 +1640,7 @@
{
"name": "standards.SpoofWarn",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (6.2.3)", "ORCA111", "ORCA240", "CISAMSEXO71"],
+ "tag": ["CIS M365 6.0.1 (6.2.3)", "ORCA111", "ORCA240", "CISAMSEXO71"],
"helpText": "Adds or removes indicators to e-mail messages received from external senders in Outlook. Works on all Outlook clients/OWA",
"docsDescription": "Adds or removes indicators to e-mail messages received from external senders in Outlook. You can read more about this feature on [Microsoft's Exchange Team Blog.](https://techcommunity.microsoft.com/t5/exchange-team-blog/native-external-sender-callouts-on-email-in-outlook/ba-p/2250098)",
"executiveText": "Displays visual warnings in Outlook when emails come from external senders, helping employees identify potentially suspicious messages and reducing the risk of phishing attacks. This security feature makes it easier for staff to distinguish between internal and external communications.",
@@ -1684,7 +1681,7 @@
{
"name": "standards.EnableMailTips",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (6.5.2)", "exo_mailtipsenabled"],
+ "tag": ["CIS M365 6.0.1 (6.5.2)", "exo_mailtipsenabled"],
"helpText": "Enables all MailTips in Outlook. MailTips are the notifications Outlook and Outlook on the web shows when an email you create, meets some requirements",
"executiveText": "Enables helpful notifications in Outlook that warn users about potential email issues, such as sending to large groups, external recipients, or invalid addresses. This reduces email mistakes and improves communication efficiency by providing real-time guidance to employees.",
"addedComponent": [
@@ -1761,7 +1758,7 @@
{
"name": "standards.RotateDKIM",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (2.1.9)"],
+ "tag": ["CIS M365 6.0.1 (2.1.9)"],
"helpText": "Rotate DKIM keys that are 1024 bit to 2048 bit",
"executiveText": "Upgrades email security by replacing older 1024-bit encryption keys with stronger 2048-bit keys for email authentication. This improves the organization's email security posture and helps prevent email spoofing and tampering, maintaining trust with email recipients.",
"addedComponent": [],
@@ -1814,7 +1811,7 @@
{
"name": "standards.AddDKIM",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (2.1.9)", "ORCA108", "CISAMSEXO31"],
+ "tag": ["CIS M365 6.0.1 (2.1.9)", "ORCA108", "CISAMSEXO31"],
"helpText": "Enables DKIM for all domains that currently support it",
"executiveText": "Enables email authentication technology that digitally signs outgoing emails to verify they actually came from your organization. This prevents email spoofing, improves email deliverability, and protects the company's reputation by ensuring recipients can trust emails from your domains.",
"addedComponent": [],
@@ -1835,7 +1832,7 @@
{
"name": "standards.AddDMARCToMOERA",
"cat": "Global Standards",
- "tag": ["CIS M365 5.0 (2.1.10)", "Security", "PhishingProtection"],
+ "tag": ["CIS M365 6.0.1 (2.1.10)", "Security", "PhishingProtection"],
"helpText": "** Remediation is not available ** Note: requires 'Domain Name Administrator' GDAP role. This should be enabled even if the MOERA (onmicrosoft.com) domains is not used for sending. Enabling this prevents email spoofing. The default value is 'v=DMARC1; p=reject;' recommended because the domain is only used within M365 and reporting is not needed. Omitting pct tag default to 100%",
"docsDescription": "** Remediation is not available ** Note: requires 'Domain Name Administrator' GDAP role. Adds a DMARC record to MOERA (onmicrosoft.com) domains. This should be enabled even if the MOERA (onmicrosoft.com) domains is not used for sending. Enabling this prevents email spoofing. The default record is 'v=DMARC1; p=reject;' recommended because the domain is only used within M365 and reporting is not needed. Omitting pct tag default to 100%",
"executiveText": "Implements advanced email security for Microsoft's default domain names (onmicrosoft.com) to prevent criminals from impersonating your organization. This blocks fraudulent emails that could damage your company's reputation and protects partners and customers from phishing attacks using your domain names.",
@@ -1865,9 +1862,9 @@
"name": "standards.EnableMailboxAuditing",
"cat": "Exchange Standards",
"tag": [
- "CIS M365 5.0 (6.1.1)",
- "CIS M365 5.0 (6.1.2)",
- "CIS M365 5.0 (6.1.3)",
+ "CIS M365 6.0.1 (6.1.1)",
+ "CIS M365 6.0.1 (6.1.2)",
+ "CIS M365 6.0.1 (6.1.3)",
"exo_mailboxaudit",
"Essential 8 (1509)",
"Essential 8 (1683)",
@@ -2074,7 +2071,7 @@
{
"name": "standards.EXOOutboundSpamLimits",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (2.1.6)"],
+ "tag": ["CIS M365 6.0.1 (2.1.15)"],
"helpText": "Configures the outbound spam recipient limits (external per hour, internal per hour, per day) and the action to take when a limit is reached. The 'Set Outbound Spam Alert e-mail' standard is recommended to configure together with this one. ",
"docsDescription": "Configures the Exchange Online outbound spam recipient limits for external per hour, internal per hour, and per day, along with the action to take (e.g., BlockUser, Alert) when these limits are exceeded. This helps prevent abuse and manage email flow. Microsoft's recommendations can be found [here.](https://learn.microsoft.com/en-us/defender-office-365/recommended-settings-for-eop-and-office365#eop-outbound-spam-policy-settings) The 'Set Outbound Spam Alert e-mail' standard is recommended to configure together with this one.",
"executiveText": "Sets limits on how many emails employees can send per hour and per day to prevent spam and protect the organization's email reputation. When limits are exceeded, the system can alert administrators or temporarily block the user, helping detect compromised accounts or prevent abuse.",
@@ -2142,7 +2139,7 @@
{
"name": "standards.DisableExternalCalendarSharing",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (1.3.3)", "exo_individualsharing", "ZTNA21803", "CISAMSEXO62"],
+ "tag": ["CIS M365 6.0.1 (1.3.3)", "exo_individualsharing", "ZTNA21803", "CISAMSEXO62"],
"helpText": "Disables the ability for users to share their calendar with external users. Only for the default policy, so exclusions can be made if needed.",
"docsDescription": "Disables external calendar sharing for the entire tenant. This is not a widely used feature, and it's therefore unlikely that this will impact users. Only for the default policy, so exclusions can be made if needed by making a new policy and assigning it to users.",
"executiveText": "Prevents employees from sharing their calendars with external parties, protecting sensitive meeting information and internal schedules from unauthorized access. This security measure helps maintain confidentiality of business activities while still allowing internal collaboration.",
@@ -2180,7 +2177,7 @@
{
"name": "standards.DisableAdditionalStorageProviders",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (6.5.3)", "exo_storageproviderrestricted", "ZTNA21817"],
+ "tag": ["CIS M365 6.0.1 (6.5.3)", "exo_storageproviderrestricted", "ZTNA21817"],
"helpText": "Disables the ability for users to open files in Outlook on the Web, from other providers such as Box, Dropbox, Facebook, Google Drive, OneDrive Personal, etc.",
"docsDescription": "Disables additional storage providers in OWA. This is to prevent users from using personal storage providers like Dropbox, Google Drive, etc. Usually this has little user impact.",
"executiveText": "Prevents employees from accessing personal cloud storage services like Dropbox or Google Drive through Outlook on the web, reducing data security risks and ensuring company information stays within approved corporate systems. This helps maintain data governance and prevents accidental data leaks.",
@@ -2202,7 +2199,7 @@
{
"name": "standards.AntiSpamSafeList",
"cat": "Defender Standards",
- "tag": ["CIS M365 5.0 (2.1.13)"],
+ "tag": ["CIS M365 6.0.1 (2.1.13)"],
"helpText": "Sets the anti-spam connection filter policy option 'safe list' in Defender.",
"docsDescription": "Sets [Microsoft's built-in 'safe list'](https://learn.microsoft.com/en-us/powershell/module/exchange/set-hostedconnectionfilterpolicy?view=exchange-ps#-enablesafelist) in the anti-spam connection filter policy, rather than setting a custom safe/block list of IPs.",
"executiveText": "Enables Microsoft's pre-approved list of trusted email servers to improve email delivery from legitimate sources while maintaining spam protection. This reduces false positives where legitimate emails might be blocked while still protecting against spam and malicious emails.",
@@ -2283,7 +2280,7 @@
{
"name": "standards.Bookings",
"cat": "Exchange Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (1.3.9)"],
"helpText": "Sets the state of Bookings on the tenant. Bookings is a scheduling tool that allows users to book appointments with others both internal and external.",
"docsDescription": "",
"executiveText": "Controls whether employees can use Microsoft Bookings to create online appointment scheduling pages for internal and external clients. This feature can improve customer service and streamline appointment management, but may need to be controlled for security or business process reasons.",
@@ -2316,7 +2313,7 @@
{
"name": "standards.EXODirectSend",
"cat": "Exchange Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (6.5.5)"],
"helpText": "Sets the state of Direct Send in Exchange Online. Direct Send allows applications to send emails directly to Exchange Online mailboxes as the tenants domains, without requiring authentication.",
"docsDescription": "Controls whether applications can use Direct Send to send emails directly to Exchange Online mailboxes as the tenants domains, without requiring authentication. A detailed explanation from Microsoft can be found [here.](https://learn.microsoft.com/en-us/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365)",
"executiveText": "Controls whether business applications and devices (like printers or scanners) can send emails through the company's email system without authentication. While this enables convenient features like scan-to-email, it may pose security risks and should be carefully managed.",
@@ -2344,7 +2341,7 @@
"name": "standards.DisableOutlookAddins",
"cat": "Exchange Standards",
"tag": [
- "CIS M365 5.0 (6.3.1)",
+ "CIS M365 6.0.1 (6.3.1)",
"exo_outlookaddins",
"NIST CSF 2.0 (PR.AA-05)",
"NIST CSF 2.0 (PR.PS-05)",
@@ -2455,7 +2452,7 @@
{
"name": "standards.UserSubmissions",
"cat": "Exchange Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (8.6.1)"],
"helpText": "Set the state of the spam submission button in Outlook",
"docsDescription": "Set the state of the built-in Report button in Outlook. This gives the users the ability to report emails as spam or phish.",
"executiveText": "Enables employees to easily report suspicious emails directly from Outlook, helping improve the organization's spam and phishing detection systems. This crowdsourced approach to security allows users to contribute to threat detection while providing valuable feedback to enhance email security filters.",
@@ -2494,7 +2491,7 @@
{
"name": "standards.DisableSharedMailbox",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (1.2.2)", "CISA (MS.AAD.10.1v1)", "NIST CSF 2.0 (PR.AA-01)"],
+ "tag": ["CIS M365 6.0.1 (1.2.2)", "CISA (MS.AAD.10.1v1)", "NIST CSF 2.0 (PR.AA-01)"],
"helpText": "Blocks login for all accounts that are marked as a shared mailbox. This is Microsoft best practice to prevent direct logons to shared mailboxes.",
"docsDescription": "Shared mailboxes can be directly logged into if the password is reset, this presents a security risk as do all shared login credentials. Microsoft's recommendation is to disable the user account for shared mailboxes. It would be a good idea to review the sign-in reports to establish potential impact.",
"executiveText": "Prevents direct login to shared mailbox accounts (like info@company.com), ensuring they can only be accessed through authorized users' accounts. This security measure eliminates the risk of shared passwords and unauthorized access while maintaining proper access control and audit trails.",
@@ -2532,7 +2529,7 @@
"name": "standards.EXODisableAutoForwarding",
"cat": "Exchange Standards",
"tag": [
- "CIS M365 5.0 (6.2.1)",
+ "CIS M365 6.0.1 (6.2.1)",
"mdo_autoforwardingmode",
"mdo_blockmailforward",
"CISA (MS.EXO.4.1v1)",
@@ -2559,7 +2556,7 @@
{
"name": "standards.RetentionPolicyTag",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (6.4.1)"],
+ "tag": [],
"helpText": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.",
"docsDescription": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.",
"executiveText": "Automatically and permanently removes deleted emails after a specified number of days, helping manage storage costs and ensuring compliance with data retention policies. This prevents accumulation of unnecessary deleted items while maintaining a reasonable recovery window for accidentally deleted emails.",
@@ -2687,7 +2684,7 @@
"name": "standards.SafeLinksPolicy",
"cat": "Defender Standards",
"tag": [
- "CIS M365 5.0 (2.1.1)",
+ "CIS M365 6.0.1 (2.1.1)",
"mdo_safelinksforemail",
"mdo_safelinksforOfficeApps",
"NIST CSF 2.0 (DE.CM-09)",
@@ -2767,7 +2764,7 @@
"mdo_spam_notifications_only_for_admins",
"mdo_antiphishingpolicies",
"mdo_phishthresholdlevel",
- "CIS M365 5.0 (2.1.7)",
+ "CIS M365 6.0.1 (2.1.7)",
"NIST CSF 2.0 (DE.CM-09)",
"ORCA104",
"ORCA115",
@@ -2958,7 +2955,7 @@
"name": "standards.SafeAttachmentPolicy",
"cat": "Defender Standards",
"tag": [
- "CIS M365 5.0 (2.1.4)",
+ "CIS M365 6.0.1 (2.1.4)",
"mdo_safedocuments",
"mdo_commonattachmentsfilter",
"mdo_safeattachmentpolicy",
@@ -3031,7 +3028,7 @@
{
"name": "standards.AtpPolicyForO365",
"cat": "Defender Standards",
- "tag": ["CIS M365 5.0 (2.1.5)", "NIST CSF 2.0 (DE.CM-09)"],
+ "tag": ["CIS M365 6.0.1 (2.1.5)", "NIST CSF 2.0 (DE.CM-09)"],
"helpText": "This creates a Atp policy that enables Defender for Office 365 for SharePoint, OneDrive and Microsoft Teams.",
"addedComponent": [
{
@@ -3113,8 +3110,9 @@
"name": "standards.MalwareFilterPolicy",
"cat": "Defender Standards",
"tag": [
- "CIS M365 5.0 (2.1.2)",
- "CIS M365 5.0 (2.1.3)",
+ "CIS M365 6.0.1 (2.1.2)",
+ "CIS M365 6.0.1 (2.1.3)",
+ "CIS M365 6.0.1 (2.1.11)",
"mdo_zapspam",
"mdo_zapphish",
"mdo_zapmalware",
@@ -3780,7 +3778,7 @@
{
"name": "standards.IntuneComplianceSettings",
"cat": "Intune Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (4.1)"],
"helpText": "Sets the mark devices with no compliance policy assigned as compliance/non compliant and Compliance status validity period.",
"executiveText": "Configures how the system treats devices that don't have specific compliance policies and sets how often devices must check in to maintain their compliance status. This ensures proper security oversight of all corporate devices and maintains current compliance information.",
"addedComponent": [
@@ -3851,7 +3849,7 @@
{
"name": "standards.DefaultPlatformRestrictions",
"cat": "Intune Standards",
- "tag": ["CISA (MS.AAD.19.1v1)"],
+ "tag": ["CIS M365 6.0.1 (4.2)", "CISA (MS.AAD.19.1v1)"],
"helpText": "Sets the default platform restrictions for enrolling devices into Intune. Note: Do not block personally owned if platform is blocked.",
"executiveText": "Controls which types of devices (iOS, Android, Windows, macOS) and ownership models (corporate vs. personal) can be enrolled in the company's device management system. This helps maintain security standards while supporting necessary business device types and usage scenarios.",
"addedComponent": [
@@ -4070,7 +4068,7 @@
{
"name": "standards.intuneDeviceReg",
"cat": "Intune Standards",
- "tag": ["CISA (MS.AAD.17.1v1)", "ZTNA21801", "ZTNA21802"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.2)", "CISA (MS.AAD.17.1v1)", "ZTNA21801", "ZTNA21802"],
"helpText": "Sets the maximum number of devices that can be registered by a user. A value of 0 disables device registration by users",
"executiveText": "Limits how many devices each employee can register for corporate access, preventing excessive device proliferation while accommodating legitimate business needs. This helps maintain security oversight and prevents potential abuse of device registration privileges.",
"addedComponent": [
@@ -4092,7 +4090,7 @@
{
"name": "standards.intuneDeviceRegLocalAdmins",
"cat": "Entra (AAD) Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (5.1.4.3)", "CIS M365 6.0.1 (5.1.4.4)"],
"helpText": "Controls whether users who register Microsoft Entra joined devices are granted local administrator rights on those devices and if Global Administrators are added as local admins.",
"docsDescription": "Configures the Device Registration Policy local administrator behavior for registering users. When enabled, users who register devices are not granted local administrator rights, you can also configure if Global Administrators are added as local admins.",
"executiveText": "Controls whether employees who enroll devices automatically receive local administrator access. Disabling registering-user admin rights follows least-privilege principles and reduces security risk from over-privileged endpoints.",
@@ -4120,7 +4118,7 @@
{
"name": "standards.intuneRestrictUserDeviceRegistration",
"cat": "Entra (AAD) Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (5.1.4.1)"],
"helpText": "Controls whether users can register devices with Entra.",
"docsDescription": "Configures whether users can register devices with Entra. When disabled, users are unable to register devices with Entra.",
"executiveText": "Controls whether employees can register their devices for corporate access. Disabling user device registration prevents unauthorized or unmanaged devices from connecting to company resources, enhancing overall security posture.",
@@ -4266,7 +4264,7 @@
{
"name": "standards.SPAzureB2B",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 5.0 (7.2.2)"],
+ "tag": ["CIS M365 6.0.1 (7.2.2)"],
"helpText": "Ensure SharePoint and OneDrive integration with Azure AD B2B is enabled",
"executiveText": "Enables secure collaboration with external partners through SharePoint and OneDrive by integrating with Azure B2B guest access. This allows controlled sharing with external organizations while maintaining security oversight and proper access management.",
"addedComponent": [],
@@ -4288,7 +4286,7 @@
{
"name": "standards.SPDisallowInfectedFiles",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 5.0 (7.3.1)", "CISA (MS.SPO.3.1v1)", "NIST CSF 2.0 (DE.CM-09)", "ZTNA21817"],
+ "tag": ["CIS M365 6.0.1 (7.3.1)", "CISA (MS.SPO.3.1v1)", "NIST CSF 2.0 (DE.CM-09)", "ZTNA21817"],
"helpText": "Ensure Office 365 SharePoint infected files are disallowed for download",
"executiveText": "Prevents employees from downloading files that have been identified as containing malware or viruses from SharePoint and OneDrive. This security measure protects against malware distribution through file sharing while maintaining access to clean, safe documents.",
"addedComponent": [],
@@ -4354,7 +4352,7 @@
{
"name": "standards.SPExternalUserExpiration",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 5.0 (7.2.9)", "CISA (MS.SPO.1.5v1)", "ZTNA21803", "ZTNA21804", "ZTNA21858"],
+ "tag": ["CIS M365 6.0.1 (7.2.9)", "CISA (MS.SPO.1.5v1)", "ZTNA21803", "ZTNA21804", "ZTNA21858"],
"helpText": "Ensure guest access to a site or OneDrive will expire automatically",
"executiveText": "Automatically expires external user access to SharePoint sites and OneDrive after a specified period, reducing security risks from forgotten or unnecessary guest accounts. This ensures external access is regularly reviewed and maintained only when actively needed.",
"addedComponent": [
@@ -4387,7 +4385,7 @@
{
"name": "standards.SPEmailAttestation",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 5.0 (7.2.10)", "CISA (MS.SPO.1.6v1)", "ZTNA21803", "ZTNA21804"],
+ "tag": ["CIS M365 6.0.1 (7.2.10)", "CISA (MS.SPO.1.6v1)", "ZTNA21803", "ZTNA21804"],
"helpText": "Ensure re-authentication with verification code is restricted",
"executiveText": "Requires external users to periodically re-verify their identity through email verification codes when accessing SharePoint resources, adding an extra security layer for external collaboration. This helps ensure continued legitimacy of external access over time.",
"addedComponent": [
@@ -4421,8 +4419,8 @@
"name": "standards.DefaultSharingLink",
"cat": "SharePoint Standards",
"tag": [
- "CIS M365 5.0 (7.2.7)",
- "CIS M365 5.0 (7.2.11)",
+ "CIS M365 6.0.1 (7.2.7)",
+ "CIS M365 6.0.1 (7.2.11)",
"CISA (MS.SPO.1.4v1)",
"ZTNA21803",
"ZTNA21804"
@@ -4531,8 +4529,7 @@
"name": "standards.DisableSharePointLegacyAuth",
"cat": "SharePoint Standards",
"tag": [
- "CIS M365 5.0 (6.5.1)",
- "CIS M365 5.0 (7.2.1)",
+ "CIS M365 6.0.1 (7.2.1)",
"spo_legacy_auth",
"CISA (MS.AAD.3.1v1)",
"NIST CSF 2.0 (PR.IR-01)",
@@ -4562,7 +4559,8 @@
"name": "standards.sharingCapability",
"cat": "SharePoint Standards",
"tag": [
- "CIS M365 5.0 (7.2.3)",
+ "CIS M365 6.0.1 (7.2.3)",
+ "CIS M365 6.0.1 (7.2.4)",
"CISA (MS.AAD.14.1v1)",
"CISA (MS.SPO.1.1v1)",
"ZTNA21803",
@@ -4615,7 +4613,7 @@
"name": "standards.DisableReshare",
"cat": "SharePoint Standards",
"tag": [
- "CIS M365 5.0 (7.2.5)",
+ "CIS M365 6.0.1 (7.2.5)",
"CISA (MS.AAD.14.2v1)",
"CISA (MS.SPO.1.2v1)",
"ZTNA21803",
@@ -4716,7 +4714,7 @@
{
"name": "standards.unmanagedSync",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 5.0 (7.2.3)", "CISA (MS.SPO.2.1v1)", "NIST CSF 2.0 (PR.AA-05)", "ZTNA24824"],
+ "tag": ["CIS M365 6.0.1 (7.3.2)", "CISA (MS.SPO.2.1v1)", "NIST CSF 2.0 (PR.AA-05)", "ZTNA24824"],
"helpText": "Entra P1 required. Block or limit access to SharePoint and OneDrive content from unmanaged devices (those not hybrid AD joined or compliant in Intune). These controls rely on Microsoft Entra Conditional Access policies and can take up to 24 hours to take effect.",
"docsDescription": "Entra P1 required. Block or limit access to SharePoint and OneDrive content from unmanaged devices (those not hybrid AD joined or compliant in Intune). These controls rely on Microsoft Entra Conditional Access policies and can take up to 24 hours to take effect. 0 = Allow Access, 1 = Allow limited, web-only access, 2 = Block access. All information about this can be found in Microsofts documentation [here.](https://learn.microsoft.com/en-us/sharepoint/control-access-from-unmanaged-devices)",
"executiveText": "Restricts access to company files from personal or unmanaged devices, ensuring corporate data can only be accessed from properly secured and monitored devices. This critical security control prevents data leaks while allowing controlled access through web browsers when necessary.",
@@ -4746,7 +4744,7 @@
"name": "standards.sharingDomainRestriction",
"cat": "SharePoint Standards",
"tag": [
- "CIS M365 5.0 (7.2.6)",
+ "CIS M365 6.0.1 (7.2.6)",
"CISA (MS.AAD.14.3v1)",
"CISA (MS.SPO.1.3v1)",
"ZTNA21803",
@@ -4792,12 +4790,15 @@
"name": "standards.TeamsGlobalMeetingPolicy",
"cat": "Teams Standards",
"tag": [
- "CIS M365 5.0 (8.5.1)",
- "CIS M365 5.0 (8.5.2)",
- "CIS M365 5.0 (8.5.3)",
- "CIS M365 5.0 (8.5.4)",
- "CIS M365 5.0 (8.5.5)",
- "CIS M365 5.0 (8.5.6)"
+ "CIS M365 6.0.1 (8.5.1)",
+ "CIS M365 6.0.1 (8.5.2)",
+ "CIS M365 6.0.1 (8.5.3)",
+ "CIS M365 6.0.1 (8.5.4)",
+ "CIS M365 6.0.1 (8.5.5)",
+ "CIS M365 6.0.1 (8.5.6)",
+ "CIS M365 6.0.1 (8.5.7)",
+ "CIS M365 6.0.1 (8.5.8)",
+ "CIS M365 6.0.1 (8.5.9)"
],
"helpText": "Defines the CIS recommended global meeting policy for Teams. This includes AllowAnonymousUsersToJoinMeeting, AllowAnonymousUsersToStartMeeting, AutoAdmittedUsers, AllowPSTNUsersToBypassLobby, MeetingChatEnabledType, DesignatedPresenterRoleMode, AllowExternalParticipantGiveRequestControl, AllowParticipantGiveRequestControl",
"executiveText": "Establishes security-focused default settings for Teams meetings, controlling who can join meetings, present content, and participate in chats. These policies balance collaboration needs with security requirements, ensuring meetings remain productive while protecting against unauthorized access and disruption.",
@@ -4920,7 +4921,7 @@
{
"name": "standards.TeamsExternalChatWithAnyone",
"cat": "Teams Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (8.2.3)"],
"helpText": "Controls whether users can start Teams chats with any email address, inviting external recipients as guests via email.",
"docsDescription": "Manages the Teams messaging policy setting UseB2BInvitesToAddExternalUsers. When enabled, users can start chats with any email address and recipients receive an invitation to join the chat as guests. Disabling the setting prevents these external email chats from being created, keeping conversations limited to internal users and approved guests.",
"executiveText": "Allows organizations to decide if employees can launch Microsoft Teams chats with anyone on the internet using just an email address. Disabling the feature keeps conversations inside trusted boundaries and helps prevent accidental data exposure through unexpected external invitations.",
@@ -4963,7 +4964,7 @@
"addedDate": "2024-07-30",
"powershellEquivalent": "Set-CsTeamsClientConfiguration -AllowEmailIntoChannel $false",
"recommendedBy": ["CIS"],
- "tag": ["CIS M365 5.0 (8.1.2)"],
+ "tag": ["CIS M365 6.0.1 (8.1.2)"],
"requiredCapabilities": ["MCOSTANDARD", "MCOEV", "MCOIMP", "TEAMS1", "Teams_Room_Standard"]
},
{
@@ -5022,7 +5023,7 @@
{
"name": "standards.TeamsExternalFileSharing",
"cat": "Teams Standards",
- "tag": ["CIS M365 5.0 (8.4.1)"],
+ "tag": ["CIS M365 6.0.1 (8.1.1)"],
"helpText": "Ensure external file sharing in Teams is enabled for only approved cloud storage services.",
"executiveText": "Controls which external cloud storage services (like Google Drive, Dropbox, Box) employees can access through Teams, ensuring file sharing occurs only through approved and secure platforms. This helps maintain data governance while supporting necessary business integrations.",
"addedComponent": [
@@ -5092,7 +5093,7 @@
{
"name": "standards.TeamsExternalAccessPolicy",
"cat": "Teams Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (8.2.1)", "CIS M365 6.0.1 (8.2.2)"],
"helpText": "Sets the properties of the Global external access policy.",
"docsDescription": "Sets the properties of the Global external access policy. External access policies determine whether or not your users can: 1) communicate with users who have Session Initiation Protocol (SIP) accounts with a federated organization; 2) communicate with users who are using custom applications built with Azure Communication Services; 3) access Skype for Business Server over the Internet, without having to log on to your internal network; 4) communicate with users who have SIP accounts with a public instant messaging (IM) provider such as Skype; and, 5) communicate with people who are using Teams with an account that's not managed by an organization.",
"executiveText": "Defines the organization's policy for communicating with external users through Teams, including other organizations, Skype users, and unmanaged accounts. This fundamental setting determines the scope of external collaboration while maintaining security boundaries for business communications.",
@@ -5119,7 +5120,7 @@
{
"name": "standards.TeamsFederationConfiguration",
"cat": "Teams Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (8.2.1)"],
"helpText": "Sets the properties of the Global federation configuration.",
"docsDescription": "Sets the properties of the Global federation configuration. Federation configuration settings determine whether or not your users can communicate with users who have SIP accounts with a federated organization.",
"executiveText": "Configures how the organization federates with external organizations for Teams communication, controlling whether employees can communicate with specific external domains or all external organizations. This setting enables secure inter-organizational collaboration while maintaining control over external communications.",
@@ -5194,7 +5195,7 @@
{
"name": "standards.TeamsMessagingPolicy",
"cat": "Teams Standards",
- "tag": [],
+ "tag": ["CIS M365 6.0.1 (8.6.1)"],
"helpText": "Sets the properties of the Global messaging policy.",
"docsDescription": "Sets the properties of the Global messaging policy. Messaging policies control which chat and channel messaging features are available to users in Teams.",
"executiveText": "Defines what messaging capabilities employees have in Teams, including the ability to edit or delete messages, create custom emojis, and report inappropriate content. These policies help maintain professional communication standards while enabling necessary collaboration features.",
@@ -5602,6 +5603,20 @@
"disabledFeatures": { "report": true, "warn": true, "remediate": false },
"impact": "High Impact",
"addedDate": "2023-12-30",
+ "tag": [
+ "CIS M365 6.0.1 (5.2.2.1)",
+ "CIS M365 6.0.1 (5.2.2.2)",
+ "CIS M365 6.0.1 (5.2.2.3)",
+ "CIS M365 6.0.1 (5.2.2.4)",
+ "CIS M365 6.0.1 (5.2.2.5)",
+ "CIS M365 6.0.1 (5.2.2.6)",
+ "CIS M365 6.0.1 (5.2.2.7)",
+ "CIS M365 6.0.1 (5.2.2.8)",
+ "CIS M365 6.0.1 (5.2.2.9)",
+ "CIS M365 6.0.1 (5.2.2.10)",
+ "CIS M365 6.0.1 (5.2.2.11)",
+ "CIS M365 6.0.1 (5.2.2.12)"
+ ],
"helpText": "Manage conditional access policies for better security.",
"executiveText": "Deploys standardized conditional access policies that automatically enforce security requirements based on user location, device compliance, and risk factors. These templates ensure consistent security controls across the organization while enabling secure access to business resources.",
"addedComponent": [
@@ -5790,7 +5805,7 @@
{
"name": "standards.DisableExchangeOnlinePowerShell",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (6.1.1)", "Security", "NIST CSF 2.0 (PR.AA-05)"],
+ "tag": ["Security", "NIST CSF 2.0 (PR.AA-05)"],
"helpText": "Disables Exchange Online PowerShell access for non-admin users by setting the RemotePowerShellEnabled property to false for each user. This helps prevent attackers from using PowerShell to run malicious commands, access file systems, registry, and distribute ransomware throughout networks. Users with admin roles are automatically excluded.",
"docsDescription": "Disables Exchange Online PowerShell access for non-admin users by setting the RemotePowerShellEnabled property to false for each user. This security measure follows a least privileged access approach, preventing potential attackers from using PowerShell to execute malicious commands, access sensitive systems, or distribute malware. Users with management roles containing 'Admin' are automatically excluded to ensure administrators retain PowerShell access to perform necessary management tasks.",
"executiveText": "Restricts PowerShell access to Exchange Online for regular employees while maintaining access for administrators, significantly reducing security risks from compromised accounts. This prevents attackers from using PowerShell to execute malicious commands or distribute ransomware while preserving necessary administrative capabilities.",
@@ -5811,7 +5826,7 @@
{
"name": "standards.OWAAttachmentRestrictions",
"cat": "Exchange Standards",
- "tag": ["CIS M365 5.0 (6.1.2)", "Security", "NIST CSF 2.0 (PR.AA-05)"],
+ "tag": ["Security", "NIST CSF 2.0 (PR.AA-05)"],
"helpText": "Restricts how users on unmanaged devices can interact with email attachments in Outlook on the web and new Outlook for Windows. Prevents downloading attachments or blocks viewing them entirely.",
"docsDescription": "This standard configures the OWA mailbox policy to restrict access to email attachments on unmanaged devices. Users can be prevented from downloading attachments (but can view/edit via Office Online) or blocked from seeing attachments entirely. This helps prevent data exfiltration through email attachments on devices not managed by the organization.",
"executiveText": "Restricts access to email attachments on personal or unmanaged devices while allowing full functionality on corporate-managed devices. This security measure prevents data theft through email attachments while maintaining productivity for employees using approved company devices.",
From fbc092d27ca00e7dc12ceb7f312946fc90087bbb Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Tue, 5 May 2026 00:08:48 +0800
Subject: [PATCH 100/181] Allow the tenant filter to be populated with tenant
id or initial domain
If another ID is used the tenant selector will map that to a tenant and update it to the default domain
---
.../CippComponents/CippTenantSelector.jsx | 53 ++++++++++++++-----
1 file changed, 39 insertions(+), 14 deletions(-)
diff --git a/src/components/CippComponents/CippTenantSelector.jsx b/src/components/CippComponents/CippTenantSelector.jsx
index f215f9879006..74447184f4ba 100644
--- a/src/components/CippComponents/CippTenantSelector.jsx
+++ b/src/components/CippComponents/CippTenantSelector.jsx
@@ -200,6 +200,7 @@ export const CippTenantSelector = React.forwardRef((props, ref) => {
// This effect handles when the URL parameter changes (from deep link or user selection)
// This is the single source of truth for tenant changes
+ // Supports external hotlinks using customerId (GUID) or initialDomainName in addition to defaultDomainName
useEffect(() => {
if (!router.isReady || !tenantList.isSuccess) return;
@@ -207,17 +208,35 @@ export const CippTenantSelector = React.forwardRef((props, ref) => {
// Only process if we have a URL tenant
if (urlTenant) {
- // Find the tenant in our list
- const matchingTenant = tenantList.data.find(
- ({ defaultDomainName }) => defaultDomainName === urlTenant
- );
+ // Find the tenant in our list - try defaultDomainName first, then customerId and initialDomainName
+ const matchingTenant =
+ tenantList.data.find(
+ ({ defaultDomainName }) => defaultDomainName === urlTenant
+ ) ||
+ tenantList.data.find(({ customerId }) => customerId === urlTenant) ||
+ tenantList.data.find(
+ ({ initialDomainName }) => initialDomainName === urlTenant
+ );
if (matchingTenant) {
+ const resolvedDomain = matchingTenant.defaultDomainName;
+
+ // If the URL used a non-default identifier, normalize the URL to use defaultDomainName
+ if (urlTenant !== resolvedDomain) {
+ const query = { ...router.query, tenantFilter: resolvedDomain };
+ router.replace(
+ { pathname: router.pathname, query },
+ undefined,
+ { shallow: true }
+ );
+ return; // The replace will re-trigger this effect with the normalized value
+ }
+
// Update local state if different
- if (!currentTenant || urlTenant !== currentTenant.value) {
+ if (!currentTenant || resolvedDomain !== currentTenant.value) {
setSelectedTenant({
- value: urlTenant,
- label: `${matchingTenant.displayName} (${urlTenant})`,
+ value: resolvedDomain,
+ label: `${matchingTenant.displayName} (${resolvedDomain})`,
addedFields: {
defaultDomainName: matchingTenant.defaultDomainName,
displayName: matchingTenant.displayName,
@@ -228,9 +247,9 @@ export const CippTenantSelector = React.forwardRef((props, ref) => {
}
// Update settings if different (null filter in settings-context prevents saving null)
- if (settings.currentTenant !== urlTenant) {
+ if (settings.currentTenant !== resolvedDomain) {
settings.handleUpdate({
- currentTenant: urlTenant,
+ currentTenant: resolvedDomain,
});
}
}
@@ -264,14 +283,20 @@ export const CippTenantSelector = React.forwardRef((props, ref) => {
// We can simplify this effect since we now have the new effect above to handle URL changes
useEffect(() => {
if (tenant && tenantList.isSuccess && !currentTenant) {
- const matchingTenant = tenantList.data.find(
- ({ defaultDomainName }) => defaultDomainName === tenant
- );
+ const matchingTenant =
+ tenantList.data.find(
+ ({ defaultDomainName }) => defaultDomainName === tenant
+ ) ||
+ tenantList.data.find(({ customerId }) => customerId === tenant) ||
+ tenantList.data.find(
+ ({ initialDomainName }) => initialDomainName === tenant
+ );
+ const resolvedDomain = matchingTenant?.defaultDomainName;
setSelectedTenant(
matchingTenant
? {
- value: tenant,
- label: `${matchingTenant.displayName} (${tenant})`,
+ value: resolvedDomain,
+ label: `${matchingTenant.displayName} (${resolvedDomain})`,
addedFields: {
defaultDomainName: matchingTenant.defaultDomainName,
displayName: matchingTenant.displayName,
From 0b1ba6cb2bb46a681b9a15852fd130c7ad8ee6bf Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 4 May 2026 15:55:11 -0400
Subject: [PATCH 101/181] feat: add Dutch (Belgium) language
---
public/languageList.json | 7 +++++++
src/data/languageList.json | 6 ++++++
2 files changed, 13 insertions(+)
diff --git a/public/languageList.json b/public/languageList.json
index 769bf0b60f6b..fe6f901b3089 100644
--- a/public/languageList.json
+++ b/public/languageList.json
@@ -160,6 +160,13 @@
"languageTag": "Danish (da-DK)",
"LCID": "1030"
},
+ {
+ "language": "Dutch",
+ "Geographic area": "Belgium",
+ "tag": "nl-BE",
+ "languageTag": "Dutch (nl-BE)",
+ "LCID": "2067"
+ },
{
"language": "Dutch",
"Geographic area": "Netherlands",
diff --git a/src/data/languageList.json b/src/data/languageList.json
index c4e742af3a1e..c3ba3017b201 100644
--- a/src/data/languageList.json
+++ b/src/data/languageList.json
@@ -137,6 +137,12 @@
"tag": "da-DK",
"LCID": "1030"
},
+ {
+ "language": "Dutch",
+ "Geographic area": "Belgium",
+ "tag": "nl-BE",
+ "LCID": "2067"
+ },
{
"language": "Dutch",
"Geographic area": "Netherlands",
From 9ece1d245552157b3d9ee7abac8617cb0a22f46a Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 4 May 2026 16:30:04 -0400
Subject: [PATCH 102/181] fix: quarantine action issues
---
.../email/administration/quarantine/index.js | 198 +++++++++---------
1 file changed, 101 insertions(+), 97 deletions(-)
diff --git a/src/pages/email/administration/quarantine/index.js b/src/pages/email/administration/quarantine/index.js
index 0aa088af9a58..7443eb5e714f 100644
--- a/src/pages/email/administration/quarantine/index.js
+++ b/src/pages/email/administration/quarantine/index.js
@@ -1,6 +1,6 @@
-import { Layout as DashboardLayout } from "../../../../layouts/index.js";
-import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { useEffect, useState } from "react";
+import { Layout as DashboardLayout } from '../../../../layouts/index.js'
+import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { useEffect, useState } from 'react'
import {
Dialog,
DialogTitle,
@@ -9,168 +9,172 @@ import {
Skeleton,
Typography,
CircularProgress,
-} from "@mui/material";
-import { Block, Close, Done, DoneAll } from "@mui/icons-material";
-import { CippMessageViewer } from "../../../../components/CippComponents/CippMessageViewer.jsx";
-import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall";
-import { useSettings } from "../../../../hooks/use-settings";
-import { EyeIcon, DocumentTextIcon } from "@heroicons/react/24/outline";
-import { CippDataTable } from "../../../../components/CippTable/CippDataTable";
+} from '@mui/material'
+import { Block, Close, Done, DoneAll } from '@mui/icons-material'
+import { CippMessageViewer } from '../../../../components/CippComponents/CippMessageViewer.jsx'
+import { ApiGetCall, ApiPostCall } from '../../../../api/ApiCall'
+import { useSettings } from '../../../../hooks/use-settings'
+import { EyeIcon, DocumentTextIcon } from '@heroicons/react/24/outline'
+import { CippDataTable } from '../../../../components/CippTable/CippDataTable'
const simpleColumns = [
- "ReceivedTime",
- "ReleaseStatus",
- "Subject",
- "SenderAddress",
- "RecipientAddress",
- "Type",
- "PolicyName",
- "Tenant",
-];
-const detailColumns = ["Received", "Status", "SenderAddress", "RecipientAddress"];
-const pageTitle = "Quarantine Management";
+ 'ReceivedTime',
+ 'ReleaseStatus',
+ 'Subject',
+ 'SenderAddress',
+ 'RecipientAddress',
+ 'Type',
+ 'PolicyName',
+ 'Tenant',
+]
+const detailColumns = ['Received', 'Status', 'SenderAddress', 'RecipientAddress']
+const pageTitle = 'Quarantine Management'
const Page = () => {
- const tenantFilter = useSettings().currentTenant;
- const [dialogOpen, setDialogOpen] = useState(false);
- const [dialogContent, setDialogContent] = useState(null);
- const [messageId, setMessageId] = useState(null);
- const [traceDialogOpen, setTraceDialogOpen] = useState(false);
- const [traceDetails, setTraceDetails] = useState([]);
- const [traceMessageId, setTraceMessageId] = useState(null);
- const [messageSubject, setMessageSubject] = useState(null);
- const [messageContentsWaiting, setMessageContentsWaiting] = useState(false);
+ const tenantFilter = useSettings().currentTenant
+ const [dialogOpen, setDialogOpen] = useState(false)
+ const [dialogContent, setDialogContent] = useState(null)
+ const [messageId, setMessageId] = useState(null)
+ const [traceDialogOpen, setTraceDialogOpen] = useState(false)
+ const [traceDetails, setTraceDetails] = useState([])
+ const [traceMessageId, setTraceMessageId] = useState(null)
+ const [messageSubject, setMessageSubject] = useState(null)
+ const [messageContentsWaiting, setMessageContentsWaiting] = useState(false)
const getMessageContents = ApiGetCall({
- url: "/api/ListMailQuarantineMessage",
+ url: '/api/ListMailQuarantineMessage',
data: {
tenantFilter: tenantFilter,
Identity: messageId,
},
waiting: messageContentsWaiting,
queryKey: `ListMailQuarantineMessage-${messageId}`,
- });
+ })
const getMessageTraceDetails = ApiPostCall({
urlFromData: true,
queryKey: `MessageTraceDetail-${traceMessageId}`,
onResult: (result) => {
- setTraceDetails(result);
+ setTraceDetails(result)
},
- });
+ })
const viewMessage = (row) => {
- const id = row.Identity;
- setMessageId(id);
+ const id = row.Identity
+ setMessageId(id)
if (!messageContentsWaiting) {
- setMessageContentsWaiting(true);
+ setMessageContentsWaiting(true)
}
- getMessageContents.refetch();
- setDialogOpen(true);
- };
+ getMessageContents.refetch()
+ setDialogOpen(true)
+ }
const viewMessageTrace = (row) => {
- setTraceMessageId(row.MessageId);
+ setTraceMessageId(row.MessageId)
getMessageTraceDetails.mutate({
- url: "/api/ListMessageTrace",
+ url: '/api/ListMessageTrace',
data: {
tenantFilter: tenantFilter,
messageId: row.MessageId,
},
- });
- setMessageSubject(row.Subject);
- setTraceDialogOpen(true);
- };
+ })
+ setMessageSubject(row.Subject)
+ setTraceDialogOpen(true)
+ }
useEffect(() => {
if (getMessageContents.isSuccess) {
- setDialogContent();
+ setDialogContent()
} else {
- setDialogContent();
+ setDialogContent()
}
- }, [getMessageContents.isSuccess, getMessageContents.data]);
+ }, [getMessageContents.isSuccess, getMessageContents.data])
const actions = [
{
- label: "View Message",
+ label: 'View Message',
noConfirm: true,
customFunction: viewMessage,
icon: ,
+ hideBulk: true,
},
{
- label: "View Message Trace",
+ label: 'View Message Trace',
noConfirm: true,
customFunction: viewMessageTrace,
icon: ,
+ hideBulk: true,
},
{
- label: "Release",
- type: "POST",
- url: "/api/ExecQuarantineManagement",
+ label: 'Release',
+ type: 'POST',
+ url: '/api/ExecQuarantineManagement',
multiPost: true,
data: {
- Identity: "Identity",
- Type: "!Release",
+ Identity: 'Identity',
+ Type: '!Release',
},
- confirmText: "Are you sure you want to release this message?",
+ confirmText: 'Are you sure you want to release this message?',
icon: ,
- condition: (row) => row.ReleaseStatus !== "RELEASED",
+ condition: (row) => row.ReleaseStatus !== 'RELEASED',
},
{
- label: "Deny",
- type: "POST",
- url: "/api/ExecQuarantineManagement",
+ label: 'Deny',
+ type: 'POST',
+ url: '/api/ExecQuarantineManagement',
+ multiPost: true,
data: {
- Identity: "Identity",
- Type: "!Deny",
+ Identity: 'Identity',
+ Type: '!Deny',
},
- confirmText: "Are you sure you want to deny this message?",
+ confirmText: 'Are you sure you want to deny this message?',
icon: ,
- condition: (row) => row.ReleaseStatus === "REQUESTED",
+ condition: (row) => row.ReleaseStatus === 'REQUESTED',
},
{
- label: "Release & Allow Sender",
- type: "POST",
- url: "/api/ExecQuarantineManagement",
+ label: 'Release & Allow Sender',
+ type: 'POST',
+ url: '/api/ExecQuarantineManagement',
+ multiPost: true,
data: {
- Identity: "Identity",
- Type: "!Release",
+ Identity: 'Identity',
+ Type: '!Release',
AllowSender: true,
- SenderAddress: "SenderAddress",
- PolicyName: "PolicyName",
+ SenderAddress: 'SenderAddress',
+ PolicyName: 'PolicyName',
},
confirmText:
- "Are you sure you want to release this email and add the sender to the whitelist?",
+ 'Are you sure you want to release this email and add the sender to the whitelist?',
icon: ,
- condition: (row) => row.ReleaseStatus !== "RELEASED",
+ condition: (row) => row.ReleaseStatus !== 'RELEASED',
},
- ];
+ ]
const offCanvas = {
- extendedInfoFields: ["MessageId", "RecipientAddress", "Type"],
+ extendedInfoFields: ['MessageId', 'RecipientAddress', 'Type'],
actions: actions,
- };
+ }
const filterList = [
{
- filterName: "Not Released",
- value: [{ id: "ReleaseStatus", value: "NOTRELEASED" }],
- type: "column",
- filterType: "equal",
+ filterName: 'Not Released',
+ value: [{ id: 'ReleaseStatus', value: 'NOTRELEASED' }],
+ type: 'column',
+ filterType: 'equal',
},
{
- filterName: "Released",
- value: [{ id: "ReleaseStatus", value: "RELEASED" }],
- type: "column",
- filterType: "equal",
+ filterName: 'Released',
+ value: [{ id: 'ReleaseStatus', value: 'RELEASED' }],
+ type: 'column',
+ filterType: 'equal',
},
{
- filterName: "Requested",
- value: [{ id: "ReleaseStatus", value: "REQUESTED" }],
- type: "column",
- filterType: "equal",
+ filterName: 'Requested',
+ value: [{ id: 'ReleaseStatus', value: 'REQUESTED' }],
+ type: 'column',
+ filterType: 'equal',
},
- ];
+ ]
return (
<>
@@ -189,7 +193,7 @@ const Page = () => {
setDialogOpen(false)}
- sx={{ position: "absolute", right: 8, top: 8 }}
+ sx={{ position: 'absolute', right: 8, top: 8 }}
>
@@ -207,7 +211,7 @@ const Page = () => {
setTraceDialogOpen(false)}
- sx={{ position: "absolute", right: 8, top: 8 }}
+ sx={{ position: 'absolute', right: 8, top: 8 }}
>
@@ -227,7 +231,7 @@ const Page = () => {
data={traceDetails ?? []}
refreshFunction={() =>
getMessageTraceDetails.mutate({
- url: "/api/ListMessageTrace",
+ url: '/api/ListMessageTrace',
data: {
tenantFilter: tenantFilter,
messageId: traceMessageId,
@@ -240,9 +244,9 @@ const Page = () => {
>
- );
-};
+ )
+}
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page}
-export default Page;
+export default Page
From e7765754782773ec2faeeb0b90878e2973cca911 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 4 May 2026 17:21:42 -0400
Subject: [PATCH 103/181] feat: add AllTenant support to groups enhance
CippReportDBControls to support all tenant sync functionality
Co-authored-by: Copilot
---
.../CippComponents/CippReportDBControls.jsx | 10 +-
.../identity/administration/groups/index.js | 416 +++++++++---------
2 files changed, 223 insertions(+), 203 deletions(-)
diff --git a/src/components/CippComponents/CippReportDBControls.jsx b/src/components/CippComponents/CippReportDBControls.jsx
index 75d9c70e32c8..ab3784f5c681 100644
--- a/src/components/CippComponents/CippReportDBControls.jsx
+++ b/src/components/CippComponents/CippReportDBControls.jsx
@@ -19,6 +19,7 @@ import { CippQueueTracker } from '../CippTable/CippQueueTracker'
* @param {Object} [config.syncData] - Extra data to pass to ExecCIPPDBCache. Merged with { Name: cacheName }.
* @param {boolean} [config.allowToggle=true] - Whether the user can toggle between cached and live. False = always cached.
* @param {boolean} [config.defaultCached=true] - Initial cached state (when toggle is allowed).
+ * @param {boolean} [config.allowAllTenantSync=false] - Allow syncing when AllTenants is selected (fans out to all tenants).
* @param {string[]} [config.cacheColumns=["CacheTimestamp"]] - Extra columns to show when in cached mode.
* @param {string} [config.tenantColumn="Tenant"] - Column name for tenant (shown in AllTenants mode).
* @param {Object} [config.apiData] - Additional static API data to merge (e.g. extra params).
@@ -44,6 +45,7 @@ export function useCippReportDB(config) {
syncData,
allowToggle = true,
defaultCached = true,
+ allowAllTenantSync = false,
cacheColumns = ['CacheTimestamp'],
tenantColumn = 'Tenant',
apiData: extraApiData,
@@ -123,11 +125,7 @@ export function useCippReportDB(config) {
{useReportDB && (
<>
-
+
@@ -136,7 +134,7 @@ export function useCippReportDB(config) {
}
size="xs"
onClick={dialog.handleOpen}
- disabled={isAllTenants}
+ disabled={isAllTenants && !allowAllTenantSync}
>
Sync
diff --git a/src/pages/identity/administration/groups/index.js b/src/pages/identity/administration/groups/index.js
index 3320ac353204..c64f443f5728 100644
--- a/src/pages/identity/administration/groups/index.js
+++ b/src/pages/identity/administration/groups/index.js
@@ -1,8 +1,8 @@
-import { Button } from "@mui/material";
-import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { Layout as DashboardLayout } from "../../../../layouts/index.js";
-import Link from "next/link";
-import { TrashIcon, EyeIcon } from "@heroicons/react/24/outline";
+import { Button } from '@mui/material'
+import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { Layout as DashboardLayout } from '../../../../layouts/index.js'
+import Link from 'next/link'
+import { TrashIcon, EyeIcon } from '@heroicons/react/24/outline'
import {
Visibility,
GroupAdd,
@@ -12,108 +12,120 @@ import {
GroupSharp,
CloudSync,
RocketLaunch,
-} from "@mui/icons-material";
-import { Stack } from "@mui/system";
-import { useState } from "react";
-import { useSettings } from "../../../../hooks/use-settings";
+} from '@mui/icons-material'
+import { Stack } from '@mui/system'
+import { useState } from 'react'
+import { useSettings } from '../../../../hooks/use-settings'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
const Page = () => {
- const pageTitle = "Groups";
- const [showMembers, setShowMembers] = useState(false);
- const { currentTenant } = useSettings();
+ const pageTitle = 'Groups'
+ const [showMembers, setShowMembers] = useState(false)
+ const { currentTenant } = useSettings()
+
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListGroups',
+ queryKey: 'ListGroups',
+ cacheName: 'Groups',
+ syncTitle: 'Sync Groups Report',
+ allowToggle: true,
+ defaultCached: false,
+ allowAllTenantSync: true,
+ cacheColumns: ['CacheTimestamp'],
+ })
const handleMembersToggle = () => {
- setShowMembers(!showMembers);
- };
+ setShowMembers(!showMembers)
+ }
const actions = [
{
- label: "View Group",
+ label: 'View Group',
link: `/identity/administration/groups/group?groupId=[id]&tenantFilter=${currentTenant}`,
- color: "info",
+ color: 'info',
icon: ,
multiPost: false,
},
{
//tested
- label: "Edit Group",
- link: "/identity/administration/groups/edit?groupId=[id]&groupType=[groupType]",
+ label: 'Edit Group',
+ link: '/identity/administration/groups/edit?groupId=[id]&groupType=[groupType]',
multiPost: false,
icon: ,
- color: "success",
+ color: 'success',
},
{
- label: "Set Global Address List Visibility",
- type: "POST",
- url: "/api/ExecGroupsHideFromGAL",
+ label: 'Set Global Address List Visibility',
+ type: 'POST',
+ url: '/api/ExecGroupsHideFromGAL',
icon: ,
data: {
- ID: "mail",
- GroupType: "groupType",
+ ID: 'mail',
+ GroupType: 'groupType',
},
fields: [
{
- type: "radio",
- name: "HidefromGAL",
- label: "Global Address List Visibility",
+ type: 'radio',
+ name: 'HidefromGAL',
+ label: 'Global Address List Visibility',
options: [
- { label: "Hidden", value: true },
- { label: "Shown", value: false },
+ { label: 'Hidden', value: true },
+ { label: 'Shown', value: false },
],
- validators: { required: "Please select a visibility option" },
+ validators: { required: 'Please select a visibility option' },
},
],
confirmText:
- "Are you sure you want to hide this group from the global address list? Remember this will not work if the group is AD Synched.",
+ 'Are you sure you want to hide this group from the global address list? Remember this will not work if the group is AD Synched.',
multiPost: false,
},
{
- label: "Only allow messages from people inside the organisation",
- type: "POST",
- url: "/api/ExecGroupsDeliveryManagement",
+ label: 'Only allow messages from people inside the organisation',
+ type: 'POST',
+ url: '/api/ExecGroupsDeliveryManagement',
icon: ,
data: {
- ID: "mail",
- GroupType: "groupType",
+ ID: 'mail',
+ GroupType: 'groupType',
OnlyAllowInternal: true,
},
confirmText:
- "Are you sure you want to only allow messages from people inside the organisation? Remember this will not work if the group is AD Synched.",
+ 'Are you sure you want to only allow messages from people inside the organisation? Remember this will not work if the group is AD Synched.',
multiPost: false,
},
{
- label: "Allow messages from people inside and outside the organisation",
- type: "POST",
+ label: 'Allow messages from people inside and outside the organisation',
+ type: 'POST',
icon: ,
- url: "/api/ExecGroupsDeliveryManagement",
+ url: '/api/ExecGroupsDeliveryManagement',
data: {
- ID: "mail",
- GroupType: "groupType",
+ ID: 'mail',
+ GroupType: 'groupType',
OnlyAllowInternal: false,
},
confirmText:
- "Are you sure you want to allow messages from people inside and outside the organisation? Remember this will not work if the group is AD Synched.",
+ 'Are you sure you want to allow messages from people inside and outside the organisation? Remember this will not work if the group is AD Synched.',
multiPost: false,
},
{
- label: "Set Source of Authority",
- type: "POST",
- url: "/api/ExecSetCloudManaged",
+ label: 'Set Source of Authority',
+ type: 'POST',
+ url: '/api/ExecSetCloudManaged',
icon: ,
data: {
- ID: "id",
- displayName: "displayName",
- type: "!Group",
+ ID: 'id',
+ displayName: 'displayName',
+ type: '!Group',
},
fields: [
{
- type: "radio",
- name: "isCloudManaged",
- label: "Source of Authority",
+ type: 'radio',
+ name: 'isCloudManaged',
+ label: 'Source of Authority',
options: [
- { label: "Cloud Managed", value: true },
- { label: "On-Premises Managed", value: false },
+ { label: 'Cloud Managed', value: true },
+ { label: 'On-Premises Managed', value: false },
],
- validators: { required: "Please select a source of authority" },
+ validators: { required: 'Please select a source of authority' },
},
],
confirmText:
@@ -121,31 +133,31 @@ const Page = () => {
multiPost: false,
},
{
- label: "Create template based on group",
- type: "POST",
- url: "/api/AddGroupTemplate",
+ label: 'Create template based on group',
+ type: 'POST',
+ url: '/api/AddGroupTemplate',
icon: ,
data: {
- displayName: "displayName",
- description: "description",
- groupType: "calculatedGroupType",
- membershipRules: "membershipRule",
- allowExternal: "allowExternal",
- username: "mailNickname",
+ displayName: 'displayName',
+ description: 'description',
+ groupType: 'calculatedGroupType',
+ membershipRules: 'membershipRule',
+ allowExternal: 'allowExternal',
+ username: 'mailNickname',
},
- confirmText: "Are you sure you want to create a template based on this group?",
+ confirmText: 'Are you sure you want to create a template based on this group?',
multiPost: false,
},
{
- label: "Create Team from Group",
- type: "POST",
- url: "/api/AddGroupTeam",
+ label: 'Create Team from Group',
+ type: 'POST',
+ url: '/api/AddGroupTeam',
icon: ,
data: {
- GroupId: "id",
+ GroupId: 'id',
},
confirmText:
- "Are you sure you want to create a Team from this group? Note: The group must be at least 15 minutes old for this to work.",
+ 'Are you sure you want to create a Team from this group? Note: The group must be at least 15 minutes old for this to work.',
multiPost: false,
defaultvalues: {
TeamSettings: {
@@ -166,7 +178,7 @@ const Page = () => {
},
funSettings: {
allowGiphy: true,
- giphyContentRating: "strict",
+ giphyContentRating: 'strict',
allowStickersAndMemes: false,
allowCustomMemes: false,
},
@@ -174,181 +186,191 @@ const Page = () => {
},
fields: [
{
- type: "heading",
- name: "memberSettingsHeading",
- label: "Member Settings",
+ type: 'heading',
+ name: 'memberSettingsHeading',
+ label: 'Member Settings',
},
{
- type: "switch",
- name: "TeamSettings.memberSettings.allowCreatePrivateChannels",
- label: "Allow members to create private channels",
+ type: 'switch',
+ name: 'TeamSettings.memberSettings.allowCreatePrivateChannels',
+ label: 'Allow members to create private channels',
},
{
- type: "switch",
- name: "TeamSettings.memberSettings.allowCreateUpdateChannels",
- label: "Allow members to create and update channels",
+ type: 'switch',
+ name: 'TeamSettings.memberSettings.allowCreateUpdateChannels',
+ label: 'Allow members to create and update channels',
},
{
- type: "switch",
- name: "TeamSettings.memberSettings.allowDeleteChannels",
- label: "Allow members to delete channels",
+ type: 'switch',
+ name: 'TeamSettings.memberSettings.allowDeleteChannels',
+ label: 'Allow members to delete channels',
},
{
- type: "switch",
- name: "TeamSettings.memberSettings.allowAddRemoveApps",
- label: "Allow members to add and remove apps",
+ type: 'switch',
+ name: 'TeamSettings.memberSettings.allowAddRemoveApps',
+ label: 'Allow members to add and remove apps',
},
{
- type: "switch",
- name: "TeamSettings.memberSettings.allowCreateUpdateRemoveTabs",
- label: "Allow members to create, update and remove tabs",
+ type: 'switch',
+ name: 'TeamSettings.memberSettings.allowCreateUpdateRemoveTabs',
+ label: 'Allow members to create, update and remove tabs',
},
{
- type: "switch",
- name: "TeamSettings.memberSettings.allowCreateUpdateRemoveConnectors",
- label: "Allow members to create, update and remove connectors",
+ type: 'switch',
+ name: 'TeamSettings.memberSettings.allowCreateUpdateRemoveConnectors',
+ label: 'Allow members to create, update and remove connectors',
},
{
- type: "heading",
- name: "messagingSettingsHeading",
- label: "Messaging Settings",
+ type: 'heading',
+ name: 'messagingSettingsHeading',
+ label: 'Messaging Settings',
},
{
- type: "switch",
- name: "TeamSettings.messagingSettings.allowUserEditMessages",
- label: "Allow users to edit their messages",
+ type: 'switch',
+ name: 'TeamSettings.messagingSettings.allowUserEditMessages',
+ label: 'Allow users to edit their messages',
},
{
- type: "switch",
- name: "TeamSettings.messagingSettings.allowUserDeleteMessages",
- label: "Allow users to delete their messages",
+ type: 'switch',
+ name: 'TeamSettings.messagingSettings.allowUserDeleteMessages',
+ label: 'Allow users to delete their messages',
},
{
- type: "switch",
- name: "TeamSettings.messagingSettings.allowOwnerDeleteMessages",
- label: "Allow owners to delete messages",
+ type: 'switch',
+ name: 'TeamSettings.messagingSettings.allowOwnerDeleteMessages',
+ label: 'Allow owners to delete messages',
},
{
- type: "switch",
- name: "TeamSettings.messagingSettings.allowTeamMentions",
- label: "Allow @team mentions",
+ type: 'switch',
+ name: 'TeamSettings.messagingSettings.allowTeamMentions',
+ label: 'Allow @team mentions',
},
{
- type: "switch",
- name: "TeamSettings.messagingSettings.allowChannelMentions",
- label: "Allow @channel mentions",
+ type: 'switch',
+ name: 'TeamSettings.messagingSettings.allowChannelMentions',
+ label: 'Allow @channel mentions',
},
{
- type: "heading",
- name: "funSettingsHeading",
- label: "Fun Settings",
+ type: 'heading',
+ name: 'funSettingsHeading',
+ label: 'Fun Settings',
},
{
- type: "switch",
- name: "TeamSettings.funSettings.allowGiphy",
- label: "Allow Giphy",
+ type: 'switch',
+ name: 'TeamSettings.funSettings.allowGiphy',
+ label: 'Allow Giphy',
},
{
- type: "select",
- name: "TeamSettings.funSettings.giphyContentRating",
- label: "Giphy content rating",
+ type: 'select',
+ name: 'TeamSettings.funSettings.giphyContentRating',
+ label: 'Giphy content rating',
options: [
- { value: "strict", label: "Strict" },
- { value: "moderate", label: "Moderate" },
+ { value: 'strict', label: 'Strict' },
+ { value: 'moderate', label: 'Moderate' },
],
},
{
- type: "switch",
- name: "TeamSettings.funSettings.allowStickersAndMemes",
- label: "Allow stickers and memes",
+ type: 'switch',
+ name: 'TeamSettings.funSettings.allowStickersAndMemes',
+ label: 'Allow stickers and memes',
},
{
- type: "switch",
- name: "TeamSettings.funSettings.allowCustomMemes",
- label: "Allow custom memes",
+ type: 'switch',
+ name: 'TeamSettings.funSettings.allowCustomMemes',
+ label: 'Allow custom memes',
},
],
- condition: (row) => row?.calculatedGroupType === "m365",
+ condition: (row) => row?.calculatedGroupType === 'm365',
},
{
- label: "Delete Group",
- type: "POST",
- url: "/api/ExecGroupsDelete",
+ label: 'Delete Group',
+ type: 'POST',
+ url: '/api/ExecGroupsDelete',
icon: ,
data: {
- ID: "id",
- GroupType: "groupType",
- DisplayName: "displayName",
+ ID: 'id',
+ GroupType: 'groupType',
+ DisplayName: 'displayName',
},
- confirmText: "Are you sure you want to delete this group.",
+ confirmText: 'Are you sure you want to delete this group.',
multiPost: false,
},
- ];
+ ]
const offCanvas = {
extendedInfoFields: [
- "displayName",
- "userPrincipalName",
- "id",
- "mail",
- "description",
- "mailEnabled",
- "securityEnabled",
- "visibility",
- "assignedLicenses",
- "licenseProcessingState.state",
- "onPremisesSamAccountName",
- "membershipRule",
- "onPremisesSyncEnabled",
+ 'displayName',
+ 'userPrincipalName',
+ 'id',
+ 'mail',
+ 'description',
+ 'mailEnabled',
+ 'securityEnabled',
+ 'visibility',
+ 'assignedLicenses',
+ 'licenseProcessingState.state',
+ 'onPremisesSamAccountName',
+ 'membershipRule',
+ 'onPremisesSyncEnabled',
],
actions: actions,
- };
+ }
return (
-
-
- {showMembers ? "Hide Members" : "Show Members"}
-
- }>
- Add Group
-
- }
- >
- Deploy Group Template
-
-
- }
- apiUrl="/api/ListGroups"
- apiData={{ expandMembers: showMembers }}
- queryKey={
- showMembers
- ? `groups-with-members-${currentTenant}`
- : `groups-without-members-${currentTenant}`
- }
- actions={actions}
- offCanvas={offCanvas}
- simpleColumns={[
- "displayName",
- "description",
- "mail",
- "mailEnabled",
- "mailNickname",
- "groupType",
- "assignedLicenses",
- "licenseProcessingState.state",
- "visibility",
- "onPremisesSamAccountName",
- "membershipRule",
- "onPremisesSyncEnabled",
- ]}
- />
- );
-};
+ <>
+
+ {!reportDB.useReportDB && (
+
+ {showMembers ? 'Hide Members' : 'Show Members'}
+
+ )}
+ }>
+ Add Group
+
+ }
+ >
+ Deploy Group Template
+
+ {reportDB.controls}
+
+ }
+ apiUrl={reportDB.resolvedApiUrl}
+ apiData={reportDB.useReportDB ? undefined : { expandMembers: showMembers }}
+ queryKey={
+ reportDB.useReportDB
+ ? reportDB.resolvedQueryKey
+ : showMembers
+ ? `groups-with-members-${currentTenant}`
+ : `groups-without-members-${currentTenant}`
+ }
+ actions={actions}
+ offCanvas={offCanvas}
+ simpleColumns={[
+ ...reportDB.cacheColumns,
+ ...(reportDB.isAllTenants && reportDB.useReportDB ? ['Tenant'] : []),
+ 'displayName',
+ 'description',
+ 'mail',
+ 'mailEnabled',
+ 'mailNickname',
+ 'groupType',
+ 'assignedLicenses',
+ 'licenseProcessingState.state',
+ 'visibility',
+ 'onPremisesSamAccountName',
+ 'membershipRule',
+ 'onPremisesSyncEnabled',
+ ]}
+ />
+ {reportDB.syncDialog}
+ >
+ )
+}
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page}
-export default Page;
+export default Page
From 34883844aa5a48a1e165125b64ea458e2796f1fd Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 4 May 2026 17:46:58 -0400
Subject: [PATCH 104/181] feat: PR check on fork
---
.github/workflows/pr_check.yml | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/pr_check.yml b/.github/workflows/pr_check.yml
index ea36ac1e82f7..84555d0e0ebb 100644
--- a/.github/workflows/pr_check.yml
+++ b/.github/workflows/pr_check.yml
@@ -22,7 +22,7 @@ jobs:
# Only process fork PRs with specific branch conditions
# Must be a fork AND (source is main/master OR target is main/master)
if: |
- github.event.pull_request.head.repo.fork == true &&
+ github.event.pull_request.head.repo.fork == true &&
((github.event.pull_request.head.ref == 'main' || github.event.pull_request.head.ref == 'master') ||
(github.event.pull_request.base.ref == 'main' || github.event.pull_request.base.ref == 'master'))
uses: actions/github-script@v9
@@ -31,7 +31,31 @@ jobs:
script: |
let message = '';
+ // Check if the fork has open PRs (indicates pull bot or similar is active)
+ const forkOwner = context.payload.pull_request.head.repo.owner.login;
+ const forkRepo = context.payload.pull_request.head.repo.name;
+ const forkPullsUrl = context.payload.pull_request.head.repo.html_url + '/pulls';
+
+ let openPRs = [];
+ try {
+ const { data: prs } = await github.rest.pulls.list({
+ owner: forkOwner,
+ repo: forkRepo,
+ state: 'open',
+ per_page: 5
+ });
+ openPRs = prs;
+ } catch (e) {
+ // Can't read fork PRs — skip
+ }
+
message += '🔄 If you are attempting to update your CIPP repo please follow the instructions at: https://docs.cipp.app/setup/self-hosting-guide/updating. Are you a sponsor? Contact the helpdesk for direct assistance with updating to the latest version.';
+
+ if (openPRs.length > 0) {
+ message += ` It looks like you may already have a pending update PR on your fork — check your [open pull requests](${forkPullsUrl}) to accept it.`;
+ } else {
+ message += ` You can enable [Pull Bot](https://github.com/apps/pull) or [Repo Sync](https://github.com/apps/repo-sync) to automatically keep your fork up to date.`;
+ }
message += '\n\n';
// Check if PR is targeting main/master
@@ -40,7 +64,7 @@ jobs:
}
// Check if PR is from a fork's main/master branch
- if (context.payload.pull_request.head.repo.fork &&
+ if (context.payload.pull_request.head.repo.fork &&
(context.payload.pull_request.head.ref === 'main' || context.payload.pull_request.head.ref === 'master')) {
message += '⚠️ This PR cannot be merged because it originates from your fork\'s main/master branch. If you are attempting to contribute code please PR from your dev branch or another non-main/master branch.\n\n';
}
From 7140778ec03715db092ec9f664d14fc72d3bf013 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 4 May 2026 18:14:15 -0400
Subject: [PATCH 105/181] fix: pdf/csv export missing columns if first row does
not have the desired property
Co-authored-by: Copilot
---
src/components/csvExportButton.js | 104 ++++++++++---------
src/components/pdfExportButton.js | 160 +++++++++++++++---------------
2 files changed, 130 insertions(+), 134 deletions(-)
diff --git a/src/components/csvExportButton.js b/src/components/csvExportButton.js
index adce8e92e376..0a05aa64fbe6 100644
--- a/src/components/csvExportButton.js
+++ b/src/components/csvExportButton.js
@@ -1,97 +1,95 @@
-import { BackupTableTwoTone } from "@mui/icons-material";
-import { IconButton, Tooltip } from "@mui/material";
-import { mkConfig, generateCsv, download } from "export-to-csv";
-import { getCippFormatting } from "../utils/get-cipp-formatting";
+import { BackupTableTwoTone } from '@mui/icons-material'
+import { IconButton, Tooltip } from '@mui/material'
+import { mkConfig, generateCsv, download } from 'export-to-csv'
+import { getCippFormatting } from '../utils/get-cipp-formatting'
const csvConfig = mkConfig({
- fieldSeparator: ",",
- decimalSeparator: ".",
+ fieldSeparator: ',',
+ decimalSeparator: '.',
useKeysAsHeaders: true,
-});
+})
// Flatten nested objects so deeply nested properties export as dotted columns.
-const flattenObject = (obj, parentKey = "") => {
- const flattened = {};
+const flattenObject = (obj, parentKey = '') => {
+ const flattened = {}
Object.keys(obj).forEach((key) => {
- const fullKey = parentKey ? `${parentKey}.${key}` : key;
- if (typeof obj[key] === "object" && obj[key] !== null && !Array.isArray(obj[key])) {
- Object.assign(flattened, flattenObject(obj[key], fullKey));
- } else if (Array.isArray(obj[key]) && typeof obj[key][0] === "string") {
- flattened[fullKey] = obj[key];
+ const fullKey = parentKey ? `${parentKey}.${key}` : key
+ if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) {
+ Object.assign(flattened, flattenObject(obj[key], fullKey))
+ } else if (Array.isArray(obj[key]) && typeof obj[key][0] === 'string') {
+ flattened[fullKey] = obj[key]
} else if (Array.isArray(obj[key])) {
- let testFormatting = getCippFormatting(obj[key], key, "text", false, false);
- if (typeof testFormatting === "string" && !testFormatting.includes("[object Object]")) {
- flattened[fullKey] = testFormatting;
+ let testFormatting = getCippFormatting(obj[key], key, 'text', false, false)
+ if (typeof testFormatting === 'string' && !testFormatting.includes('[object Object]')) {
+ flattened[fullKey] = testFormatting
} else {
flattened[fullKey] = obj[key]
.map((item) =>
- typeof item === "object"
+ typeof item === 'object'
? JSON.stringify(
Object.fromEntries(
Object.entries(flattenObject(item)).map(([k, v]) => [
k,
- getCippFormatting(v, k, "text", false),
+ getCippFormatting(v, k, 'text', false),
])
)
)
- : getCippFormatting(item, fullKey, "text", false, false)
+ : getCippFormatting(item, fullKey, 'text', false, false)
)
- .join(", ");
+ .join(', ')
}
} else {
- flattened[fullKey] = obj[key];
+ flattened[fullKey] = obj[key]
}
- });
- return flattened;
-};
+ })
+ return flattened
+}
// Shared helper so both toolbar buttons and bulk actions reuse identical CSV logic.
export const exportRowsToCsv = ({
rows = [],
columns = [],
- reportName = "Export",
+ reportName = 'Export',
columnVisibility = {},
}) => {
if (!rows.length || !columns.length) {
- return;
+ return
}
- const rowData = rows.map((row) => flattenObject(row.original ?? row));
- const columnKeys = columns.filter((c) => columnVisibility[c.id]).map((c) => c.id);
+ const rowData = rows.map((row) => flattenObject(row.original ?? row))
+ const columnKeys = columns.filter((c) => columnVisibility[c.id]).map((c) => c.id)
const filterRowData = (row, allowedKeys) => {
- const filteredRow = {};
+ const filteredRow = {}
allowedKeys.forEach((key) => {
- if (key in row) {
- filteredRow[key] = row[key];
- }
- });
- return filteredRow;
- };
+ filteredRow[key] = key in row ? row[key] : null
+ })
+ return filteredRow
+ }
- const filteredData = rowData.map((row) => filterRowData(row, columnKeys));
+ const filteredData = rowData.map((row) => filterRowData(row, columnKeys))
// Apply standard CIPP formatting so CSV values match on-screen representations.
const formattedData = filteredData.map((row) => {
- const formattedRow = {};
+ const formattedRow = {}
columnKeys.forEach((key) => {
- const value = row[key];
- if (typeof value === "string") {
- formattedRow[key] = value;
- return;
+ const value = row[key]
+ if (typeof value === 'string') {
+ formattedRow[key] = value
+ return
}
- formattedRow[key] = getCippFormatting(value, key, "text", false);
- });
- return formattedRow;
- });
+ formattedRow[key] = getCippFormatting(value, key, 'text', false)
+ })
+ return formattedRow
+ })
- const csv = generateCsv(csvConfig)(formattedData);
- csvConfig["filename"] = `${reportName}`;
- download(csvConfig)(csv);
-};
+ const csv = generateCsv(csvConfig)(formattedData)
+ csvConfig['filename'] = `${reportName}`
+ download(csvConfig)(csv)
+}
export const CSVExportButton = (props) => {
- const { rows = [], columns = [], reportName, columnVisibility = {}, ...other } = props;
+ const { rows = [], columns = [], reportName, columnVisibility = {}, ...other } = props
return (
@@ -105,5 +103,5 @@ export const CSVExportButton = (props) => {
- );
-};
+ )
+}
diff --git a/src/components/pdfExportButton.js b/src/components/pdfExportButton.js
index f0c0ce803b08..f8939bb59ead 100644
--- a/src/components/pdfExportButton.js
+++ b/src/components/pdfExportButton.js
@@ -1,133 +1,131 @@
-import { IconButton, Tooltip } from "@mui/material";
-import { PictureAsPdf } from "@mui/icons-material";
-import jsPDF from "jspdf";
-import autoTable from "jspdf-autotable";
-import { getCippFormatting } from "../utils/get-cipp-formatting";
-import { useSettings } from "../hooks/use-settings";
+import { IconButton, Tooltip } from '@mui/material'
+import { PictureAsPdf } from '@mui/icons-material'
+import jsPDF from 'jspdf'
+import autoTable from 'jspdf-autotable'
+import { getCippFormatting } from '../utils/get-cipp-formatting'
+import { useSettings } from '../hooks/use-settings'
// Flatten nested objects so deeply nested properties export properly.
// This function only restructures data without formatting - formatting happens later in one pass.
-const flattenObject = (obj, parentKey = "") => {
- const flattened = {};
+const flattenObject = (obj, parentKey = '') => {
+ const flattened = {}
Object.keys(obj).forEach((key) => {
- const fullKey = parentKey ? `${parentKey}.${key}` : key;
- if (typeof obj[key] === "object" && obj[key] !== null && !Array.isArray(obj[key])) {
- Object.assign(flattened, flattenObject(obj[key], fullKey));
+ const fullKey = parentKey ? `${parentKey}.${key}` : key
+ if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) {
+ Object.assign(flattened, flattenObject(obj[key], fullKey))
} else {
// Store the raw value - formatting will happen in a single pass later
- flattened[fullKey] = obj[key];
+ flattened[fullKey] = obj[key]
}
- });
- return flattened;
-};
+ })
+ return flattened
+}
// Shared helper so the toolbar buttons and bulk export path share the same PDF logic.
export const exportRowsToPdf = ({
rows = [],
columns = [],
- reportName = "Export",
+ reportName = 'Export',
columnVisibility = {},
brandingSettings = {},
}) => {
if (!rows.length || !columns.length) {
- return;
+ return
}
- const unit = "pt";
- const size = "A3";
- const orientation = "landscape";
- const doc = new jsPDF(orientation, unit, size);
- const tableData = rows.map((row) => flattenObject(row.original ?? row));
+ const unit = 'pt'
+ const size = 'A3'
+ const orientation = 'landscape'
+ const doc = new jsPDF(orientation, unit, size)
+ const tableData = rows.map((row) => flattenObject(row.original ?? row))
const exportColumns = columns
.filter((c) => columnVisibility[c.id])
- .map((c) => ({ header: c.header, dataKey: c.id }));
+ .map((c) => ({ header: c.header, dataKey: c.id }))
// Use the existing formatting helper so PDF output mirrors table formatting.
const formattedData = tableData.map((row) => {
- const formattedRow = {};
+ const formattedRow = {}
exportColumns.forEach((col) => {
- const key = col.dataKey;
- if (key in row) {
- formattedRow[key] = getCippFormatting(row[key], key, "text", false);
- }
- });
- return formattedRow;
- });
+ const key = col.dataKey
+ formattedRow[key] = getCippFormatting(key in row ? row[key] : null, key, 'text', false)
+ })
+ return formattedRow
+ })
- let logoHeight = 0;
+ let logoHeight = 0
if (brandingSettings?.logo) {
try {
- const logoSize = 60;
- const logoX = 40;
- const logoY = 30;
- doc.addImage(brandingSettings.logo, "PNG", logoX, logoY, logoSize, logoSize);
- logoHeight = logoSize + 20;
+ const logoSize = 60
+ const logoX = 40
+ const logoY = 30
+ doc.addImage(brandingSettings.logo, 'PNG', logoX, logoY, logoSize, logoSize)
+ logoHeight = logoSize + 20
} catch (error) {
- console.warn("Failed to add logo to PDF:", error);
+ console.warn('Failed to add logo to PDF:', error)
}
}
- const pageWidth = doc.internal.pageSize.getWidth();
- const margin = 40;
- const availableWidth = pageWidth - 2 * margin;
- const columnCount = exportColumns.length;
+ const pageWidth = doc.internal.pageSize.getWidth()
+ const margin = 40
+ const availableWidth = pageWidth - 2 * margin
+ const columnCount = exportColumns.length
// Estimate column widths from content to keep tables readable regardless of dataset.
const columnWidths = exportColumns.map((col) => {
- const headerLength = col.header.length;
+ const headerLength = col.header.length
const maxContentLength = Math.max(
- ...formattedData.map((row) => String(row[col.dataKey] || "").length),
- );
- const estimatedWidth = Math.max(headerLength, maxContentLength) * 6;
- return Math.min(estimatedWidth, (availableWidth / columnCount) * 1.5);
- });
+ ...formattedData.map((row) => String(row[col.dataKey] || '').length)
+ )
+ const estimatedWidth = Math.max(headerLength, maxContentLength) * 6
+ return Math.min(estimatedWidth, (availableWidth / columnCount) * 1.5)
+ })
- const totalEstimatedWidth = columnWidths.reduce((sum, width) => sum + width, 0);
+ const totalEstimatedWidth = columnWidths.reduce((sum, width) => sum + width, 0)
const normalizedWidths = columnWidths.map(
- (width) => (width / totalEstimatedWidth) * availableWidth,
- );
+ (width) => (width / totalEstimatedWidth) * availableWidth
+ )
// Honor tenant branding colors when present so exports stay on-brand.
const getHeaderColor = () => {
if (brandingSettings?.colour) {
- const hex = brandingSettings.colour.replace("#", "");
- const r = parseInt(hex.substr(0, 2), 16);
- const g = parseInt(hex.substr(2, 2), 16);
- const b = parseInt(hex.substr(4, 2), 16);
- return [r, g, b];
+ const hex = brandingSettings.colour.replace('#', '')
+ const r = parseInt(hex.substr(0, 2), 16)
+ const g = parseInt(hex.substr(2, 2), 16)
+ const b = parseInt(hex.substr(4, 2), 16)
+ return [r, g, b]
}
- return [247, 127, 0];
- };
+ return [247, 127, 0]
+ }
const content = {
startY: 100 + logoHeight,
head: [exportColumns.map((col) => col.header)],
- body: formattedData.map((row) => exportColumns.map((col) => String(row[col.dataKey] || ""))),
- theme: "striped",
+ body: formattedData.map((row) => exportColumns.map((col) => String(row[col.dataKey] || ''))),
+ theme: 'striped',
headStyles: {
fillColor: getHeaderColor(),
textColor: [255, 255, 255],
- fontStyle: "bold",
- halign: "center",
- valign: "middle",
+ fontStyle: 'bold',
+ halign: 'center',
+ valign: 'middle',
fontSize: 10,
cellPadding: 8,
},
bodyStyles: {
fontSize: 9,
cellPadding: 6,
- valign: "top",
- overflow: "linebreak",
- cellWidth: "wrap",
+ valign: 'top',
+ overflow: 'linebreak',
+ cellWidth: 'wrap',
},
columnStyles: exportColumns.reduce((styles, col, index) => {
styles[index] = {
cellWidth: normalizedWidths[index],
- halign: "left",
- valign: "top",
- };
- return styles;
+ halign: 'left',
+ valign: 'top',
+ }
+ return styles
}, {}),
margin: {
top: margin,
@@ -135,22 +133,22 @@ export const exportRowsToPdf = ({
bottom: margin,
left: margin,
},
- tableWidth: "auto",
+ tableWidth: 'auto',
styles: {
- overflow: "linebreak",
- cellWidth: "wrap",
+ overflow: 'linebreak',
+ cellWidth: 'wrap',
fontSize: 9,
cellPadding: 6,
},
- };
- autoTable(doc, content);
+ }
+ autoTable(doc, content)
- doc.save(`${reportName}.pdf`);
-};
+ doc.save(`${reportName}.pdf`)
+}
export const PDFExportButton = (props) => {
- const { rows = [], columns = [], reportName, columnVisibility = {}, ...other } = props;
- const brandingSettings = useSettings().customBranding;
+ const { rows = [], columns = [], reportName, columnVisibility = {}, ...other } = props
+ const brandingSettings = useSettings().customBranding
return (
@@ -172,5 +170,5 @@ export const PDFExportButton = (props) => {
- );
-};
+ )
+}
From 5828c0067c995be575c43acb781216019aa493b1 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Tue, 5 May 2026 14:54:41 +0200
Subject: [PATCH 106/181] update standards.json for SMB1001
---
src/data/standards.json | 101 ++++++++++++++++++++++++++--------------
1 file changed, 67 insertions(+), 34 deletions(-)
diff --git a/src/data/standards.json b/src/data/standards.json
index ece980ca1c94..124ac1b3b3a9 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -339,7 +339,8 @@
"NIST CSF 2.0 (PR.AA-05)",
"EIDSCAAP07",
"EIDSCAST08",
- "EIDSCAST09"
+ "EIDSCAST09",
+ "SMB1001 (2.8)"
],
"helpText": "Disables Guest access to enumerate directory objects. This prevents guest users from seeing other users or guests in the directory.",
"docsDescription": "Sets it so guests can view only their own user profile. Permission to view other users isn't allowed. Also restricts guest users from seeing the membership of groups they're in. See exactly what get locked down in the [Microsoft documentation.](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions)",
@@ -413,7 +414,7 @@
{
"name": "standards.AuthMethodsSettings",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.2.3.6)", "EIDSCA.AG01", "EIDSCA.AG02", "EIDSCA.AG03", "EIDSCAAG02", "EIDSCAAG03"],
+ "tag": ["CIS M365 6.0.1 (5.2.3.6)", "EIDSCA.AG01", "EIDSCA.AG02", "EIDSCA.AG03", "EIDSCAAG02", "EIDSCAAG03", "SMB1001 (2.8)"],
"helpText": "Configures the report suspicious activity settings and system credential preferences in the authentication methods policy.",
"docsDescription": "Controls the authentication methods policy settings for reporting suspicious activity and system credential preferences. These settings help enhance the security of authentication in your organization.",
"executiveText": "Configures security settings that allow users to report suspicious login attempts and manages how the system handles authentication credentials. This enhances overall security by enabling early detection of potential security threats and optimizing authentication processes.",
@@ -553,7 +554,7 @@
{
"name": "standards.laps",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.4.5)", "ZTNA21953", "ZTNA21955", "ZTNA24560"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.5)", "ZTNA21953", "ZTNA21955", "ZTNA24560", "SMB1001 (2.2)"],
"helpText": "Enables the tenant to use LAPS. You must still create a policy for LAPS to be active on all devices. Use the template standards to deploy this by default.",
"docsDescription": "Enables the LAPS functionality on the tenant. Prerequisite for using Windows LAPS via Azure AD.",
"executiveText": "Enables Local Administrator Password Solution (LAPS) capability, which automatically manages and rotates local administrator passwords on company computers. This significantly improves security by preventing the use of shared or static administrator passwords that could be exploited by attackers.",
@@ -655,7 +656,10 @@
"EIDSCAAF03",
"EIDSCAAF04",
"EIDSCAAF05",
- "EIDSCAAF06"
+ "EIDSCAAF06",
+ "SMB1001 (2.5)",
+ "SMB1001 (2.6)",
+ "SMB1001 (2.9)"
],
"helpText": "Enables the FIDO2 authenticationMethod for the tenant",
"docsDescription": "Enables FIDO2 capabilities for the tenant. This allows users to use FIDO2 keys like a Yubikey for authentication.",
@@ -671,7 +675,7 @@
{
"name": "standards.EnableHardwareOAuth",
"cat": "Entra (AAD) Standards",
- "tag": [],
+ "tag": ["SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
"helpText": "Enables the HardwareOath authenticationMethod for the tenant. This allows you to use hardware tokens for generating 6 digit MFA codes.",
"docsDescription": "Enables Hardware OAuth tokens for the tenant. This allows users to use hardware tokens like a Yubikey for authentication.",
"executiveText": "Enables physical hardware tokens that generate secure authentication codes, providing an alternative to smartphone-based authentication. This is particularly valuable for employees who cannot use mobile devices or require the highest security standards for accessing sensitive systems.",
@@ -767,7 +771,8 @@
"EIDSCAPR02",
"EIDSCAPR03",
"EIDSCAPR05",
- "EIDSCAPR06"
+ "EIDSCAPR06",
+ "SMB1001 (2.1)"
],
"helpText": "**Requires Entra ID P1.** Updates and enables the Entra ID custom banned password list with the supplied words. Enter words separated by commas or semicolons. Each word must be 4-16 characters long. Maximum 1,000 words allowed.",
"docsDescription": "Updates and enables the Entra ID custom banned password list with the supplied words. This supplements the global banned password list maintained by Microsoft. The custom list is limited to 1,000 key base terms of 4-16 characters each. Entra ID will [block variations and common substitutions](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-configure-custom-password-protection#configure-custom-banned-passwords) of these words in user passwords. [How are passwords evaluated?](https://learn.microsoft.com/en-us/entra/identity/authentication/concept-password-ban-bad#score-calculation)",
@@ -817,7 +822,7 @@
{
"name": "standards.DisableTenantCreation",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.2.3)", "CISA (MS.AAD.6.1v1)", "ZTNA21772", "ZTNA21787"],
+ "tag": ["CIS M365 6.0.1 (5.1.2.3)", "CISA (MS.AAD.6.1v1)", "ZTNA21772", "ZTNA21787", "SMB1001 (2.8)"],
"helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles.",
"docsDescription": "Users by default are allowed to create M365 tenants. This disables that so only admins can create new M365 tenants.",
"executiveText": "Prevents regular employees from creating new Microsoft 365 organizations, ensuring all new tenants are properly managed and controlled by IT administrators. This prevents unauthorized shadow IT environments and maintains centralized governance over Microsoft 365 resources.",
@@ -868,7 +873,7 @@
{
"name": "standards.NudgeMFA",
"cat": "Entra (AAD) Standards",
- "tag": ["ZTNA21889"],
+ "tag": ["ZTNA21889", "SMB1001 (2.5)"],
"helpText": "Sets the state of the registration campaign for the tenant",
"docsDescription": "Sets the state of the registration campaign for the tenant. If enabled nudges users to set up the Microsoft Authenticator during sign-in.",
"executiveText": "Prompts employees to set up multi-factor authentication during login, gradually improving the organization's security posture by encouraging adoption of stronger authentication methods. This helps achieve better security compliance without forcing immediate mandatory changes.",
@@ -905,7 +910,7 @@
{
"name": "standards.DisableM365GroupUsers",
"cat": "Entra (AAD) Standards",
- "tag": ["CISA (MS.AAD.21.1v1)", "ZTNA21868"],
+ "tag": ["CISA (MS.AAD.21.1v1)", "ZTNA21868", "SMB1001 (2.8)"],
"helpText": "Restricts M365 group creation to certain admin roles. This disables the ability to create Teams, SharePoint sites, Planner, etc",
"docsDescription": "Users by default are allowed to create M365 groups. This restricts M365 group creation to certain admin roles. This disables the ability to create Teams, SharePoint sites, Planner, etc",
"executiveText": "Restricts the creation of Microsoft 365 groups, Teams, and SharePoint sites to authorized administrators, preventing uncontrolled proliferation of collaboration spaces. This ensures proper governance, naming conventions, and resource management while maintaining oversight of all collaborative environments.",
@@ -934,7 +939,8 @@
"EIDSCA.AP10",
"Essential 8 (1175)",
"NIST CSF 2.0 (PR.AA-05)",
- "EIDSCAAP10"
+ "EIDSCAAP10",
+ "SMB1001 (2.8)"
],
"helpText": "Disables the ability for users to create App registrations in the tenant.",
"docsDescription": "Disables the ability for users to create applications in Entra. Done to prevent breached accounts from creating an app to maintain access to the tenant, even after the breached account has been secured.",
@@ -977,7 +983,7 @@
{
"name": "standards.DisableSecurityGroupUsers",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.3.2)", "CISA (MS.AAD.20.1v1)", "NIST CSF 2.0 (PR.AA-05)", "ZTNA21868"],
+ "tag": ["CIS M365 6.0.1 (5.1.3.2)", "CISA (MS.AAD.20.1v1)", "NIST CSF 2.0 (PR.AA-05)", "ZTNA21868", "SMB1001 (2.8)"],
"helpText": "Completely disables the creation of security groups by users. This also breaks the ability to manage groups themselves, or create Teams",
"executiveText": "Restricts the creation of security groups to IT administrators only, preventing employees from creating unauthorized access groups that could bypass security controls. This ensures proper governance of access permissions and maintains centralized control over who can access what resources.",
"addedComponent": [],
@@ -1005,7 +1011,7 @@
{
"name": "standards.DisableSelfServiceLicenses",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (1.3.4)"],
+ "tag": ["CIS M365 6.0.1 (1.3.4)", "SMB1001 (2.8)"],
"helpText": "**Requires 'Billing Administrator' GDAP role.** This standard disables all self service licenses and enables all exclusions",
"executiveText": "Prevents employees from purchasing Microsoft 365 licenses independently, ensuring all software acquisitions go through proper procurement channels. This maintains budget control, prevents unauthorized spending, and ensures compliance with corporate licensing agreements.",
"addedComponent": [
@@ -1031,7 +1037,7 @@
{
"name": "standards.DisableGuests",
"cat": "Entra (AAD) Standards",
- "tag": ["ZTNA21858"],
+ "tag": ["ZTNA21858", "SMB1001 (2.8)"],
"helpText": "Blocks login for guest users that have not logged in for a number of days",
"executiveText": "Automatically disables external guest accounts that haven't been used for a number of days, reducing security risks from dormant accounts while maintaining access for active external collaborators. This helps maintain a clean user directory and reduces potential attack vectors.",
"addedComponent": [
@@ -1105,7 +1111,7 @@
{
"name": "standards.GuestInvite",
"cat": "Entra (AAD) Standards",
- "tag": ["CISA (MS.AAD.18.1v1)", "EIDSCA.AP04", "EIDSCA.AP07", "EIDSCAAP04"],
+ "tag": ["CISA (MS.AAD.18.1v1)", "EIDSCA.AP04", "EIDSCA.AP07", "EIDSCAAP04", "SMB1001 (2.8)"],
"helpText": "This setting controls who can invite guests to your directory to collaborate on resources secured by your company, such as SharePoint sites or Azure resources.",
"executiveText": "Controls who within the organization can invite external partners and vendors to access company resources, ensuring proper oversight of external access while enabling necessary business collaboration. This helps maintain security while supporting partnership and vendor relationships.",
"addedComponent": [
@@ -1177,7 +1183,7 @@
{
"name": "standards.SecurityDefaults",
"cat": "Entra (AAD) Standards",
- "tag": ["CISA (MS.AAD.11.1v1)", "ZTNA21843"],
+ "tag": ["CISA (MS.AAD.11.1v1)", "ZTNA21843", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
"helpText": "Enables security defaults for the tenant, for newer tenants this is enabled by default. Do not enable this feature if you use Conditional Access.",
"docsDescription": "Enables SD for the tenant, which disables all forms of basic authentication and enforces users to configure MFA. Users are only prompted for MFA when a logon is considered 'suspect' by Microsoft.",
"executiveText": "Activates Microsoft's baseline security configuration that requires multi-factor authentication and blocks legacy authentication methods. This provides essential security protection for organizations without complex conditional access policies, significantly improving security posture with minimal configuration.",
@@ -1192,7 +1198,7 @@
{
"name": "standards.DisableSMS",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.2.3.5)", "EIDSCA.AS04", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAS04"],
+ "tag": ["CIS M365 6.0.1 (5.2.3.5)", "EIDSCA.AS04", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAS04", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
"helpText": "This blocks users from using SMS as an MFA method. If a user only has SMS as a MFA method, they will be unable to log in.",
"docsDescription": "Disables SMS as an MFA method for the tenant. If a user only has SMS as a MFA method, they will be unable to sign in.",
"executiveText": "Disables SMS text messages as a multi-factor authentication method due to security vulnerabilities like SIM swapping attacks. This forces users to adopt more secure authentication methods like authenticator apps or hardware tokens, significantly improving account security.",
@@ -1207,7 +1213,7 @@
{
"name": "standards.DisableVoice",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.2.3.5)", "EIDSCA.AV01", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAV01"],
+ "tag": ["CIS M365 6.0.1 (5.2.3.5)", "EIDSCA.AV01", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAV01", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
"helpText": "This blocks users from using Voice call as an MFA method. If a user only has Voice as a MFA method, they will be unable to log in.",
"docsDescription": "Disables Voice call as an MFA method for the tenant. If a user only has Voice call as a MFA method, they will be unable to sign in.",
"executiveText": "Disables voice call authentication due to security vulnerabilities and social engineering risks. This forces users to adopt more secure authentication methods like authenticator apps, improving overall account security by eliminating phone-based attack vectors.",
@@ -1222,7 +1228,7 @@
{
"name": "standards.DisableEmail",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.2.3.7)", "NIST CSF 2.0 (PR.AA-03)"],
+ "tag": ["CIS M365 6.0.1 (5.2.3.7)", "NIST CSF 2.0 (PR.AA-03)", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
"helpText": "This blocks users from using email as an MFA method. This disables the email OTP option for guest users, and instead prompts them to create a Microsoft account.",
"executiveText": "Disables email-based authentication codes due to security concerns with email interception and account compromise. This forces users to adopt more secure authentication methods, particularly affecting guest users who must use stronger verification methods.",
"addedComponent": [],
@@ -1275,7 +1281,10 @@
"NIST CSF 2.0 (PR.AA-03)",
"ZTNA21780",
"ZTNA21782",
- "ZTNA21796"
+ "ZTNA21796",
+ "SMB1001 (2.5)",
+ "SMB1001 (2.6)",
+ "SMB1001 (2.9)"
],
"helpText": "Enables per user MFA for all users.",
"executiveText": "Requires all employees to use multi-factor authentication for enhanced account security, significantly reducing the risk of unauthorized access from compromised passwords. This fundamental security measure protects against the majority of account-based attacks and is essential for maintaining strong cybersecurity posture.",
@@ -1590,7 +1599,7 @@
{
"name": "standards.EnableOnlineArchiving",
"cat": "Exchange Standards",
- "tag": ["Essential 8 (1511)", "NIST CSF 2.0 (PR.DS-11)"],
+ "tag": ["Essential 8 (1511)", "NIST CSF 2.0 (PR.DS-11)", "SMB1001 (3.1)"],
"helpText": "Enables the In-Place Online Archive for all UserMailboxes with a valid license.",
"executiveText": "Automatically enables online email archiving for all licensed employees, providing additional storage for older emails while maintaining easy access. This helps manage mailbox sizes, improves email performance, and supports compliance with data retention requirements.",
"addedComponent": [],
@@ -1611,7 +1620,7 @@
{
"name": "standards.EnableLitigationHold",
"cat": "Exchange Standards",
- "tag": [],
+ "tag": ["SMB1001 (3.1)"],
"helpText": "Enables litigation hold for all UserMailboxes with a valid license.",
"executiveText": "Preserves all email content for legal and compliance purposes by preventing permanent deletion of emails, even when users attempt to delete them. This is essential for organizations subject to legal discovery requirements or regulatory compliance mandates.",
"addedComponent": [
@@ -1758,7 +1767,7 @@
{
"name": "standards.RotateDKIM",
"cat": "Exchange Standards",
- "tag": ["CIS M365 6.0.1 (2.1.9)"],
+ "tag": ["CIS M365 6.0.1 (2.1.9)", "SMB1001 (2.12)"],
"helpText": "Rotate DKIM keys that are 1024 bit to 2048 bit",
"executiveText": "Upgrades email security by replacing older 1024-bit encryption keys with stronger 2048-bit keys for email authentication. This improves the organization's email security posture and helps prevent email spoofing and tampering, maintaining trust with email recipients.",
"addedComponent": [],
@@ -1811,7 +1820,7 @@
{
"name": "standards.AddDKIM",
"cat": "Exchange Standards",
- "tag": ["CIS M365 6.0.1 (2.1.9)", "ORCA108", "CISAMSEXO31"],
+ "tag": ["CIS M365 6.0.1 (2.1.9)", "ORCA108", "CISAMSEXO31", "SMB1001 (2.12)"],
"helpText": "Enables DKIM for all domains that currently support it",
"executiveText": "Enables email authentication technology that digitally signs outgoing emails to verify they actually came from your organization. This prevents email spoofing, improves email deliverability, and protects the company's reputation by ensuring recipients can trust emails from your domains.",
"addedComponent": [],
@@ -1832,7 +1841,7 @@
{
"name": "standards.AddDMARCToMOERA",
"cat": "Global Standards",
- "tag": ["CIS M365 6.0.1 (2.1.10)", "Security", "PhishingProtection"],
+ "tag": ["CIS M365 6.0.1 (2.1.10)", "Security", "PhishingProtection", "SMB1001 (2.12)"],
"helpText": "** Remediation is not available ** Note: requires 'Domain Name Administrator' GDAP role. This should be enabled even if the MOERA (onmicrosoft.com) domains is not used for sending. Enabling this prevents email spoofing. The default value is 'v=DMARC1; p=reject;' recommended because the domain is only used within M365 and reporting is not needed. Omitting pct tag default to 100%",
"docsDescription": "** Remediation is not available ** Note: requires 'Domain Name Administrator' GDAP role. Adds a DMARC record to MOERA (onmicrosoft.com) domains. This should be enabled even if the MOERA (onmicrosoft.com) domains is not used for sending. Enabling this prevents email spoofing. The default record is 'v=DMARC1; p=reject;' recommended because the domain is only used within M365 and reporting is not needed. Omitting pct tag default to 100%",
"executiveText": "Implements advanced email security for Microsoft's default domain names (onmicrosoft.com) to prevent criminals from impersonating your organization. This blocks fraudulent emails that could damage your company's reputation and protects partners and customers from phishing attacks using your domain names.",
@@ -2491,7 +2500,7 @@
{
"name": "standards.DisableSharedMailbox",
"cat": "Exchange Standards",
- "tag": ["CIS M365 6.0.1 (1.2.2)", "CISA (MS.AAD.10.1v1)", "NIST CSF 2.0 (PR.AA-01)"],
+ "tag": ["CIS M365 6.0.1 (1.2.2)", "CISA (MS.AAD.10.1v1)", "NIST CSF 2.0 (PR.AA-01)", "SMB1001 (2.3)"],
"helpText": "Blocks login for all accounts that are marked as a shared mailbox. This is Microsoft best practice to prevent direct logons to shared mailboxes.",
"docsDescription": "Shared mailboxes can be directly logged into if the password is reset, this presents a security risk as do all shared login credentials. Microsoft's recommendation is to disable the user account for shared mailboxes. It would be a good idea to review the sign-in reports to establish potential impact.",
"executiveText": "Prevents direct login to shared mailbox accounts (like info@company.com), ensuring they can only be accessed through authorized users' accounts. This security measure eliminates the risk of shared passwords and unauthorized access while maintaining proper access control and audit trails.",
@@ -2506,7 +2515,7 @@
{
"name": "standards.DisableResourceMailbox",
"cat": "Exchange Standards",
- "tag": ["NIST CSF 2.0 (PR.AA-01)"],
+ "tag": ["NIST CSF 2.0 (PR.AA-01)", "SMB1001 (2.3)"],
"helpText": "Blocks login for all accounts that are marked as a resource mailbox and does not have a license assigned. Accounts that are synced from on-premises AD are excluded, as account state is managed in the on-premises AD.",
"docsDescription": "Resource mailboxes can be directly logged into if the password is reset, this presents a security risk as do all shared login credentials. Microsoft's recommendation is to disable the user account for resource mailboxes. Accounts that are synced from on-premises AD are excluded, as account state is managed in the on-premises AD.",
"executiveText": "Prevents direct login to resource mailbox accounts (like conference rooms or equipment), ensuring they can only be managed through proper administrative channels. This security measure eliminates potential unauthorized access to resource scheduling systems while maintaining proper booking functionality.",
@@ -2556,7 +2565,7 @@
{
"name": "standards.RetentionPolicyTag",
"cat": "Exchange Standards",
- "tag": [],
+ "tag": ["SMB1001 (3.1)"],
"helpText": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.",
"docsDescription": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.",
"executiveText": "Automatically and permanently removes deleted emails after a specified number of days, helping manage storage costs and ensuring compliance with data retention policies. This prevents accumulation of unnecessary deleted items while maintaining a reasonable recovery window for accidentally deleted emails.",
@@ -3057,7 +3066,7 @@
{
"name": "standards.PhishingSimulations",
"cat": "Defender Standards",
- "tag": [],
+ "tag": ["SMB1001 (1.11)", "SMB1001 (5.1)"],
"helpText": "This creates a phishing simulation policy that enables phishing simulations for the entire tenant.",
"addedComponent": [
{
@@ -4090,7 +4099,7 @@
{
"name": "standards.intuneDeviceRegLocalAdmins",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.4.3)", "CIS M365 6.0.1 (5.1.4.4)"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.3)", "CIS M365 6.0.1 (5.1.4.4)", "SMB1001 (2.2)"],
"helpText": "Controls whether users who register Microsoft Entra joined devices are granted local administrator rights on those devices and if Global Administrators are added as local admins.",
"docsDescription": "Configures the Device Registration Policy local administrator behavior for registering users. When enabled, users who register devices are not granted local administrator rights, you can also configure if Global Administrators are added as local admins.",
"executiveText": "Controls whether employees who enroll devices automatically receive local administrator access. Disabling registering-user admin rights follows least-privilege principles and reduces security risk from over-privileged endpoints.",
@@ -4118,7 +4127,7 @@
{
"name": "standards.intuneRestrictUserDeviceRegistration",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.4.1)"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.1)", "SMB1001 (2.8)"],
"helpText": "Controls whether users can register devices with Entra.",
"docsDescription": "Configures whether users can register devices with Entra. When disabled, users are unable to register devices with Entra.",
"executiveText": "Controls whether employees can register their devices for corporate access. Disabling user device registration prevents unauthorized or unmanaged devices from connecting to company resources, enhancing overall security posture.",
@@ -4153,7 +4162,7 @@
{
"name": "standards.DeletedUserRentention",
"cat": "SharePoint Standards",
- "tag": [],
+ "tag": ["SMB1001 (3.1)"],
"helpText": "Sets the retention period for deleted users OneDrive to the specified period of time. The default is 30 days.",
"docsDescription": "When a OneDrive user gets deleted, the personal SharePoint site is saved for selected amount of time that data can be retrieved from it.",
"executiveText": "Preserves departed employees' OneDrive files for a specified period, allowing time to recover important business documents before permanent deletion. This helps prevent data loss while managing storage costs and maintaining compliance with data retention policies.",
@@ -4641,7 +4650,7 @@
{
"name": "standards.DisableUserSiteCreate",
"cat": "SharePoint Standards",
- "tag": [],
+ "tag": ["SMB1001 (2.8)"],
"helpText": "Disables users from creating new SharePoint sites",
"docsDescription": "Disables standard users from creating SharePoint sites, also disables the ability to fully create teams",
"executiveText": "Restricts the creation of new SharePoint sites to authorized administrators, preventing uncontrolled proliferation of collaboration spaces and ensuring proper governance. This maintains organized information architecture while requiring approval for new collaborative environments.",
@@ -5348,7 +5357,7 @@
{
"name": "standards.AutopilotProfile",
"cat": "Device Management Standards",
- "tag": [],
+ "tag": ["SMB1001 (2.2)"],
"disabledFeatures": { "report": false, "warn": false, "remediate": false },
"helpText": "Assign the appropriate Autopilot profile to streamline device deployment.",
"docsDescription": "This standard allows the deployment of Autopilot profiles to devices, including settings such as unique name templates, language options, and local admin privileges.",
@@ -5448,6 +5457,17 @@
"disabledFeatures": { "report": false, "warn": false, "remediate": false },
"impact": "High Impact",
"addedDate": "2023-12-30",
+ "tag": [
+ "SMB1001 (1.2)",
+ "SMB1001 (1.3)",
+ "SMB1001 (1.4)",
+ "SMB1001 (1.8)",
+ "SMB1001 (1.9)",
+ "SMB1001 (1.10)",
+ "SMB1001 (1.12)",
+ "SMB1001 (2.2)",
+ "SMB1001 (4.7)"
+ ],
"helpText": "Deploy and manage Intune templates across devices.",
"executiveText": "Deploys standardized device management configurations across all corporate devices, ensuring consistent security policies, application settings, and compliance requirements. This template-based approach streamlines device management while maintaining uniform security standards across the organization.",
"addedComponent": [
@@ -5536,6 +5556,15 @@
"impact": "High Impact",
"impactColour": "info",
"addedDate": "2026-01-02",
+ "tag": [
+ "SMB1001 (1.2)",
+ "SMB1001 (1.3)",
+ "SMB1001 (1.4)",
+ "SMB1001 (1.8)",
+ "SMB1001 (1.9)",
+ "SMB1001 (1.10)",
+ "SMB1001 (1.12)"
+ ],
"helpText": "Deploy and maintain Intune reusable settings templates that can be referenced by multiple policies.",
"executiveText": "Creates and keeps reusable Intune settings templates consistent so common firewall and configuration blocks can be reused across many policies.",
"addedComponent": [
@@ -5615,7 +5644,11 @@
"CIS M365 6.0.1 (5.2.2.9)",
"CIS M365 6.0.1 (5.2.2.10)",
"CIS M365 6.0.1 (5.2.2.11)",
- "CIS M365 6.0.1 (5.2.2.12)"
+ "CIS M365 6.0.1 (5.2.2.12)",
+ "SMB1001 (2.5)",
+ "SMB1001 (2.6)",
+ "SMB1001 (2.8)",
+ "SMB1001 (2.9)"
],
"helpText": "Manage conditional access policies for better security.",
"executiveText": "Deploys standardized conditional access policies that automatically enforce security requirements based on user location, device compliance, and risk factors. These templates ensure consistent security controls across the organization while enabling secure access to business resources.",
From 8469fae40c2c72ea5448041b6cbedc20c3cea477 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 6 May 2026 02:05:36 +0800
Subject: [PATCH 107/181] deviations count
---
src/pages/tenant/standards/alignment/index.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/pages/tenant/standards/alignment/index.js b/src/pages/tenant/standards/alignment/index.js
index 45238be2960a..e81ce99d92e7 100644
--- a/src/pages/tenant/standards/alignment/index.js
+++ b/src/pages/tenant/standards/alignment/index.js
@@ -482,7 +482,8 @@ const Page = () => {
'alignmentScore',
'LicenseMissingPercentage',
'combinedAlignmentScore',
- 'currentDeviationsCount',
+ 'pendingDeviationsCount',
+ 'deniedDeviationsCount',
]
}
queryKey={granular ? 'listTenantAlignment-granular' : 'listTenantAlignment'}
From 35eff109de4965790d6ef77ac63603f42fea4913 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 5 May 2026 22:21:50 -0400
Subject: [PATCH 108/181] fix: Support IPv6 in GeoIP lookup
Allow the GeoIP lookup input to accept IPv6 by adding a new "ipAny" validator that checks for either IPv4 or IPv6 (and returns a specific error message). Switch the IP input to use "ipAny" and update its placeholder to "Enter IP Address (IPv4 or IPv6)".
---
src/pages/tenant/tools/geoiplookup/index.js | 4 ++--
src/utils/get-cipp-validator.js | 6 ++++++
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/pages/tenant/tools/geoiplookup/index.js b/src/pages/tenant/tools/geoiplookup/index.js
index 162e93a3b5a1..8f6daa37ad3e 100644
--- a/src/pages/tenant/tools/geoiplookup/index.js
+++ b/src/pages/tenant/tools/geoiplookup/index.js
@@ -102,9 +102,9 @@ const Page = () => {
name="ipAddress"
type="textField"
validators={{
- validate: (value) => getCippValidator(value, "ip"),
+ validate: (value) => getCippValidator(value, "ipAny"),
}}
- placeholder="Enter IP Address"
+ placeholder="Enter IP Address (IPv4 or IPv6)"
required
/>
diff --git a/src/utils/get-cipp-validator.js b/src/utils/get-cipp-validator.js
index f5541e0dc25c..b6cff111b8a3 100644
--- a/src/utils/get-cipp-validator.js
+++ b/src/utils/get-cipp-validator.js
@@ -19,6 +19,12 @@ export const getCippValidator = (value, type) => {
return typeof value === "string" || "This is not a valid string";
case "ip":
return /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/.test(value) || "This is not a valid IP address";
+ case "ipAny":
+ return (
+ /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/.test(value) ||
+ /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$/.test(value) ||
+ "This is not a valid IPv4 or IPv6 address"
+ );
case "ipv4cidr":
return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\/([0-9]|[12][0-9]|3[0-2])$/.test(value) || "This is not a valid IPv4 CIDR";
case "ipv6":
From 8818d4baebbba4be6e6b4f6bf6aaa04b1bf01524 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 6 May 2026 13:43:19 +0800
Subject: [PATCH 109/181] pass utc to api for nice response message
---
src/components/CippComponents/CippUserActions.jsx | 9 +++++++++
.../CippFormPages/CippExchangeSettingsForm.jsx | 9 +++++++++
2 files changed, 18 insertions(+)
diff --git a/src/components/CippComponents/CippUserActions.jsx b/src/components/CippComponents/CippUserActions.jsx
index ba233fda18fd..a434d7925fb3 100644
--- a/src/components/CippComponents/CippUserActions.jsx
+++ b/src/components/CippComponents/CippUserActions.jsx
@@ -179,6 +179,15 @@ const ManageLicensesForm = ({ formControl, tenant }) => {
// Separate component for Out of Office form to avoid hook issues
const OutOfOfficeForm = ({ formControl }) => {
+ // Send the browser's IANA timezone so the API can display local times in the response
+ useEffect(() => {
+ try {
+ formControl.setValue('timezone', Intl.DateTimeFormat().resolvedOptions().timeZone)
+ } catch {
+ // Fallback: leave timezone unset; API will display UTC
+ }
+ }, [])
+
// Watch the Auto Reply State value
const autoReplyState = useWatch({
control: formControl.control,
diff --git a/src/components/CippFormPages/CippExchangeSettingsForm.jsx b/src/components/CippFormPages/CippExchangeSettingsForm.jsx
index ee44517b8c51..0427d3d27d1f 100644
--- a/src/components/CippFormPages/CippExchangeSettingsForm.jsx
+++ b/src/components/CippFormPages/CippExchangeSettingsForm.jsx
@@ -124,6 +124,15 @@ const CippExchangeSettingsForm = (props) => {
...values[type],
};
+ // Include browser timezone for OOO so the API can display local times in the response
+ if (type === "ooo") {
+ try {
+ data.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ } catch {
+ // Fallback: leave timezone unset; API will display UTC
+ }
+ }
+
// Format data for recipient limits
if (type === "recipientLimits") {
data.Identity = currentSettings.Mailbox[0].Identity;
From efa060aab40597ecb76ce4b01c668ff6b7620a1b Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 6 May 2026 16:41:39 +0800
Subject: [PATCH 110/181] Correct support for all tenant mode in the tenant
backup page
---
.../tenant/manage/configuration-backup.js | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/src/pages/tenant/manage/configuration-backup.js b/src/pages/tenant/manage/configuration-backup.js
index 15154dc5e258..2d839fa6466d 100644
--- a/src/pages/tenant/manage/configuration-backup.js
+++ b/src/pages/tenant/manage/configuration-backup.js
@@ -89,8 +89,8 @@ const Page = () => {
queryKey: `BackupTasks-${currentTenant}`,
});
- // Use the actual backup files as the backup data
- const filteredBackupData = Array.isArray(backupList.data) ? backupList.data : [];
+ // Use the actual backup files as the backup data — filter out any null entries
+ const filteredBackupData = Array.isArray(backupList.data) ? backupList.data.filter(Boolean) : [];
// Generate backup tags from actual API response items - use raw items directly
const generateBackupTags = (backup) => {
// Use the Items array directly from the API response without any translation
@@ -173,11 +173,12 @@ const Page = () => {
};
// Filter backup data by selected tenant if in AllTenants view
+ const selectedTenantValue = backupTenantFilter?.value ?? backupTenantFilter;
const tenantFilteredBackupData =
settings.currentTenant === "AllTenants" &&
- backupTenantFilter &&
- backupTenantFilter !== "AllTenants"
- ? filteredBackupData.filter((backup) => backup.TenantFilter === backupTenantFilter)
+ selectedTenantValue &&
+ selectedTenantValue !== "AllTenants"
+ ? filteredBackupData.filter((backup) => backup.TenantFilter === selectedTenantValue)
: filteredBackupData;
const backupDisplayItems = tenantFilteredBackupData.map((backup, index) => ({
@@ -188,7 +189,7 @@ const Page = () => {
tags: generateBackupTags(backup),
}));
- // Process existing backup configuration, find tenantFilter. by comparing settings.currentTenant with Tenant.value
+ // Process existing backup configuration
const currentConfig = Array.isArray(existingBackupConfig.data)
? existingBackupConfig.data.find(
(tenant) =>
@@ -383,8 +384,9 @@ const Page = () => {
No Backup Configuration
No backup schedule is currently configured for{" "}
- {settings.currentTenant === "AllTenants" ? "any tenant" : settings.currentTenant}.
- Click "Add Backup Schedule" to create an automated backup configuration.
+ {settings.currentTenant === "AllTenants" ? "AllTenants" : settings.currentTenant}.
+ Click "Add Backup Schedule" to create an automated backup configuration that will apply to all tenants.
+ A tenant specific backup can exist alongside a global backup, and will run according to its own schedule.
)}
From f0b54687609d040e808a19d7546cd8e38312cf1a Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 6 May 2026 16:54:09 +0800
Subject: [PATCH 111/181] Fix removing row in bulk add user removing the wrong
row
---
src/components/CippComponents/CippBulkUserDrawer.jsx | 4 +++-
src/components/CippWizard/CippWizardCSVImport.jsx | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/components/CippComponents/CippBulkUserDrawer.jsx b/src/components/CippComponents/CippBulkUserDrawer.jsx
index 53d4317c07be..8ab4c63681eb 100644
--- a/src/components/CippComponents/CippBulkUserDrawer.jsx
+++ b/src/components/CippComponents/CippBulkUserDrawer.jsx
@@ -94,7 +94,9 @@ export const CippBulkUserDrawer = ({
const handleRemoveItem = (row) => {
if (row === undefined) return false;
const currentData = formControl.getValues("bulkUser") || [];
- const index = currentData.findIndex((item) => item === row);
+ const rowKey = JSON.stringify(row);
+ const index = currentData.findIndex((item) => JSON.stringify(item) === rowKey);
+ if (index === -1) return false;
const newData = [...currentData];
newData.splice(index, 1);
formControl.setValue("bulkUser", newData, { shouldValidate: true });
diff --git a/src/components/CippWizard/CippWizardCSVImport.jsx b/src/components/CippWizard/CippWizardCSVImport.jsx
index 80983ad4f549..6d1e11942eb7 100644
--- a/src/components/CippWizard/CippWizardCSVImport.jsx
+++ b/src/components/CippWizard/CippWizardCSVImport.jsx
@@ -31,7 +31,9 @@ export const CippWizardCSVImport = (props) => {
const handleRemoveItem = (row) => {
if (row === undefined) return false;
- const index = tableData?.findIndex((item) => item === row);
+ const rowKey = JSON.stringify(row);
+ const index = tableData?.findIndex((item) => JSON.stringify(item) === rowKey);
+ if (index === -1) return false;
const newTableData = [...tableData];
newTableData.splice(index, 1);
setTableData(newTableData);
From 68331c42efd471e1f8501ee6043e580997e11ac4 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 6 May 2026 17:07:03 +0800
Subject: [PATCH 112/181] Update CippWizardCSVImport.jsx
---
src/components/CippWizard/CippWizardCSVImport.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/CippWizard/CippWizardCSVImport.jsx b/src/components/CippWizard/CippWizardCSVImport.jsx
index 6d1e11942eb7..9d12eb088874 100644
--- a/src/components/CippWizard/CippWizardCSVImport.jsx
+++ b/src/components/CippWizard/CippWizardCSVImport.jsx
@@ -160,4 +160,4 @@ export const CippWizardCSVImport = (props) => {
/>
);
-};
\ No newline at end of file
+};
From 0ac68abe5211c160f79dc0cbd0ec5c471083d7e7 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Wed, 6 May 2026 12:43:58 +0200
Subject: [PATCH 113/181] public group standard
---
src/data/standards.json | 119 ++++++++++++++++++++++++++++++++++++----
1 file changed, 108 insertions(+), 11 deletions(-)
diff --git a/src/data/standards.json b/src/data/standards.json
index 124ac1b3b3a9..cb8334bbe4ae 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -414,7 +414,15 @@
{
"name": "standards.AuthMethodsSettings",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.2.3.6)", "EIDSCA.AG01", "EIDSCA.AG02", "EIDSCA.AG03", "EIDSCAAG02", "EIDSCAAG03", "SMB1001 (2.8)"],
+ "tag": [
+ "CIS M365 6.0.1 (5.2.3.6)",
+ "EIDSCA.AG01",
+ "EIDSCA.AG02",
+ "EIDSCA.AG03",
+ "EIDSCAAG02",
+ "EIDSCAAG03",
+ "SMB1001 (2.8)"
+ ],
"helpText": "Configures the report suspicious activity settings and system credential preferences in the authentication methods policy.",
"docsDescription": "Controls the authentication methods policy settings for reporting suspicious activity and system credential preferences. These settings help enhance the security of authentication in your organization.",
"executiveText": "Configures security settings that allow users to report suspicious login attempts and manages how the system handles authentication credentials. This enhances overall security by enabling early detection of potential security threats and optimizing authentication processes.",
@@ -822,7 +830,13 @@
{
"name": "standards.DisableTenantCreation",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.2.3)", "CISA (MS.AAD.6.1v1)", "ZTNA21772", "ZTNA21787", "SMB1001 (2.8)"],
+ "tag": [
+ "CIS M365 6.0.1 (5.1.2.3)",
+ "CISA (MS.AAD.6.1v1)",
+ "ZTNA21772",
+ "ZTNA21787",
+ "SMB1001 (2.8)"
+ ],
"helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles.",
"docsDescription": "Users by default are allowed to create M365 tenants. This disables that so only admins can create new M365 tenants.",
"executiveText": "Prevents regular employees from creating new Microsoft 365 organizations, ensuring all new tenants are properly managed and controlled by IT administrators. This prevents unauthorized shadow IT environments and maintains centralized governance over Microsoft 365 resources.",
@@ -983,7 +997,13 @@
{
"name": "standards.DisableSecurityGroupUsers",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.3.2)", "CISA (MS.AAD.20.1v1)", "NIST CSF 2.0 (PR.AA-05)", "ZTNA21868", "SMB1001 (2.8)"],
+ "tag": [
+ "CIS M365 6.0.1 (5.1.3.2)",
+ "CISA (MS.AAD.20.1v1)",
+ "NIST CSF 2.0 (PR.AA-05)",
+ "ZTNA21868",
+ "SMB1001 (2.8)"
+ ],
"helpText": "Completely disables the creation of security groups by users. This also breaks the ability to manage groups themselves, or create Teams",
"executiveText": "Restricts the creation of security groups to IT administrators only, preventing employees from creating unauthorized access groups that could bypass security controls. This ensures proper governance of access permissions and maintains centralized control over who can access what resources.",
"addedComponent": [],
@@ -1111,7 +1131,14 @@
{
"name": "standards.GuestInvite",
"cat": "Entra (AAD) Standards",
- "tag": ["CISA (MS.AAD.18.1v1)", "EIDSCA.AP04", "EIDSCA.AP07", "EIDSCAAP04", "SMB1001 (2.8)"],
+ "tag": [
+ "CISA (MS.AAD.18.1v1)",
+ "EIDSCA.AP04",
+ "EIDSCA.AP07",
+ "EIDSCAAP04",
+ "SMB1001 (2.8)",
+ "ICS M365 6.0.1 (5.1.6.3)"
+ ],
"helpText": "This setting controls who can invite guests to your directory to collaborate on resources secured by your company, such as SharePoint sites or Azure resources.",
"executiveText": "Controls who within the organization can invite external partners and vendors to access company resources, ensuring proper oversight of external access while enabling necessary business collaboration. This helps maintain security while supporting partnership and vendor relationships.",
"addedComponent": [
@@ -1198,7 +1225,15 @@
{
"name": "standards.DisableSMS",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.2.3.5)", "EIDSCA.AS04", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAS04", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
+ "tag": [
+ "CIS M365 6.0.1 (5.2.3.5)",
+ "EIDSCA.AS04",
+ "NIST CSF 2.0 (PR.AA-03)",
+ "EIDSCAAS04",
+ "SMB1001 (2.5)",
+ "SMB1001 (2.6)",
+ "SMB1001 (2.9)"
+ ],
"helpText": "This blocks users from using SMS as an MFA method. If a user only has SMS as a MFA method, they will be unable to log in.",
"docsDescription": "Disables SMS as an MFA method for the tenant. If a user only has SMS as a MFA method, they will be unable to sign in.",
"executiveText": "Disables SMS text messages as a multi-factor authentication method due to security vulnerabilities like SIM swapping attacks. This forces users to adopt more secure authentication methods like authenticator apps or hardware tokens, significantly improving account security.",
@@ -1213,7 +1248,15 @@
{
"name": "standards.DisableVoice",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.2.3.5)", "EIDSCA.AV01", "NIST CSF 2.0 (PR.AA-03)", "EIDSCAAV01", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
+ "tag": [
+ "CIS M365 6.0.1 (5.2.3.5)",
+ "EIDSCA.AV01",
+ "NIST CSF 2.0 (PR.AA-03)",
+ "EIDSCAAV01",
+ "SMB1001 (2.5)",
+ "SMB1001 (2.6)",
+ "SMB1001 (2.9)"
+ ],
"helpText": "This blocks users from using Voice call as an MFA method. If a user only has Voice as a MFA method, they will be unable to log in.",
"docsDescription": "Disables Voice call as an MFA method for the tenant. If a user only has Voice call as a MFA method, they will be unable to sign in.",
"executiveText": "Disables voice call authentication due to security vulnerabilities and social engineering risks. This forces users to adopt more secure authentication methods like authenticator apps, improving overall account security by eliminating phone-based attack vectors.",
@@ -1228,7 +1271,13 @@
{
"name": "standards.DisableEmail",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.2.3.7)", "NIST CSF 2.0 (PR.AA-03)", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
+ "tag": [
+ "CIS M365 6.0.1 (5.2.3.7)",
+ "NIST CSF 2.0 (PR.AA-03)",
+ "SMB1001 (2.5)",
+ "SMB1001 (2.6)",
+ "SMB1001 (2.9)"
+ ],
"helpText": "This blocks users from using email as an MFA method. This disables the email OTP option for guest users, and instead prompts them to create a Microsoft account.",
"executiveText": "Disables email-based authentication codes due to security concerns with email interception and account compromise. This forces users to adopt more secure authentication methods, particularly affecting guest users who must use stronger verification methods.",
"addedComponent": [],
@@ -2500,7 +2549,12 @@
{
"name": "standards.DisableSharedMailbox",
"cat": "Exchange Standards",
- "tag": ["CIS M365 6.0.1 (1.2.2)", "CISA (MS.AAD.10.1v1)", "NIST CSF 2.0 (PR.AA-01)", "SMB1001 (2.3)"],
+ "tag": [
+ "CIS M365 6.0.1 (1.2.2)",
+ "CISA (MS.AAD.10.1v1)",
+ "NIST CSF 2.0 (PR.AA-01)",
+ "SMB1001 (2.3)"
+ ],
"helpText": "Blocks login for all accounts that are marked as a shared mailbox. This is Microsoft best practice to prevent direct logons to shared mailboxes.",
"docsDescription": "Shared mailboxes can be directly logged into if the password is reset, this presents a security risk as do all shared login credentials. Microsoft's recommendation is to disable the user account for shared mailboxes. It would be a good idea to review the sign-in reports to establish potential impact.",
"executiveText": "Prevents direct login to shared mailbox accounts (like info@company.com), ensuring they can only be accessed through authorized users' accounts. This security measure eliminates the risk of shared passwords and unauthorized access while maintaining proper access control and audit trails.",
@@ -4295,7 +4349,12 @@
{
"name": "standards.SPDisallowInfectedFiles",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 6.0.1 (7.3.1)", "CISA (MS.SPO.3.1v1)", "NIST CSF 2.0 (DE.CM-09)", "ZTNA21817"],
+ "tag": [
+ "CIS M365 6.0.1 (7.3.1)",
+ "CISA (MS.SPO.3.1v1)",
+ "NIST CSF 2.0 (DE.CM-09)",
+ "ZTNA21817"
+ ],
"helpText": "Ensure Office 365 SharePoint infected files are disallowed for download",
"executiveText": "Prevents employees from downloading files that have been identified as containing malware or viruses from SharePoint and OneDrive. This security measure protects against malware distribution through file sharing while maintaining access to clean, safe documents.",
"addedComponent": [],
@@ -4723,7 +4782,12 @@
{
"name": "standards.unmanagedSync",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 6.0.1 (7.3.2)", "CISA (MS.SPO.2.1v1)", "NIST CSF 2.0 (PR.AA-05)", "ZTNA24824"],
+ "tag": [
+ "CIS M365 6.0.1 (7.3.2)",
+ "CISA (MS.SPO.2.1v1)",
+ "NIST CSF 2.0 (PR.AA-05)",
+ "ZTNA24824"
+ ],
"helpText": "Entra P1 required. Block or limit access to SharePoint and OneDrive content from unmanaged devices (those not hybrid AD joined or compliant in Intune). These controls rely on Microsoft Entra Conditional Access policies and can take up to 24 hours to take effect.",
"docsDescription": "Entra P1 required. Block or limit access to SharePoint and OneDrive content from unmanaged devices (those not hybrid AD joined or compliant in Intune). These controls rely on Microsoft Entra Conditional Access policies and can take up to 24 hours to take effect. 0 = Allow Access, 1 = Allow limited, web-only access, 2 = Block access. All information about this can be found in Microsofts documentation [here.](https://learn.microsoft.com/en-us/sharepoint/control-access-from-unmanaged-devices)",
"executiveText": "Restricts access to company files from personal or unmanaged devices, ensuring corporate data can only be accessed from properly secured and monitored devices. This critical security control prevents data leaks while allowing controlled access through web browsers when necessary.",
@@ -6543,5 +6607,38 @@
"EXCHANGE_S_ENTERPRISE_GOV",
"EXCHANGE_LITE"
]
+ },
+ {
+ "name": "standards.EnforcePrivateGroups",
+ "cat": "Entra (AAD) Standards",
+ "tag": ["CIS M365 6.0.1 (1.2.1)"],
+ "helpText": "Sets all public Microsoft 365 groups to private automatically. Groups can be excluded by display name keyword.",
+ "docsDescription": "Ensures only organisation-managed or approved public groups exist by automatically switching public Microsoft 365 (Unified) groups to private visibility. Groups whose display name matches any of the configured exclusion keywords are left unchanged. This aligns with CIS M365 6.0.1 benchmark control 1.2.1.",
+ "executiveText": "Enforces private visibility on all Microsoft 365 groups to prevent unauthorised external access to group resources such as Teams, SharePoint sites, and Planner boards. Approved public groups can be excluded by name, ensuring governance while retaining flexibility for intentionally public collaboration spaces.",
+ "addedComponent": [
+ {
+ "type": "autoComplete",
+ "multiple": true,
+ "creatable": true,
+ "required": false,
+ "label": "Exclude groups by display name keyword",
+ "name": "standards.EnforcePrivateGroups.ExcludedGroupNames"
+ }
+ ],
+ "label": "Enforce Private M365 Groups",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2026-05-06",
+ "powershellEquivalent": "Update-MgGroup -GroupId -Visibility Private",
+ "recommendedBy": ["CIS"],
+ "requiredCapabilities": [
+ "SHAREPOINTWAC",
+ "SHAREPOINTSTANDARD",
+ "SHAREPOINTENTERPRISE",
+ "SHAREPOINTENTERPRISE_EDU",
+ "SHAREPOINTENTERPRISE_GOV",
+ "ONEDRIVE_BASIC",
+ "ONEDRIVE_ENTERPRISE"
+ ]
}
-]
\ No newline at end of file
+]
From 27af9a267445323a4567b8d2cf88f573720ec933 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Wed, 6 May 2026 13:13:00 +0200
Subject: [PATCH 114/181] Empty AllowList Standard for CIS
---
src/data/standards.json | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/src/data/standards.json b/src/data/standards.json
index cb8334bbe4ae..645f0aef0fef 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -6640,5 +6640,27 @@
"ONEDRIVE_BASIC",
"ONEDRIVE_ENTERPRISE"
]
+ },
+ {
+ "name": "standards.EmptyFilterIPAllowList",
+ "cat": "Defender Standards",
+ "tag": ["CIS M365 6.0.1 (2.1.12)"],
+ "helpText": "Ensures the connection filter IP allow list is not used. IPs on this list bypass spam, spoof, and authentication checks.",
+ "docsDescription": "IPs on the connection filter allow list bypass spam, spoof, and authentication checks. CIS recommends keeping this list empty to ensure all inbound email is properly scanned. This standard checks that the IPAllowList on the Default hosted connection filter policy is empty and can remediate by clearing it.",
+ "executiveText": "Ensures the Exchange Online connection filter IP allow list is empty, preventing any IP addresses from bypassing spam filtering, spoofing checks, and sender authentication. Keeping this list empty ensures all inbound email undergoes full security scanning, reducing the risk of phishing and malware delivery through trusted-but-compromised sources.",
+ "addedComponent": [],
+ "label": "Ensure connection filter IP allow list is empty",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2026-05-06",
+ "powershellEquivalent": "Set-HostedConnectionFilterPolicy -Identity Default -IPAllowList @()",
+ "recommendedBy": ["CIS"],
+ "requiredCapabilities": [
+ "EXCHANGE_S_STANDARD",
+ "EXCHANGE_S_ENTERPRISE",
+ "EXCHANGE_S_STANDARD_GOV",
+ "EXCHANGE_S_ENTERPRISE_GOV",
+ "EXCHANGE_LITE"
+ ]
}
]
From 4b2c9094df00dea443f4eb71bac39efab48f69f9 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Wed, 6 May 2026 13:23:19 +0200
Subject: [PATCH 115/181] add teasm ZAP standard
---
src/data/standards.json | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/src/data/standards.json b/src/data/standards.json
index 645f0aef0fef..c358c4382db3 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -6662,5 +6662,27 @@
"EXCHANGE_S_ENTERPRISE_GOV",
"EXCHANGE_LITE"
]
+ },
+ {
+ "name": "standards.TeamsZAP",
+ "cat": "Defender Standards",
+ "tag": ["CIS M365 6.0.1 (2.4.4)"],
+ "helpText": "Ensures Zero-hour auto purge (ZAP) is enabled for Microsoft Teams, automatically removing malicious messages after delivery.",
+ "docsDescription": "Zero-hour auto purge (ZAP) for Microsoft Teams retroactively detects and neutralises malicious messages that have already been delivered in Teams chats. Enabling ZAP ensures that phishing, malware, and high confidence phishing messages are automatically purged even after initial delivery, aligning with CIS M365 6.0.1 benchmark control 2.4.4.",
+ "executiveText": "Enables Zero-hour auto purge for Microsoft Teams to automatically detect and remove malicious messages after delivery. This provides an additional layer of protection against phishing and malware that may bypass initial scanning, ensuring threats are neutralised even after they reach users.",
+ "addedComponent": [],
+ "label": "Ensure Zero-hour auto purge for Microsoft Teams is on",
+ "impact": "Low Impact",
+ "impactColour": "info",
+ "addedDate": "2026-05-06",
+ "powershellEquivalent": "Set-TeamsProtectionPolicy -Identity 'Teams Protection Policy' -ZapEnabled $true",
+ "recommendedBy": ["CIS"],
+ "requiredCapabilities": [
+ "EXCHANGE_S_STANDARD",
+ "EXCHANGE_S_ENTERPRISE",
+ "EXCHANGE_S_STANDARD_GOV",
+ "EXCHANGE_S_ENTERPRISE_GOV",
+ "EXCHANGE_LITE"
+ ]
}
]
From cdcde9be387d828e86ffa86425945fe3732effe8 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Wed, 6 May 2026 14:35:35 +0200
Subject: [PATCH 116/181] standards improvements
---
src/data/standards.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/data/standards.json b/src/data/standards.json
index c358c4382db3..c78518b01448 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -5786,6 +5786,7 @@
"label": "Group Template",
"multi": true,
"cat": "Templates",
+ "tag": ["CIS M365 6.0.1 (5.1.3.1)"],
"disabledFeatures": { "report": true, "warn": true, "remediate": false },
"impact": "Medium Impact",
"addedDate": "2023-12-30",
From 4832593df8e0bf85f407ce3e5e5fa5f075144a59 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Wed, 6 May 2026 14:40:14 +0200
Subject: [PATCH 117/181] Ensure that collaboration invitations are sent to
allowed domains only
---
src/data/standards.json | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/src/data/standards.json b/src/data/standards.json
index c78518b01448..7eb8d38c164e 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -6685,5 +6685,28 @@
"EXCHANGE_S_ENTERPRISE_GOV",
"EXCHANGE_LITE"
]
+ },
+ {
+ "name": "standards.CollaborationDomainRestriction",
+ "cat": "Entra (AAD) Standards",
+ "tag": ["CIS M365 6.0.1 (5.1.6.1)"],
+ "helpText": "Restricts B2B collaboration invitations to a specified list of allowed domains. If no domains are provided, the standard will alert and report on whether any domain restrictions are currently configured.",
+ "docsDescription": "By default, Microsoft Entra ID allows collaboration invitations to be sent to any external domain. CIS recommends restricting B2B collaboration invitations to only approved domains to reduce the risk of data exfiltration and unauthorized access. This standard checks the B2B management policy for an allow list of domains and can remediate by setting the allowed domains list.",
+ "executiveText": "Restricts external collaboration invitations to approved domains only, preventing users from sharing data with unapproved external organizations. This reduces the risk of data exfiltration and ensures that collaboration occurs only with trusted business partners.",
+ "addedComponent": [
+ {
+ "type": "textField",
+ "name": "standards.CollaborationDomainRestriction.allowedDomains",
+ "label": "Allowed domains (comma separated)",
+ "required": false,
+ "placeholder": "contoso.com, fabrikam.com"
+ }
+ ],
+ "label": "Restrict collaboration invitations to allowed domains only",
+ "impact": "Medium Impact",
+ "impactColour": "warning",
+ "addedDate": "2026-05-06",
+ "powershellEquivalent": "Graph API PATCH https://graph.microsoft.com/beta/policies/b2bManagementPolicies/default",
+ "recommendedBy": ["CIS"]
}
]
From 344acd1a2370f207e245de7869fd0c81f6ddda69 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Thu, 7 May 2026 11:37:21 +0800
Subject: [PATCH 118/181] Enable reporting for standard AutoAddProxy
---
src/data/standards.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/data/standards.json b/src/data/standards.json
index 7eb8d38c164e..6edccf01a6eb 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -2230,7 +2230,7 @@
"addedDate": "2025-02-07",
"powershellEquivalent": "Set-Mailbox -EmailAddresses @{add=$EmailAddress}",
"recommendedBy": [],
- "disabledFeatures": { "report": true, "warn": true, "remediate": false }
+ "disabledFeatures": { "report": false, "warn": true, "remediate": false }
},
{
"name": "standards.DisableAdditionalStorageProviders",
From 43bec6731527eb7396c0a3cb69dd4459e0b32f06 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Thu, 7 May 2026 12:00:18 +0200
Subject: [PATCH 119/181] tag and standard updates
---
.../CippStandards/CippStandardAccordion.jsx | 5 +-
.../CippStandards/CippStandardDialog.jsx | 6 +-
.../CippTestDetailOffCanvas.jsx | 54 +-
src/data/standards.json | 505 +++++++++++++++---
.../tenant/standards/templates/template.jsx | 6 +-
5 files changed, 472 insertions(+), 104 deletions(-)
diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx
index 1a2811d462c3..ee2d86b3f78c 100644
--- a/src/components/CippStandards/CippStandardAccordion.jsx
+++ b/src/components/CippStandards/CippStandardAccordion.jsx
@@ -432,7 +432,10 @@ const CippStandardAccordion = ({
(standard.cat && standard.cat.toLowerCase().includes(searchLower)) ||
(standard.tag &&
Array.isArray(standard.tag) &&
- standard.tag.some((tag) => tag.toLowerCase().includes(searchLower)));
+ standard.tag.some((tag) => tag.toLowerCase().includes(searchLower))) ||
+ (standard.appliesToTest &&
+ Array.isArray(standard.appliesToTest) &&
+ standard.appliesToTest.some((testId) => testId.toLowerCase().includes(searchLower)));
const isConfigured = _.get(configuredState, standardName);
const matchesFilter =
diff --git a/src/components/CippStandards/CippStandardDialog.jsx b/src/components/CippStandards/CippStandardDialog.jsx
index 6ebe6362930c..4761ffcab94f 100644
--- a/src/components/CippStandards/CippStandardDialog.jsx
+++ b/src/components/CippStandards/CippStandardDialog.jsx
@@ -788,7 +788,11 @@ const CippStandardDialog = ({
standard.label.toLowerCase().includes(localSearchQuery.toLowerCase()) ||
standard.helpText.toLowerCase().includes(localSearchQuery.toLowerCase()) ||
(standard.tag &&
- standard.tag.some((tag) => tag.toLowerCase().includes(localSearchQuery.toLowerCase())));
+ standard.tag.some((tag) => tag.toLowerCase().includes(localSearchQuery.toLowerCase()))) ||
+ (standard.appliesToTest &&
+ standard.appliesToTest.some((testId) =>
+ testId.toLowerCase().includes(localSearchQuery.toLowerCase())
+ ));
// Category filter
const matchesCategory =
diff --git a/src/components/CippTestDetail/CippTestDetailOffCanvas.jsx b/src/components/CippTestDetail/CippTestDetailOffCanvas.jsx
index 64abc9b224e4..990ed7472a08 100644
--- a/src/components/CippTestDetail/CippTestDetailOffCanvas.jsx
+++ b/src/components/CippTestDetail/CippTestDetailOffCanvas.jsx
@@ -49,21 +49,15 @@ const getImpactColor = (impact) => {
}
};
-const checkCIPPStandardAvailable = (testName) => {
- if (!testName) return "No";
- console.log(testName);
- // Check if any standard's tag array contains a reference to this test
- const hasStandard = standardsData.some((standard) => {
- if (!standard.tag || !Array.isArray(standard.tag)) return false;
- // Check if any tag matches the test name or contains it
- return standard.tag.some((tag) => {
- const tagLower = tag.toLowerCase();
- const testLower = testName.toLowerCase();
- return tagLower.includes(testLower) || testLower.includes(tagLower);
- });
- });
-
- return hasStandard ? "Yes" : "No";
+// Find every CIPP standard whose appliesToTest array includes this test's RowKey.
+// appliesToTest stores TestIds (e.g. "CIS_1_1_1", "ZTNA21772", "SMB1001_2_5"); the
+// row's RowKey is the same TestId, so this is an exact lookup.
+const getMatchingStandards = (testName) => {
+ if (!testName) return [];
+ return standardsData.filter(
+ (standard) =>
+ Array.isArray(standard.appliesToTest) && standard.appliesToTest.includes(testName)
+ );
};
// Shared markdown styling for consistent rendering
@@ -141,6 +135,8 @@ export const CippTestDetailOffCanvas = ({ row }) => {
const shouldRenderCustomJson = hasRawCustomData && row.ReturnType === "JSON" && !row.ResultMarkdown;
const shouldRenderCustomMarkdown = hasRawCustomData && !shouldRenderCustomJson && !row.ResultMarkdown;
+ const matchingStandards = getMatchingStandards(row.RowKey);
+
return (
@@ -235,8 +231,8 @@ export const CippTestDetailOffCanvas = ({ row }) => {
0 ? `Yes (${matchingStandards.length})` : "No"}
+ color={matchingStandards.length > 0 ? "success" : "default"}
size="small"
/>
@@ -246,6 +242,30 @@ export const CippTestDetailOffCanvas = ({ row }) => {
+ {matchingStandards.length > 0 && (
+
+
+
+ CIPP Standards that satisfy this test
+
+
+ The following CIPP standards can be deployed to remediate or enforce this test.
+
+
+ {matchingStandards.map((standard) => (
+
+ ))}
+
+
+
+ )}
+
{(row.ResultMarkdown || shouldRenderCustomJson || shouldRenderCustomMarkdown) && (
diff --git a/src/data/standards.json b/src/data/standards.json
index 6edccf01a6eb..39116e6cdc2b 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -129,9 +129,12 @@
"tag": [
"CIS M365 6.0.1 (3.1.1)",
"mip_search_auditlog",
- "NIST CSF 2.0 (DE.CM-09)",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
+ "appliesToTest": [
"CISAMSEXO171",
- "CISAMSEXO173"
+ "CISAMSEXO173",
+ "CIS_3_1_1"
],
"helpText": "Enables the Unified Audit Log for tracking and auditing activities. Also runs Enable-OrganizationCustomization if necessary.",
"executiveText": "Activates comprehensive activity logging across Microsoft 365 services to track user actions, system changes, and security events. This provides essential audit trails for compliance requirements, security investigations, and regulatory reporting.",
@@ -154,6 +157,7 @@
"name": "standards.RestrictThirdPartyStorageServices",
"cat": "Global Standards",
"tag": ["CIS M365 6.0.1 (1.3.7)"],
+ "appliesToTest": ["CIS_1_3_7"],
"helpText": "Restricts third-party storage services in Microsoft 365 on the web by managing the Microsoft 365 on the web service principal. This disables integrations with services like Dropbox, Google Drive, Box, and other third-party storage providers.",
"docsDescription": "Third-party storage can be enabled for users in Microsoft 365, allowing them to store and share documents using services such as Dropbox, alongside OneDrive and team sites. This standard ensures Microsoft 365 on the web third-party storage services are restricted by creating and disabling the Microsoft 365 on the web service principal (appId: c1f33bc0-bdb4-4248-ba9b-096807ddb43e). By using external storage services an organization may increase the risk of data breaches and unauthorized access to confidential information. Additionally, third-party services may not adhere to the same security standards as the organization, making it difficult to maintain data privacy and security. Impact is highly dependent upon current practices - if users do not use other storage providers, then minimal impact is likely. However, if users regularly utilize providers outside of the tenant this will affect their ability to continue to do so.",
"executiveText": "Prevents employees from using external cloud storage services like Dropbox, Google Drive, and Box within Microsoft 365, reducing data security risks and ensuring all company data remains within controlled corporate systems. This helps maintain data governance and prevents potential data leaks to unauthorized platforms.",
@@ -272,6 +276,7 @@
"name": "standards.EnableCustomerLockbox",
"cat": "Global Standards",
"tag": ["CIS M365 6.0.1 (1.3.6)", "CustomerLockBoxEnabled"],
+ "appliesToTest": ["CIS_1_3_6"],
"helpText": "**Requires Entra ID P2.** Enables Customer Lockbox that offers an approval process for Microsoft support to access organization data",
"docsDescription": "**Requires Entra ID P2.** Customer Lockbox ensures that Microsoft can't access your content to do service operations without your explicit approval. Customer Lockbox ensures only authorized requests allow access to your organizations data.",
"executiveText": "Requires explicit organizational approval before Microsoft support staff can access company data for service operations. This provides an additional layer of data protection and ensures the organization maintains control over who can access sensitive business information, even during technical support scenarios.",
@@ -337,10 +342,15 @@
"EIDSCA.ST08",
"EIDSCA.ST09",
"NIST CSF 2.0 (PR.AA-05)",
+ "SMB1001 (2.8)"
+ ],
+ "appliesToTest": [
+ "CIS_5_1_6_2",
"EIDSCAAP07",
+ "EIDSCAAP14",
"EIDSCAST08",
"EIDSCAST09",
- "SMB1001 (2.8)"
+ "SMB1001_2_8"
],
"helpText": "Disables Guest access to enumerate directory objects. This prevents guest users from seeing other users or guests in the directory.",
"docsDescription": "Sets it so guests can view only their own user profile. Permission to view other users isn't allowed. Also restricts guest users from seeing the membership of groups they're in. See exactly what get locked down in the [Microsoft documentation.](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions)",
@@ -356,7 +366,12 @@
{
"name": "standards.DisableBasicAuthSMTP",
"cat": "Global Standards",
- "tag": ["CIS M365 6.0.1 (6.5.4)", "NIST CSF 2.0 (PR.IR-01)", "ZTNA21799", "CISAMSEXO51"],
+ "tag": ["CIS M365 6.0.1 (6.5.4)", "NIST CSF 2.0 (PR.IR-01)"],
+ "appliesToTest": [
+ "CISAMSEXO51",
+ "CIS_6_5_4",
+ "ZTNA21799"
+ ],
"helpText": "Disables SMTP AUTH organization-wide, impacting POP and IMAP clients that rely on SMTP for sending emails. Default for new tenants. For more information, see the [Microsoft documentation](https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission)",
"docsDescription": "Disables tenant-wide SMTP basic authentication, including for all explicitly enabled users, impacting POP and IMAP clients that rely on SMTP for sending emails. For more information, see the [Microsoft documentation](https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission).",
"executiveText": "Disables outdated email authentication methods that are vulnerable to security attacks, forcing applications and devices to use modern, more secure authentication protocols. This reduces the risk of email-based security breaches and credential theft.",
@@ -381,7 +396,10 @@
"tag": [
"CIS M365 6.0.1 (1.3.2)",
"spo_idle_session_timeout",
- "NIST CSF 2.0 (PR.AA-03)",
+ "NIST CSF 2.0 (PR.AA-03)"
+ ],
+ "appliesToTest": [
+ "CIS_1_3_2",
"ZTNA21813",
"ZTNA21814",
"ZTNA21815"
@@ -419,9 +437,14 @@
"EIDSCA.AG01",
"EIDSCA.AG02",
"EIDSCA.AG03",
+ "SMB1001 (2.8)"
+ ],
+ "appliesToTest": [
+ "CIS_5_2_3_6",
+ "EIDSCAAG01",
"EIDSCAAG02",
"EIDSCAAG03",
- "SMB1001 (2.8)"
+ "SMB1001_2_8"
],
"helpText": "Configures the report suspicious activity settings and system credential preferences in the authentication methods policy.",
"docsDescription": "Controls the authentication methods policy settings for reporting suspicious activity and system credential preferences. These settings help enhance the security of authentication in your organization.",
@@ -464,7 +487,11 @@
{
"name": "standards.AdminSSPR",
"cat": "Entra (AAD) Standards",
- "tag": ["EIDSCA.AP01", "EIDSCAAP01", "ZTNA21842"],
+ "tag": ["EIDSCA.AP01"],
+ "appliesToTest": [
+ "EIDSCAAP01",
+ "ZTNA21842"
+ ],
"helpText": "Controls whether administrators are allowed to use Self-Service Password Reset through the Microsoft Entra authorization policy.",
"docsDescription": "Configures the allowedToUseSSPR property on the Microsoft Entra authorization policy. Microsoft documents this property as controlling whether administrators of the tenant can use Self-Service Password Reset. Use this standard to explicitly enable or disable administrator SSPR based on your security policy.",
"executiveText": "Controls whether tenant administrators can reset their own passwords through Self-Service Password Reset. Disabling this capability forces privileged accounts through more controlled recovery processes and reduces the risk of self-service recovery being misused on administrative identities.",
@@ -491,7 +518,8 @@
{
"name": "standards.AuthMethodsPolicyMigration",
"cat": "Entra (AAD) Standards",
- "tag": ["EIDSCAAG01"],
+ "tag": [],
+ "appliesToTest": ["EIDSCAAG01"],
"helpText": "Completes the migration of authentication methods policy to the new format",
"docsDescription": "Sets the authentication methods policy migration state to complete. This is required when migrating from legacy authentication policies to the new unified authentication methods policy.",
"executiveText": "Completes the transition from legacy authentication policies to Microsoft's modern unified authentication methods policy, ensuring the organization benefits from the latest security features and management capabilities. This migration enables enhanced security controls and simplified policy management.",
@@ -562,7 +590,14 @@
{
"name": "standards.laps",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.4.5)", "ZTNA21953", "ZTNA21955", "ZTNA24560", "SMB1001 (2.2)"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.5)", "SMB1001 (2.2)"],
+ "appliesToTest": [
+ "CIS_5_1_4_5",
+ "SMB1001_2_2",
+ "ZTNA21953",
+ "ZTNA21955",
+ "ZTNA24560"
+ ],
"helpText": "Enables the tenant to use LAPS. You must still create a policy for LAPS to be active on all devices. Use the template standards to deploy this by default.",
"docsDescription": "Enables the LAPS functionality on the tenant. Prerequisite for using Windows LAPS via Azure AD.",
"executiveText": "Enables Local Administrator Password Solution (LAPS) capability, which automatically manages and rotates local administrator passwords on company computers. This significantly improves security by preventing the use of shared or static administrator passwords that could be exploited by attackers.",
@@ -585,7 +620,10 @@
"EIDSCA.AM07",
"EIDSCA.AM09",
"EIDSCA.AM10",
- "NIST CSF 2.0 (PR.AA-03)",
+ "NIST CSF 2.0 (PR.AA-03)"
+ ],
+ "appliesToTest": [
+ "CIS_5_2_3_1",
"EIDSCAAM01",
"EIDSCAAM03",
"EIDSCAAM04",
@@ -608,7 +646,8 @@
{
"name": "standards.allowOTPTokens",
"cat": "Entra (AAD) Standards",
- "tag": ["EIDSCA.AM02", "EIDSCAAM02"],
+ "tag": ["EIDSCA.AM02"],
+ "appliesToTest": ["EIDSCAAM02"],
"helpText": "Allows you to use MS authenticator OTP token generator",
"docsDescription": "Allows you to use Microsoft Authenticator OTP token generator. Useful for using the NPS extension as MFA on VPN clients.",
"executiveText": "Enables one-time password generation through Microsoft Authenticator app, providing an additional secure authentication method for employees. This is particularly useful for secure VPN access and other systems requiring multi-factor authentication.",
@@ -624,6 +663,7 @@
"name": "standards.PWcompanionAppAllowedState",
"cat": "Entra (AAD) Standards",
"tag": ["EIDSCA.AM01"],
+ "appliesToTest": ["EIDSCAAM01"],
"helpText": "Sets the state of Authenticator Lite, Authenticator lite is a companion app for passwordless authentication.",
"docsDescription": "Sets the Authenticator Lite state to enabled. This allows users to use the Authenticator Lite built into the Outlook app instead of the full Authenticator app.",
"executiveText": "Enables a simplified authentication experience by allowing users to authenticate directly through Outlook without requiring a separate authenticator app. This improves user convenience while maintaining security standards for passwordless authentication.",
@@ -659,15 +699,20 @@
"EIDSCA.AF05",
"EIDSCA.AF06",
"NIST CSF 2.0 (PR.AA-03)",
+ "SMB1001 (2.5)",
+ "SMB1001 (2.6)",
+ "SMB1001 (2.9)"
+ ],
+ "appliesToTest": [
"EIDSCAAF01",
"EIDSCAAF02",
"EIDSCAAF03",
"EIDSCAAF04",
"EIDSCAAF05",
"EIDSCAAF06",
- "SMB1001 (2.5)",
- "SMB1001 (2.6)",
- "SMB1001 (2.9)"
+ "SMB1001_2_5",
+ "SMB1001_2_6",
+ "SMB1001_2_9"
],
"helpText": "Enables the FIDO2 authenticationMethod for the tenant",
"docsDescription": "Enables FIDO2 capabilities for the tenant. This allows users to use FIDO2 keys like a Yubikey for authentication.",
@@ -684,6 +729,11 @@
"name": "standards.EnableHardwareOAuth",
"cat": "Entra (AAD) Standards",
"tag": ["SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
+ "appliesToTest": [
+ "SMB1001_2_5",
+ "SMB1001_2_6",
+ "SMB1001_2_9"
+ ],
"helpText": "Enables the HardwareOath authenticationMethod for the tenant. This allows you to use hardware tokens for generating 6 digit MFA codes.",
"docsDescription": "Enables Hardware OAuth tokens for the tenant. This allows users to use hardware tokens like a Yubikey for authentication.",
"executiveText": "Enables physical hardware tokens that generate secure authentication codes, providing an alternative to smartphone-based authentication. This is particularly valuable for employees who cannot use mobile devices or require the highest security standards for accessing sensitive systems.",
@@ -699,6 +749,10 @@
"name": "standards.allowOAuthTokens",
"cat": "Entra (AAD) Standards",
"tag": ["EIDSCA.AT01", "EIDSCA.AT02"],
+ "appliesToTest": [
+ "EIDSCAAT01",
+ "EIDSCAAT02"
+ ],
"helpText": "Allows you to use any software OAuth token generator",
"docsDescription": "Enables OTP Software OAuth tokens for the tenant. This allows users to use OTP codes generated via software, like a password manager to be used as an authentication method.",
"executiveText": "Allows employees to use third-party authentication apps and password managers to generate secure login codes, providing flexibility in authentication methods while maintaining security standards. This accommodates diverse user preferences and existing security tools.",
@@ -714,6 +768,7 @@
"name": "standards.FormsPhishingProtection",
"cat": "Global Standards",
"tag": ["CIS M365 6.0.1 (1.3.5)", "Security", "PhishingProtection"],
+ "appliesToTest": ["CIS_1_3_5"],
"helpText": "Enables internal phishing protection for Microsoft Forms to help prevent malicious forms from being created and shared within the organization. This feature scans forms created by internal users for potential phishing content and suspicious patterns.",
"docsDescription": "Enables internal phishing protection for Microsoft Forms by setting the isInOrgFormsPhishingScanEnabled property to true. This security feature helps protect organizations from internal phishing attacks through Microsoft Forms by automatically scanning forms created by internal users for potential malicious content, suspicious links, and phishing patterns. When enabled, Forms will analyze form content and block or flag potentially dangerous forms before they can be shared within the organization.",
"executiveText": "Automatically scans Microsoft Forms created by employees for malicious content and phishing attempts, preventing the creation and distribution of harmful forms within the organization. This protects against both internal threats and compromised accounts that might be used to distribute malicious content.",
@@ -728,7 +783,13 @@
{
"name": "standards.TAP",
"cat": "Entra (AAD) Standards",
- "tag": ["ZTNA21845", "ZTNA21846", "EIDSCAAT01", "EIDSCAAT02"],
+ "tag": [],
+ "appliesToTest": [
+ "EIDSCAAT01",
+ "EIDSCAAT02",
+ "ZTNA21845",
+ "ZTNA21846"
+ ],
"helpText": "Enables TAP and sets the default TAP lifetime to 1 hour. This configuration also allows you to select if a TAP is single use or multi-logon.",
"docsDescription": "Enables Temporary Password generation for the tenant.",
"executiveText": "Enables temporary access passwords that IT administrators can generate for employees who are locked out or need emergency access to systems. These time-limited passwords provide a secure way to restore access without compromising long-term security policies.",
@@ -756,6 +817,7 @@
"name": "standards.PasswordExpireDisabled",
"cat": "Entra (AAD) Standards",
"tag": ["CIS M365 6.0.1 (1.3.1)", "PWAgePolicyNew"],
+ "appliesToTest": ["CIS_1_3_1"],
"helpText": "Disables the expiration of passwords for the tenant by setting the password expiration policy to never expire for any user.",
"docsDescription": "Sets passwords to never expire for tenant, recommended to use in conjunction with secure password requirements.",
"executiveText": "Eliminates mandatory password expiration requirements, allowing employees to keep strong passwords indefinitely rather than forcing frequent changes that often lead to weaker passwords. This modern security approach reduces help desk calls and improves overall password security when combined with multi-factor authentication.",
@@ -772,15 +834,19 @@
"cat": "Entra (AAD) Standards",
"tag": [
"CIS M365 6.0.1 (5.2.3.2)",
- "ZTNA21848",
- "ZTNA21849",
- "ZTNA21850",
+ "SMB1001 (2.1)"
+ ],
+ "appliesToTest": [
+ "CIS_5_2_3_2",
"EIDSCAPR01",
"EIDSCAPR02",
"EIDSCAPR03",
"EIDSCAPR05",
"EIDSCAPR06",
- "SMB1001 (2.1)"
+ "SMB1001_2_1",
+ "ZTNA21848",
+ "ZTNA21849",
+ "ZTNA21850"
],
"helpText": "**Requires Entra ID P1.** Updates and enables the Entra ID custom banned password list with the supplied words. Enter words separated by commas or semicolons. Each word must be 4-16 characters long. Maximum 1,000 words allowed.",
"docsDescription": "Updates and enables the Entra ID custom banned password list with the supplied words. This supplements the global banned password list maintained by Microsoft. The custom list is limited to 1,000 key base terms of 4-16 characters each. Entra ID will [block variations and common substitutions](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-configure-custom-password-protection#configure-custom-banned-passwords) of these words in user passwords. [How are passwords evaluated?](https://learn.microsoft.com/en-us/entra/identity/authentication/concept-password-ban-bad#score-calculation)",
@@ -804,7 +870,11 @@
{
"name": "standards.ExternalMFATrusted",
"cat": "Entra (AAD) Standards",
- "tag": ["ZTNA21803", "ZTNA21804"],
+ "tag": [],
+ "appliesToTest": [
+ "ZTNA21803",
+ "ZTNA21804"
+ ],
"helpText": "Sets the state of the Cross-tenant access setting to trust external MFA. This allows guest users to use their home tenant MFA to access your tenant.",
"executiveText": "Allows external partners and vendors to use their own organization's multi-factor authentication when accessing company resources, streamlining collaboration while maintaining security standards. This reduces friction for external users while ensuring they still meet authentication requirements.",
"addedComponent": [
@@ -833,10 +903,14 @@
"tag": [
"CIS M365 6.0.1 (5.1.2.3)",
"CISA (MS.AAD.6.1v1)",
- "ZTNA21772",
- "ZTNA21787",
"SMB1001 (2.8)"
],
+ "appliesToTest": [
+ "CIS_5_1_2_3",
+ "SMB1001_2_8",
+ "ZTNA21772",
+ "ZTNA21787"
+ ],
"helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles.",
"docsDescription": "Users by default are allowed to create M365 tenants. This disables that so only admins can create new M365 tenants.",
"executiveText": "Prevents regular employees from creating new Microsoft 365 organizations, ensuring all new tenants are properly managed and controlled by IT administrators. This prevents unauthorized shadow IT environments and maintains centralized governance over Microsoft 365 resources.",
@@ -860,12 +934,16 @@
"EIDSCA.CR03",
"EIDSCA.CR04",
"Essential 8 (1507)",
- "NIST CSF 2.0 (PR.AA-05)",
- "ZTNA21869",
+ "NIST CSF 2.0 (PR.AA-05)"
+ ],
+ "appliesToTest": [
+ "CIS_5_1_5_2",
+ "EIDSCACP04",
"EIDSCACR01",
"EIDSCACR02",
"EIDSCACR03",
- "EIDSCACR04"
+ "EIDSCACR04",
+ "ZTNA21869"
],
"helpText": "Enables App consent admin requests for the tenant via the GA role. Does not overwrite existing reviewer settings",
"docsDescription": "Enables the ability for users to request admin consent for applications. Should be used in conjunction with the \"Require admin consent for applications\" standards",
@@ -887,7 +965,11 @@
{
"name": "standards.NudgeMFA",
"cat": "Entra (AAD) Standards",
- "tag": ["ZTNA21889", "SMB1001 (2.5)"],
+ "tag": ["SMB1001 (2.5)"],
+ "appliesToTest": [
+ "SMB1001_2_5",
+ "ZTNA21889"
+ ],
"helpText": "Sets the state of the registration campaign for the tenant",
"docsDescription": "Sets the state of the registration campaign for the tenant. If enabled nudges users to set up the Microsoft Authenticator during sign-in.",
"executiveText": "Prompts employees to set up multi-factor authentication during login, gradually improving the organization's security posture by encouraging adoption of stronger authentication methods. This helps achieve better security compliance without forcing immediate mandatory changes.",
@@ -924,7 +1006,11 @@
{
"name": "standards.DisableM365GroupUsers",
"cat": "Entra (AAD) Standards",
- "tag": ["CISA (MS.AAD.21.1v1)", "ZTNA21868", "SMB1001 (2.8)"],
+ "tag": ["CISA (MS.AAD.21.1v1)", "SMB1001 (2.8)"],
+ "appliesToTest": [
+ "SMB1001_2_8",
+ "ZTNA21868"
+ ],
"helpText": "Restricts M365 group creation to certain admin roles. This disables the ability to create Teams, SharePoint sites, Planner, etc",
"docsDescription": "Users by default are allowed to create M365 groups. This restricts M365 group creation to certain admin roles. This disables the ability to create Teams, SharePoint sites, Planner, etc",
"executiveText": "Restricts the creation of Microsoft 365 groups, Teams, and SharePoint sites to authorized administrators, preventing uncontrolled proliferation of collaboration spaces. This ensures proper governance, naming conventions, and resource management while maintaining oversight of all collaborative environments.",
@@ -953,9 +1039,13 @@
"EIDSCA.AP10",
"Essential 8 (1175)",
"NIST CSF 2.0 (PR.AA-05)",
- "EIDSCAAP10",
"SMB1001 (2.8)"
],
+ "appliesToTest": [
+ "CIS_5_1_2_2",
+ "EIDSCAAP10",
+ "SMB1001_2_8"
+ ],
"helpText": "Disables the ability for users to create App registrations in the tenant.",
"docsDescription": "Disables the ability for users to create applications in Entra. Done to prevent breached accounts from creating an app to maintain access to the tenant, even after the breached account has been secured.",
"executiveText": "Prevents regular employees from creating application registrations that could be used to maintain unauthorized access to company systems. This security measure ensures that only authorized IT personnel can create applications, reducing the risk of persistent security breaches through malicious applications.",
@@ -970,7 +1060,11 @@
{
"name": "standards.BitLockerKeysForOwnedDevice",
"cat": "Entra (AAD) Standards",
- "tag": ["CIS M365 6.0.1 (5.1.4.6)", "ZTNA21954"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.6)"],
+ "appliesToTest": [
+ "CIS_5_1_4_6",
+ "ZTNA21954"
+ ],
"helpText": "Controls whether standard users can recover BitLocker keys for devices they own.",
"docsDescription": "Updates the Microsoft Entra authorization policy that controls whether standard users can read BitLocker recovery keys for devices they own. Choose to restrict access for tighter security or allow self-service recovery when operational needs require it.",
"executiveText": "Gives administrators centralized control over BitLocker recovery secrets—restrict access to ensure IT-assisted recovery flows, or allow self-service when rapid device unlocks are a priority.",
@@ -1001,9 +1095,13 @@
"CIS M365 6.0.1 (5.1.3.2)",
"CISA (MS.AAD.20.1v1)",
"NIST CSF 2.0 (PR.AA-05)",
- "ZTNA21868",
"SMB1001 (2.8)"
],
+ "appliesToTest": [
+ "CIS_5_1_3_2",
+ "SMB1001_2_8",
+ "ZTNA21868"
+ ],
"helpText": "Completely disables the creation of security groups by users. This also breaks the ability to manage groups themselves, or create Teams",
"executiveText": "Restricts the creation of security groups to IT administrators only, preventing employees from creating unauthorized access groups that could bypass security controls. This ensures proper governance of access permissions and maintains centralized control over who can access what resources.",
"addedComponent": [],
@@ -1032,6 +1130,10 @@
"name": "standards.DisableSelfServiceLicenses",
"cat": "Entra (AAD) Standards",
"tag": ["CIS M365 6.0.1 (1.3.4)", "SMB1001 (2.8)"],
+ "appliesToTest": [
+ "CIS_1_3_4",
+ "SMB1001_2_8"
+ ],
"helpText": "**Requires 'Billing Administrator' GDAP role.** This standard disables all self service licenses and enables all exclusions",
"executiveText": "Prevents employees from purchasing Microsoft 365 licenses independently, ensuring all software acquisitions go through proper procurement channels. This maintains budget control, prevents unauthorized spending, and ensures compliance with corporate licensing agreements.",
"addedComponent": [
@@ -1057,7 +1159,11 @@
{
"name": "standards.DisableGuests",
"cat": "Entra (AAD) Standards",
- "tag": ["ZTNA21858", "SMB1001 (2.8)"],
+ "tag": ["SMB1001 (2.8)"],
+ "appliesToTest": [
+ "SMB1001_2_8",
+ "ZTNA21858"
+ ],
"helpText": "Blocks login for guest users that have not logged in for a number of days",
"executiveText": "Automatically disables external guest accounts that haven't been used for a number of days, reducing security risks from dormant accounts while maintaining access for active external collaborators. This helps maintain a clean user directory and reduces potential attack vectors.",
"addedComponent": [
@@ -1086,15 +1192,18 @@
"EIDSCA.AP08",
"EIDSCA.AP09",
"Essential 8 (1175)",
- "NIST CSF 2.0 (PR.AA-05)",
- "ZTNA21772",
- "ZTNA21774",
- "ZTNA21807",
+ "NIST CSF 2.0 (PR.AA-05)"
+ ],
+ "appliesToTest": [
+ "CIS_5_1_5_1",
"EIDSCAAP08",
"EIDSCAAP09",
"EIDSCACP01",
"EIDSCACP03",
- "EIDSCACP04"
+ "EIDSCACP04",
+ "ZTNA21772",
+ "ZTNA21774",
+ "ZTNA21807"
],
"helpText": "Disables users from being able to consent to applications, except for those specified in the field below",
"docsDescription": "Requires users to get administrator consent before sharing data with applications. You can preapprove specific applications.",
@@ -1135,9 +1244,13 @@
"CISA (MS.AAD.18.1v1)",
"EIDSCA.AP04",
"EIDSCA.AP07",
+ "SMB1001 (2.8)"
+ ],
+ "appliesToTest": [
+ "CIS_5_1_6_3",
"EIDSCAAP04",
- "SMB1001 (2.8)",
- "ICS M365 6.0.1 (5.1.6.3)"
+ "EIDSCAAP07",
+ "SMB1001_2_8"
],
"helpText": "This setting controls who can invite guests to your directory to collaborate on resources secured by your company, such as SharePoint sites or Azure resources.",
"executiveText": "Controls who within the organization can invite external partners and vendors to access company resources, ensuring proper oversight of external access while enabling necessary business collaboration. This helps maintain security while supporting partnership and vendor relationships.",
@@ -1210,7 +1323,13 @@
{
"name": "standards.SecurityDefaults",
"cat": "Entra (AAD) Standards",
- "tag": ["CISA (MS.AAD.11.1v1)", "ZTNA21843", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
+ "tag": ["CISA (MS.AAD.11.1v1)", "SMB1001 (2.5)", "SMB1001 (2.6)", "SMB1001 (2.9)"],
+ "appliesToTest": [
+ "SMB1001_2_5",
+ "SMB1001_2_6",
+ "SMB1001_2_9",
+ "ZTNA21843"
+ ],
"helpText": "Enables security defaults for the tenant, for newer tenants this is enabled by default. Do not enable this feature if you use Conditional Access.",
"docsDescription": "Enables SD for the tenant, which disables all forms of basic authentication and enforces users to configure MFA. Users are only prompted for MFA when a logon is considered 'suspect' by Microsoft.",
"executiveText": "Activates Microsoft's baseline security configuration that requires multi-factor authentication and blocks legacy authentication methods. This provides essential security protection for organizations without complex conditional access policies, significantly improving security posture with minimal configuration.",
@@ -1229,11 +1348,17 @@
"CIS M365 6.0.1 (5.2.3.5)",
"EIDSCA.AS04",
"NIST CSF 2.0 (PR.AA-03)",
- "EIDSCAAS04",
"SMB1001 (2.5)",
"SMB1001 (2.6)",
"SMB1001 (2.9)"
],
+ "appliesToTest": [
+ "CIS_5_2_3_5",
+ "EIDSCAAS04",
+ "SMB1001_2_5",
+ "SMB1001_2_6",
+ "SMB1001_2_9"
+ ],
"helpText": "This blocks users from using SMS as an MFA method. If a user only has SMS as a MFA method, they will be unable to log in.",
"docsDescription": "Disables SMS as an MFA method for the tenant. If a user only has SMS as a MFA method, they will be unable to sign in.",
"executiveText": "Disables SMS text messages as a multi-factor authentication method due to security vulnerabilities like SIM swapping attacks. This forces users to adopt more secure authentication methods like authenticator apps or hardware tokens, significantly improving account security.",
@@ -1252,11 +1377,17 @@
"CIS M365 6.0.1 (5.2.3.5)",
"EIDSCA.AV01",
"NIST CSF 2.0 (PR.AA-03)",
- "EIDSCAAV01",
"SMB1001 (2.5)",
"SMB1001 (2.6)",
"SMB1001 (2.9)"
],
+ "appliesToTest": [
+ "CIS_5_2_3_5",
+ "EIDSCAAV01",
+ "SMB1001_2_5",
+ "SMB1001_2_6",
+ "SMB1001_2_9"
+ ],
"helpText": "This blocks users from using Voice call as an MFA method. If a user only has Voice as a MFA method, they will be unable to log in.",
"docsDescription": "Disables Voice call as an MFA method for the tenant. If a user only has Voice call as a MFA method, they will be unable to sign in.",
"executiveText": "Disables voice call authentication due to security vulnerabilities and social engineering risks. This forces users to adopt more secure authentication methods like authenticator apps, improving overall account security by eliminating phone-based attack vectors.",
@@ -1278,6 +1409,12 @@
"SMB1001 (2.6)",
"SMB1001 (2.9)"
],
+ "appliesToTest": [
+ "CIS_5_2_3_7",
+ "SMB1001_2_5",
+ "SMB1001_2_6",
+ "SMB1001_2_9"
+ ],
"helpText": "This blocks users from using email as an MFA method. This disables the email OTP option for guest users, and instead prompts them to create a Microsoft account.",
"executiveText": "Disables email-based authentication codes due to security concerns with email interception and account compromise. This forces users to adopt more secure authentication methods, particularly affecting guest users who must use stronger verification methods.",
"addedComponent": [],
@@ -1328,13 +1465,18 @@
"Essential 8 (1173)",
"Essential 8 (1401)",
"NIST CSF 2.0 (PR.AA-03)",
- "ZTNA21780",
- "ZTNA21782",
- "ZTNA21796",
"SMB1001 (2.5)",
"SMB1001 (2.6)",
"SMB1001 (2.9)"
],
+ "appliesToTest": [
+ "SMB1001_2_5",
+ "SMB1001_2_6",
+ "SMB1001_2_9",
+ "ZTNA21780",
+ "ZTNA21782",
+ "ZTNA21796"
+ ],
"helpText": "Enables per user MFA for all users.",
"executiveText": "Requires all employees to use multi-factor authentication for enhanced account security, significantly reducing the risk of unauthorized access from compromised passwords. This fundamental security measure protects against the majority of account-based attacks and is essential for maintaining strong cybersecurity posture.",
"addedComponent": [],
@@ -1424,6 +1566,7 @@
"name": "standards.OutBoundSpamAlert",
"cat": "Exchange Standards",
"tag": ["CIS M365 6.0.1 (2.1.6)"],
+ "appliesToTest": ["CIS_2_1_6"],
"helpText": "Set the Outbound Spam Alert e-mail address",
"docsDescription": "Sets the e-mail address to which outbound spam alerts are sent.",
"addedComponent": [
@@ -1649,6 +1792,7 @@
"name": "standards.EnableOnlineArchiving",
"cat": "Exchange Standards",
"tag": ["Essential 8 (1511)", "NIST CSF 2.0 (PR.DS-11)", "SMB1001 (3.1)"],
+ "appliesToTest": ["SMB1001_3_1"],
"helpText": "Enables the In-Place Online Archive for all UserMailboxes with a valid license.",
"executiveText": "Automatically enables online email archiving for all licensed employees, providing additional storage for older emails while maintaining easy access. This helps manage mailbox sizes, improves email performance, and supports compliance with data retention requirements.",
"addedComponent": [],
@@ -1670,6 +1814,7 @@
"name": "standards.EnableLitigationHold",
"cat": "Exchange Standards",
"tag": ["SMB1001 (3.1)"],
+ "appliesToTest": ["SMB1001_3_1"],
"helpText": "Enables litigation hold for all UserMailboxes with a valid license.",
"executiveText": "Preserves all email content for legal and compliance purposes by preventing permanent deletion of emails, even when users attempt to delete them. This is essential for organizations subject to legal discovery requirements or regulatory compliance mandates.",
"addedComponent": [
@@ -1698,7 +1843,13 @@
{
"name": "standards.SpoofWarn",
"cat": "Exchange Standards",
- "tag": ["CIS M365 6.0.1 (6.2.3)", "ORCA111", "ORCA240", "CISAMSEXO71"],
+ "tag": ["CIS M365 6.0.1 (6.2.3)"],
+ "appliesToTest": [
+ "CISAMSEXO71",
+ "CIS_6_2_3",
+ "ORCA111",
+ "ORCA240"
+ ],
"helpText": "Adds or removes indicators to e-mail messages received from external senders in Outlook. Works on all Outlook clients/OWA",
"docsDescription": "Adds or removes indicators to e-mail messages received from external senders in Outlook. You can read more about this feature on [Microsoft's Exchange Team Blog.](https://techcommunity.microsoft.com/t5/exchange-team-blog/native-external-sender-callouts-on-email-in-outlook/ba-p/2250098)",
"executiveText": "Displays visual warnings in Outlook when emails come from external senders, helping employees identify potentially suspicious messages and reducing the risk of phishing attacks. This security feature makes it easier for staff to distinguish between internal and external communications.",
@@ -1740,6 +1891,7 @@
"name": "standards.EnableMailTips",
"cat": "Exchange Standards",
"tag": ["CIS M365 6.0.1 (6.5.2)", "exo_mailtipsenabled"],
+ "appliesToTest": ["CIS_6_5_2"],
"helpText": "Enables all MailTips in Outlook. MailTips are the notifications Outlook and Outlook on the web shows when an email you create, meets some requirements",
"executiveText": "Enables helpful notifications in Outlook that warn users about potential email issues, such as sending to large groups, external recipients, or invalid addresses. This reduces email mistakes and improves communication efficiency by providing real-time guidance to employees.",
"addedComponent": [
@@ -1817,6 +1969,10 @@
"name": "standards.RotateDKIM",
"cat": "Exchange Standards",
"tag": ["CIS M365 6.0.1 (2.1.9)", "SMB1001 (2.12)"],
+ "appliesToTest": [
+ "CIS_2_1_9",
+ "SMB1001_2_12"
+ ],
"helpText": "Rotate DKIM keys that are 1024 bit to 2048 bit",
"executiveText": "Upgrades email security by replacing older 1024-bit encryption keys with stronger 2048-bit keys for email authentication. This improves the organization's email security posture and helps prevent email spoofing and tampering, maintaining trust with email recipients.",
"addedComponent": [],
@@ -1869,7 +2025,13 @@
{
"name": "standards.AddDKIM",
"cat": "Exchange Standards",
- "tag": ["CIS M365 6.0.1 (2.1.9)", "ORCA108", "CISAMSEXO31", "SMB1001 (2.12)"],
+ "tag": ["CIS M365 6.0.1 (2.1.9)", "SMB1001 (2.12)"],
+ "appliesToTest": [
+ "CISAMSEXO31",
+ "CIS_2_1_9",
+ "ORCA108",
+ "SMB1001_2_12"
+ ],
"helpText": "Enables DKIM for all domains that currently support it",
"executiveText": "Enables email authentication technology that digitally signs outgoing emails to verify they actually came from your organization. This prevents email spoofing, improves email deliverability, and protects the company's reputation by ensuring recipients can trust emails from your domains.",
"addedComponent": [],
@@ -1891,6 +2053,10 @@
"name": "standards.AddDMARCToMOERA",
"cat": "Global Standards",
"tag": ["CIS M365 6.0.1 (2.1.10)", "Security", "PhishingProtection", "SMB1001 (2.12)"],
+ "appliesToTest": [
+ "CIS_2_1_10",
+ "SMB1001_2_12"
+ ],
"helpText": "** Remediation is not available ** Note: requires 'Domain Name Administrator' GDAP role. This should be enabled even if the MOERA (onmicrosoft.com) domains is not used for sending. Enabling this prevents email spoofing. The default value is 'v=DMARC1; p=reject;' recommended because the domain is only used within M365 and reporting is not needed. Omitting pct tag default to 100%",
"docsDescription": "** Remediation is not available ** Note: requires 'Domain Name Administrator' GDAP role. Adds a DMARC record to MOERA (onmicrosoft.com) domains. This should be enabled even if the MOERA (onmicrosoft.com) domains is not used for sending. Enabling this prevents email spoofing. The default record is 'v=DMARC1; p=reject;' recommended because the domain is only used within M365 and reporting is not needed. Omitting pct tag default to 100%",
"executiveText": "Implements advanced email security for Microsoft's default domain names (onmicrosoft.com) to prevent criminals from impersonating your organization. This blocks fraudulent emails that could damage your company's reputation and protects partners and customers from phishing attacks using your domain names.",
@@ -1926,8 +2092,13 @@
"exo_mailboxaudit",
"Essential 8 (1509)",
"Essential 8 (1683)",
- "NIST CSF 2.0 (DE.CM-09)",
- "CISAMSEXO131"
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
+ "appliesToTest": [
+ "CISAMSEXO131",
+ "CIS_6_1_1",
+ "CIS_6_1_2",
+ "CIS_6_1_3"
],
"helpText": "Enables Mailbox auditing for all mailboxes and on tenant level. Disables audit bypass on all mailboxes. Unified Audit Log needs to be enabled for this standard to function.",
"docsDescription": "Enables mailbox auditing on tenant level and for all mailboxes. Disables audit bypass on all mailboxes. By default Microsoft does not enable mailbox auditing for Resource Mailboxes, Public Folder Mailboxes and DiscoverySearch Mailboxes. Unified Audit Log needs to be enabled for this standard to function.",
@@ -2130,6 +2301,7 @@
"name": "standards.EXOOutboundSpamLimits",
"cat": "Exchange Standards",
"tag": ["CIS M365 6.0.1 (2.1.15)"],
+ "appliesToTest": ["CIS_2_1_15"],
"helpText": "Configures the outbound spam recipient limits (external per hour, internal per hour, per day) and the action to take when a limit is reached. The 'Set Outbound Spam Alert e-mail' standard is recommended to configure together with this one. ",
"docsDescription": "Configures the Exchange Online outbound spam recipient limits for external per hour, internal per hour, and per day, along with the action to take (e.g., BlockUser, Alert) when these limits are exceeded. This helps prevent abuse and manage email flow. Microsoft's recommendations can be found [here.](https://learn.microsoft.com/en-us/defender-office-365/recommended-settings-for-eop-and-office365#eop-outbound-spam-policy-settings) The 'Set Outbound Spam Alert e-mail' standard is recommended to configure together with this one.",
"executiveText": "Sets limits on how many emails employees can send per hour and per day to prevent spam and protect the organization's email reputation. When limits are exceeded, the system can alert administrators or temporarily block the user, helping detect compromised accounts or prevent abuse.",
@@ -2197,7 +2369,12 @@
{
"name": "standards.DisableExternalCalendarSharing",
"cat": "Exchange Standards",
- "tag": ["CIS M365 6.0.1 (1.3.3)", "exo_individualsharing", "ZTNA21803", "CISAMSEXO62"],
+ "tag": ["CIS M365 6.0.1 (1.3.3)", "exo_individualsharing"],
+ "appliesToTest": [
+ "CISAMSEXO62",
+ "CIS_1_3_3",
+ "ZTNA21803"
+ ],
"helpText": "Disables the ability for users to share their calendar with external users. Only for the default policy, so exclusions can be made if needed.",
"docsDescription": "Disables external calendar sharing for the entire tenant. This is not a widely used feature, and it's therefore unlikely that this will impact users. Only for the default policy, so exclusions can be made if needed by making a new policy and assigning it to users.",
"executiveText": "Prevents employees from sharing their calendars with external parties, protecting sensitive meeting information and internal schedules from unauthorized access. This security measure helps maintain confidentiality of business activities while still allowing internal collaboration.",
@@ -2235,7 +2412,11 @@
{
"name": "standards.DisableAdditionalStorageProviders",
"cat": "Exchange Standards",
- "tag": ["CIS M365 6.0.1 (6.5.3)", "exo_storageproviderrestricted", "ZTNA21817"],
+ "tag": ["CIS M365 6.0.1 (6.5.3)", "exo_storageproviderrestricted"],
+ "appliesToTest": [
+ "CIS_6_5_3",
+ "ZTNA21817"
+ ],
"helpText": "Disables the ability for users to open files in Outlook on the Web, from other providers such as Box, Dropbox, Facebook, Google Drive, OneDrive Personal, etc.",
"docsDescription": "Disables additional storage providers in OWA. This is to prevent users from using personal storage providers like Dropbox, Google Drive, etc. Usually this has little user impact.",
"executiveText": "Prevents employees from accessing personal cloud storage services like Dropbox or Google Drive through Outlook on the web, reducing data security risks and ensuring company information stays within approved corporate systems. This helps maintain data governance and prevents accidental data leaks.",
@@ -2258,6 +2439,7 @@
"name": "standards.AntiSpamSafeList",
"cat": "Defender Standards",
"tag": ["CIS M365 6.0.1 (2.1.13)"],
+ "appliesToTest": ["CIS_2_1_13"],
"helpText": "Sets the anti-spam connection filter policy option 'safe list' in Defender.",
"docsDescription": "Sets [Microsoft's built-in 'safe list'](https://learn.microsoft.com/en-us/powershell/module/exchange/set-hostedconnectionfilterpolicy?view=exchange-ps#-enablesafelist) in the anti-spam connection filter policy, rather than setting a custom safe/block list of IPs.",
"executiveText": "Enables Microsoft's pre-approved list of trusted email servers to improve email delivery from legitimate sources while maintaining spam protection. This reduces false positives where legitimate emails might be blocked while still protecting against spam and malicious emails.",
@@ -2339,6 +2521,7 @@
"name": "standards.Bookings",
"cat": "Exchange Standards",
"tag": ["CIS M365 6.0.1 (1.3.9)"],
+ "appliesToTest": ["CIS_1_3_9"],
"helpText": "Sets the state of Bookings on the tenant. Bookings is a scheduling tool that allows users to book appointments with others both internal and external.",
"docsDescription": "",
"executiveText": "Controls whether employees can use Microsoft Bookings to create online appointment scheduling pages for internal and external clients. This feature can improve customer service and streamline appointment management, but may need to be controlled for security or business process reasons.",
@@ -2372,6 +2555,7 @@
"name": "standards.EXODirectSend",
"cat": "Exchange Standards",
"tag": ["CIS M365 6.0.1 (6.5.5)"],
+ "appliesToTest": ["CIS_6_5_5"],
"helpText": "Sets the state of Direct Send in Exchange Online. Direct Send allows applications to send emails directly to Exchange Online mailboxes as the tenants domains, without requiring authentication.",
"docsDescription": "Controls whether applications can use Direct Send to send emails directly to Exchange Online mailboxes as the tenants domains, without requiring authentication. A detailed explanation from Microsoft can be found [here.](https://learn.microsoft.com/en-us/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365)",
"executiveText": "Controls whether business applications and devices (like printers or scanners) can send emails through the company's email system without authentication. While this enables convenient features like scan-to-email, it may pose security risks and should be carefully managed.",
@@ -2402,7 +2586,10 @@
"CIS M365 6.0.1 (6.3.1)",
"exo_outlookaddins",
"NIST CSF 2.0 (PR.AA-05)",
- "NIST CSF 2.0 (PR.PS-05)",
+ "NIST CSF 2.0 (PR.PS-05)"
+ ],
+ "appliesToTest": [
+ "CIS_6_3_1",
"ZTNA21817"
],
"helpText": "Disables the ability for users to install add-ins in Outlook. This is to prevent users from installing malicious add-ins.",
@@ -2511,6 +2698,7 @@
"name": "standards.UserSubmissions",
"cat": "Exchange Standards",
"tag": ["CIS M365 6.0.1 (8.6.1)"],
+ "appliesToTest": ["CIS_8_6_1"],
"helpText": "Set the state of the spam submission button in Outlook",
"docsDescription": "Set the state of the built-in Report button in Outlook. This gives the users the ability to report emails as spam or phish.",
"executiveText": "Enables employees to easily report suspicious emails directly from Outlook, helping improve the organization's spam and phishing detection systems. This crowdsourced approach to security allows users to contribute to threat detection while providing valuable feedback to enhance email security filters.",
@@ -2555,6 +2743,10 @@
"NIST CSF 2.0 (PR.AA-01)",
"SMB1001 (2.3)"
],
+ "appliesToTest": [
+ "CIS_1_2_2",
+ "SMB1001_2_3"
+ ],
"helpText": "Blocks login for all accounts that are marked as a shared mailbox. This is Microsoft best practice to prevent direct logons to shared mailboxes.",
"docsDescription": "Shared mailboxes can be directly logged into if the password is reset, this presents a security risk as do all shared login credentials. Microsoft's recommendation is to disable the user account for shared mailboxes. It would be a good idea to review the sign-in reports to establish potential impact.",
"executiveText": "Prevents direct login to shared mailbox accounts (like info@company.com), ensuring they can only be accessed through authorized users' accounts. This security measure eliminates the risk of shared passwords and unauthorized access while maintaining proper access control and audit trails.",
@@ -2570,6 +2762,7 @@
"name": "standards.DisableResourceMailbox",
"cat": "Exchange Standards",
"tag": ["NIST CSF 2.0 (PR.AA-01)", "SMB1001 (2.3)"],
+ "appliesToTest": ["SMB1001_2_3"],
"helpText": "Blocks login for all accounts that are marked as a resource mailbox and does not have a license assigned. Accounts that are synced from on-premises AD are excluded, as account state is managed in the on-premises AD.",
"docsDescription": "Resource mailboxes can be directly logged into if the password is reset, this presents a security risk as do all shared login credentials. Microsoft's recommendation is to disable the user account for resource mailboxes. Accounts that are synced from on-premises AD are excluded, as account state is managed in the on-premises AD.",
"executiveText": "Prevents direct login to resource mailbox accounts (like conference rooms or equipment), ensuring they can only be managed through proper administrative channels. This security measure eliminates potential unauthorized access to resource scheduling systems while maintaining proper booking functionality.",
@@ -2598,6 +2791,7 @@
"CISA (MS.EXO.4.1v1)",
"NIST CSF 2.0 (PR.DS-02)"
],
+ "appliesToTest": ["CIS_6_2_1"],
"helpText": "Disables the ability for users to automatically forward e-mails to external recipients.",
"docsDescription": "Disables the ability for users to automatically forward e-mails to external recipients. This is to prevent data exfiltration. Please check if there are any legitimate use cases for this feature before implementing, like forwarding invoices and such.",
"executiveText": "Prevents employees from automatically forwarding company emails to external addresses, protecting against data leaks and unauthorized information sharing. This security measure helps maintain control over sensitive business communications while preventing both accidental and intentional data exfiltration.",
@@ -2620,6 +2814,7 @@
"name": "standards.RetentionPolicyTag",
"cat": "Exchange Standards",
"tag": ["SMB1001 (3.1)"],
+ "appliesToTest": ["SMB1001_3_1"],
"helpText": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.",
"docsDescription": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.",
"executiveText": "Automatically and permanently removes deleted emails after a specified number of days, helping manage storage costs and ensuring compliance with data retention policies. This prevents accumulation of unnecessary deleted items while maintaining a reasonable recovery window for accidentally deleted emails.",
@@ -2750,7 +2945,13 @@
"CIS M365 6.0.1 (2.1.1)",
"mdo_safelinksforemail",
"mdo_safelinksforOfficeApps",
- "NIST CSF 2.0 (DE.CM-09)",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
+ "appliesToTest": [
+ "CISAMSEXO151",
+ "CISAMSEXO152",
+ "CISAMSEXO153",
+ "CIS_2_1_1",
"ORCA105",
"ORCA106",
"ORCA107",
@@ -2764,10 +2965,7 @@
"ORCA226",
"ORCA236",
"ORCA237",
- "ORCA238",
- "CISAMSEXO151",
- "CISAMSEXO152",
- "CISAMSEXO153"
+ "ORCA238"
],
"helpText": "This creates a Safe Links policy that automatically scans, tracks, and and enables safe links for Email, Office, and Teams for both external and internal senders",
"addedComponent": [
@@ -2828,7 +3026,13 @@
"mdo_antiphishingpolicies",
"mdo_phishthresholdlevel",
"CIS M365 6.0.1 (2.1.7)",
- "NIST CSF 2.0 (DE.CM-09)",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
+ "appliesToTest": [
+ "CISAMSEXO111",
+ "CISAMSEXO112",
+ "CISAMSEXO113",
+ "CIS_2_1_7",
"ORCA104",
"ORCA115",
"ORCA180",
@@ -2848,10 +3052,7 @@
"ORCA244",
"ZTNA21784",
"ZTNA21817",
- "ZTNA21819",
- "CISAMSEXO111",
- "CISAMSEXO112",
- "CISAMSEXO113"
+ "ZTNA21819"
],
"helpText": "This creates a Anti-Phishing policy that automatically enables Mailbox Intelligence and spoofing, optional switches for Mail tips.",
"addedComponent": [
@@ -3022,7 +3223,10 @@
"mdo_safedocuments",
"mdo_commonattachmentsfilter",
"mdo_safeattachmentpolicy",
- "NIST CSF 2.0 (DE.CM-09)",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
+ "appliesToTest": [
+ "CIS_2_1_4",
"ORCA158",
"ORCA227"
],
@@ -3092,6 +3296,7 @@
"name": "standards.AtpPolicyForO365",
"cat": "Defender Standards",
"tag": ["CIS M365 6.0.1 (2.1.5)", "NIST CSF 2.0 (DE.CM-09)"],
+ "appliesToTest": ["CIS_2_1_5"],
"helpText": "This creates a Atp policy that enables Defender for Office 365 for SharePoint, OneDrive and Microsoft Teams.",
"addedComponent": [
{
@@ -3121,6 +3326,10 @@
"name": "standards.PhishingSimulations",
"cat": "Defender Standards",
"tag": ["SMB1001 (1.11)", "SMB1001 (5.1)"],
+ "appliesToTest": [
+ "SMB1001_1_11",
+ "SMB1001_5_1"
+ ],
"helpText": "This creates a phishing simulation policy that enables phishing simulations for the entire tenant.",
"addedComponent": [
{
@@ -3179,16 +3388,21 @@
"mdo_zapspam",
"mdo_zapphish",
"mdo_zapmalware",
- "NIST CSF 2.0 (DE.CM-09)",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
+ "appliesToTest": [
+ "CISAMSEXO101",
+ "CISAMSEXO102",
+ "CISAMSEXO103",
+ "CISAMSEXO95",
+ "CIS_2_1_11",
+ "CIS_2_1_2",
+ "CIS_2_1_3",
"ORCA121",
"ORCA124",
"ORCA232",
"ZTNA21817",
- "ZTNA21819",
- "CISAMSEXO95",
- "CISAMSEXO101",
- "CISAMSEXO102",
- "CISAMSEXO103"
+ "ZTNA21819"
],
"helpText": "This creates a Malware filter policy that enables the default File filter and Zero-hour auto purge for malware.",
"addedComponent": [
@@ -3318,7 +3532,11 @@
{
"name": "standards.SpamFilterPolicy",
"cat": "Defender Standards",
- "tag": [
+ "tag": [],
+ "appliesToTest": [
+ "CISAMSEXO141",
+ "CISAMSEXO142",
+ "CISAMSEXO143",
"ORCA100",
"ORCA101",
"ORCA102",
@@ -3332,10 +3550,7 @@
"ORCA143",
"ORCA224",
"ORCA231",
- "ORCA241",
- "CISAMSEXO141",
- "CISAMSEXO142",
- "CISAMSEXO143"
+ "ORCA241"
],
"helpText": "This standard creates a Spam filter policy similar to the default strict policy.",
"docsDescription": "This standard creates a Spam filter policy similar to the default strict policy, the following settings are configured to on by default: IncreaseScoreWithNumericIps, IncreaseScoreWithRedirectToOtherPort, MarkAsSpamEmptyMessages, MarkAsSpamJavaScriptInHtml, MarkAsSpamSpfRecordHardFail, MarkAsSpamFromAddressAuthFail, MarkAsSpamNdrBackscatter, MarkAsSpamBulkMail, InlineSafetyTipsEnabled, PhishZapEnabled, SpamZapEnabled",
@@ -3842,6 +4057,7 @@
"name": "standards.IntuneComplianceSettings",
"cat": "Intune Standards",
"tag": ["CIS M365 6.0.1 (4.1)"],
+ "appliesToTest": ["CIS_4_1"],
"helpText": "Sets the mark devices with no compliance policy assigned as compliance/non compliant and Compliance status validity period.",
"executiveText": "Configures how the system treats devices that don't have specific compliance policies and sets how often devices must check in to maintain their compliance status. This ensures proper security oversight of all corporate devices and maintains current compliance information.",
"addedComponent": [
@@ -3913,6 +4129,7 @@
"name": "standards.DefaultPlatformRestrictions",
"cat": "Intune Standards",
"tag": ["CIS M365 6.0.1 (4.2)", "CISA (MS.AAD.19.1v1)"],
+ "appliesToTest": ["CIS_4_2"],
"helpText": "Sets the default platform restrictions for enrolling devices into Intune. Note: Do not block personally owned if platform is blocked.",
"executiveText": "Controls which types of devices (iOS, Android, Windows, macOS) and ownership models (corporate vs. personal) can be enrolled in the company's device management system. This helps maintain security standards while supporting necessary business device types and usage scenarios.",
"addedComponent": [
@@ -4131,7 +4348,12 @@
{
"name": "standards.intuneDeviceReg",
"cat": "Intune Standards",
- "tag": ["CIS M365 6.0.1 (5.1.4.2)", "CISA (MS.AAD.17.1v1)", "ZTNA21801", "ZTNA21802"],
+ "tag": ["CIS M365 6.0.1 (5.1.4.2)", "CISA (MS.AAD.17.1v1)"],
+ "appliesToTest": [
+ "CIS_5_1_4_2",
+ "ZTNA21801",
+ "ZTNA21802"
+ ],
"helpText": "Sets the maximum number of devices that can be registered by a user. A value of 0 disables device registration by users",
"executiveText": "Limits how many devices each employee can register for corporate access, preventing excessive device proliferation while accommodating legitimate business needs. This helps maintain security oversight and prevents potential abuse of device registration privileges.",
"addedComponent": [
@@ -4154,6 +4376,11 @@
"name": "standards.intuneDeviceRegLocalAdmins",
"cat": "Entra (AAD) Standards",
"tag": ["CIS M365 6.0.1 (5.1.4.3)", "CIS M365 6.0.1 (5.1.4.4)", "SMB1001 (2.2)"],
+ "appliesToTest": [
+ "CIS_5_1_4_3",
+ "CIS_5_1_4_4",
+ "SMB1001_2_2"
+ ],
"helpText": "Controls whether users who register Microsoft Entra joined devices are granted local administrator rights on those devices and if Global Administrators are added as local admins.",
"docsDescription": "Configures the Device Registration Policy local administrator behavior for registering users. When enabled, users who register devices are not granted local administrator rights, you can also configure if Global Administrators are added as local admins.",
"executiveText": "Controls whether employees who enroll devices automatically receive local administrator access. Disabling registering-user admin rights follows least-privilege principles and reduces security risk from over-privileged endpoints.",
@@ -4182,6 +4409,10 @@
"name": "standards.intuneRestrictUserDeviceRegistration",
"cat": "Entra (AAD) Standards",
"tag": ["CIS M365 6.0.1 (5.1.4.1)", "SMB1001 (2.8)"],
+ "appliesToTest": [
+ "CIS_5_1_4_1",
+ "SMB1001_2_8"
+ ],
"helpText": "Controls whether users can register devices with Entra.",
"docsDescription": "Configures whether users can register devices with Entra. When disabled, users are unable to register devices with Entra.",
"executiveText": "Controls whether employees can register their devices for corporate access. Disabling user device registration prevents unauthorized or unmanaged devices from connecting to company resources, enhancing overall security posture.",
@@ -4203,7 +4434,12 @@
{
"name": "standards.intuneRequireMFA",
"cat": "Intune Standards",
- "tag": ["ZTNA21782", "ZTNA21796", "ZTNA21872"],
+ "tag": [],
+ "appliesToTest": [
+ "ZTNA21782",
+ "ZTNA21796",
+ "ZTNA21872"
+ ],
"helpText": "Requires MFA for all users to register devices with Intune. This is useful when not using Conditional Access.",
"executiveText": "Requires employees to use multi-factor authentication when registering devices for corporate access, adding an extra security layer to prevent unauthorized device enrollment. This helps ensure only legitimate users can connect their devices to company systems.",
"label": "Require Multi-factor Authentication to register or join devices with Microsoft Entra",
@@ -4217,6 +4453,7 @@
"name": "standards.DeletedUserRentention",
"cat": "SharePoint Standards",
"tag": ["SMB1001 (3.1)"],
+ "appliesToTest": ["SMB1001_3_1"],
"helpText": "Sets the retention period for deleted users OneDrive to the specified period of time. The default is 30 days.",
"docsDescription": "When a OneDrive user gets deleted, the personal SharePoint site is saved for selected amount of time that data can be retrieved from it.",
"executiveText": "Preserves departed employees' OneDrive files for a specified period, allowing time to recover important business documents before permanent deletion. This helps prevent data loss while managing storage costs and maintaining compliance with data retention policies.",
@@ -4328,6 +4565,7 @@
"name": "standards.SPAzureB2B",
"cat": "SharePoint Standards",
"tag": ["CIS M365 6.0.1 (7.2.2)"],
+ "appliesToTest": ["CIS_7_2_2"],
"helpText": "Ensure SharePoint and OneDrive integration with Azure AD B2B is enabled",
"executiveText": "Enables secure collaboration with external partners through SharePoint and OneDrive by integrating with Azure B2B guest access. This allows controlled sharing with external organizations while maintaining security oversight and proper access management.",
"addedComponent": [],
@@ -4352,7 +4590,10 @@
"tag": [
"CIS M365 6.0.1 (7.3.1)",
"CISA (MS.SPO.3.1v1)",
- "NIST CSF 2.0 (DE.CM-09)",
+ "NIST CSF 2.0 (DE.CM-09)"
+ ],
+ "appliesToTest": [
+ "CIS_7_3_1",
"ZTNA21817"
],
"helpText": "Ensure Office 365 SharePoint infected files are disallowed for download",
@@ -4420,7 +4661,13 @@
{
"name": "standards.SPExternalUserExpiration",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 6.0.1 (7.2.9)", "CISA (MS.SPO.1.5v1)", "ZTNA21803", "ZTNA21804", "ZTNA21858"],
+ "tag": ["CIS M365 6.0.1 (7.2.9)", "CISA (MS.SPO.1.5v1)"],
+ "appliesToTest": [
+ "CIS_7_2_9",
+ "ZTNA21803",
+ "ZTNA21804",
+ "ZTNA21858"
+ ],
"helpText": "Ensure guest access to a site or OneDrive will expire automatically",
"executiveText": "Automatically expires external user access to SharePoint sites and OneDrive after a specified period, reducing security risks from forgotten or unnecessary guest accounts. This ensures external access is regularly reviewed and maintained only when actively needed.",
"addedComponent": [
@@ -4453,7 +4700,12 @@
{
"name": "standards.SPEmailAttestation",
"cat": "SharePoint Standards",
- "tag": ["CIS M365 6.0.1 (7.2.10)", "CISA (MS.SPO.1.6v1)", "ZTNA21803", "ZTNA21804"],
+ "tag": ["CIS M365 6.0.1 (7.2.10)", "CISA (MS.SPO.1.6v1)"],
+ "appliesToTest": [
+ "CIS_7_2_10",
+ "ZTNA21803",
+ "ZTNA21804"
+ ],
"helpText": "Ensure re-authentication with verification code is restricted",
"executiveText": "Requires external users to periodically re-verify their identity through email verification codes when accessing SharePoint resources, adding an extra security layer for external collaboration. This helps ensure continued legitimacy of external access over time.",
"addedComponent": [
@@ -4489,7 +4741,11 @@
"tag": [
"CIS M365 6.0.1 (7.2.7)",
"CIS M365 6.0.1 (7.2.11)",
- "CISA (MS.SPO.1.4v1)",
+ "CISA (MS.SPO.1.4v1)"
+ ],
+ "appliesToTest": [
+ "CIS_7_2_11",
+ "CIS_7_2_7",
"ZTNA21803",
"ZTNA21804"
],
@@ -4600,7 +4856,10 @@
"CIS M365 6.0.1 (7.2.1)",
"spo_legacy_auth",
"CISA (MS.AAD.3.1v1)",
- "NIST CSF 2.0 (PR.IR-01)",
+ "NIST CSF 2.0 (PR.IR-01)"
+ ],
+ "appliesToTest": [
+ "CIS_7_2_1",
"ZTNA21776",
"ZTNA21797"
],
@@ -4630,7 +4889,11 @@
"CIS M365 6.0.1 (7.2.3)",
"CIS M365 6.0.1 (7.2.4)",
"CISA (MS.AAD.14.1v1)",
- "CISA (MS.SPO.1.1v1)",
+ "CISA (MS.SPO.1.1v1)"
+ ],
+ "appliesToTest": [
+ "CIS_7_2_3",
+ "CIS_7_2_4",
"ZTNA21803",
"ZTNA21804"
],
@@ -4683,7 +4946,10 @@
"tag": [
"CIS M365 6.0.1 (7.2.5)",
"CISA (MS.AAD.14.2v1)",
- "CISA (MS.SPO.1.2v1)",
+ "CISA (MS.SPO.1.2v1)"
+ ],
+ "appliesToTest": [
+ "CIS_7_2_5",
"ZTNA21803",
"ZTNA21804"
],
@@ -4710,6 +4976,7 @@
"name": "standards.DisableUserSiteCreate",
"cat": "SharePoint Standards",
"tag": ["SMB1001 (2.8)"],
+ "appliesToTest": ["SMB1001_2_8"],
"helpText": "Disables users from creating new SharePoint sites",
"docsDescription": "Disables standard users from creating SharePoint sites, also disables the ability to fully create teams",
"executiveText": "Restricts the creation of new SharePoint sites to authorized administrators, preventing uncontrolled proliferation of collaboration spaces and ensuring proper governance. This maintains organized information architecture while requiring approval for new collaborative environments.",
@@ -4785,7 +5052,10 @@
"tag": [
"CIS M365 6.0.1 (7.3.2)",
"CISA (MS.SPO.2.1v1)",
- "NIST CSF 2.0 (PR.AA-05)",
+ "NIST CSF 2.0 (PR.AA-05)"
+ ],
+ "appliesToTest": [
+ "CIS_7_3_2",
"ZTNA24824"
],
"helpText": "Entra P1 required. Block or limit access to SharePoint and OneDrive content from unmanaged devices (those not hybrid AD joined or compliant in Intune). These controls rely on Microsoft Entra Conditional Access policies and can take up to 24 hours to take effect.",
@@ -4819,7 +5089,10 @@
"tag": [
"CIS M365 6.0.1 (7.2.6)",
"CISA (MS.AAD.14.3v1)",
- "CISA (MS.SPO.1.3v1)",
+ "CISA (MS.SPO.1.3v1)"
+ ],
+ "appliesToTest": [
+ "CIS_7_2_6",
"ZTNA21803",
"ZTNA21804"
],
@@ -4873,6 +5146,17 @@
"CIS M365 6.0.1 (8.5.8)",
"CIS M365 6.0.1 (8.5.9)"
],
+ "appliesToTest": [
+ "CIS_8_5_1",
+ "CIS_8_5_2",
+ "CIS_8_5_3",
+ "CIS_8_5_4",
+ "CIS_8_5_5",
+ "CIS_8_5_6",
+ "CIS_8_5_7",
+ "CIS_8_5_8",
+ "CIS_8_5_9"
+ ],
"helpText": "Defines the CIS recommended global meeting policy for Teams. This includes AllowAnonymousUsersToJoinMeeting, AllowAnonymousUsersToStartMeeting, AutoAdmittedUsers, AllowPSTNUsersToBypassLobby, MeetingChatEnabledType, DesignatedPresenterRoleMode, AllowExternalParticipantGiveRequestControl, AllowParticipantGiveRequestControl",
"executiveText": "Establishes security-focused default settings for Teams meetings, controlling who can join meetings, present content, and participate in chats. These policies balance collaboration needs with security requirements, ensuring meetings remain productive while protecting against unauthorized access and disruption.",
"addedComponent": [
@@ -4995,6 +5279,7 @@
"name": "standards.TeamsExternalChatWithAnyone",
"cat": "Teams Standards",
"tag": ["CIS M365 6.0.1 (8.2.3)"],
+ "appliesToTest": ["CIS_8_2_3"],
"helpText": "Controls whether users can start Teams chats with any email address, inviting external recipients as guests via email.",
"docsDescription": "Manages the Teams messaging policy setting UseB2BInvitesToAddExternalUsers. When enabled, users can start chats with any email address and recipients receive an invitation to join the chat as guests. Disabling the setting prevents these external email chats from being created, keeping conversations limited to internal users and approved guests.",
"executiveText": "Allows organizations to decide if employees can launch Microsoft Teams chats with anyone on the internet using just an email address. Disabling the feature keeps conversations inside trusted boundaries and helps prevent accidental data exposure through unexpected external invitations.",
@@ -5038,6 +5323,7 @@
"powershellEquivalent": "Set-CsTeamsClientConfiguration -AllowEmailIntoChannel $false",
"recommendedBy": ["CIS"],
"tag": ["CIS M365 6.0.1 (8.1.2)"],
+ "appliesToTest": ["CIS_8_1_2"],
"requiredCapabilities": ["MCOSTANDARD", "MCOEV", "MCOIMP", "TEAMS1", "Teams_Room_Standard"]
},
{
@@ -5097,6 +5383,7 @@
"name": "standards.TeamsExternalFileSharing",
"cat": "Teams Standards",
"tag": ["CIS M365 6.0.1 (8.1.1)"],
+ "appliesToTest": ["CIS_8_1_1"],
"helpText": "Ensure external file sharing in Teams is enabled for only approved cloud storage services.",
"executiveText": "Controls which external cloud storage services (like Google Drive, Dropbox, Box) employees can access through Teams, ensuring file sharing occurs only through approved and secure platforms. This helps maintain data governance while supporting necessary business integrations.",
"addedComponent": [
@@ -5167,6 +5454,10 @@
"name": "standards.TeamsExternalAccessPolicy",
"cat": "Teams Standards",
"tag": ["CIS M365 6.0.1 (8.2.1)", "CIS M365 6.0.1 (8.2.2)"],
+ "appliesToTest": [
+ "CIS_8_2_1",
+ "CIS_8_2_2"
+ ],
"helpText": "Sets the properties of the Global external access policy.",
"docsDescription": "Sets the properties of the Global external access policy. External access policies determine whether or not your users can: 1) communicate with users who have Session Initiation Protocol (SIP) accounts with a federated organization; 2) communicate with users who are using custom applications built with Azure Communication Services; 3) access Skype for Business Server over the Internet, without having to log on to your internal network; 4) communicate with users who have SIP accounts with a public instant messaging (IM) provider such as Skype; and, 5) communicate with people who are using Teams with an account that's not managed by an organization.",
"executiveText": "Defines the organization's policy for communicating with external users through Teams, including other organizations, Skype users, and unmanaged accounts. This fundamental setting determines the scope of external collaboration while maintaining security boundaries for business communications.",
@@ -5194,6 +5485,7 @@
"name": "standards.TeamsFederationConfiguration",
"cat": "Teams Standards",
"tag": ["CIS M365 6.0.1 (8.2.1)"],
+ "appliesToTest": ["CIS_8_2_1"],
"helpText": "Sets the properties of the Global federation configuration.",
"docsDescription": "Sets the properties of the Global federation configuration. Federation configuration settings determine whether or not your users can communicate with users who have SIP accounts with a federated organization.",
"executiveText": "Configures how the organization federates with external organizations for Teams communication, controlling whether employees can communicate with specific external domains or all external organizations. This setting enables secure inter-organizational collaboration while maintaining control over external communications.",
@@ -5269,6 +5561,7 @@
"name": "standards.TeamsMessagingPolicy",
"cat": "Teams Standards",
"tag": ["CIS M365 6.0.1 (8.6.1)"],
+ "appliesToTest": ["CIS_8_6_1"],
"helpText": "Sets the properties of the Global messaging policy.",
"docsDescription": "Sets the properties of the Global messaging policy. Messaging policies control which chat and channel messaging features are available to users in Teams.",
"executiveText": "Defines what messaging capabilities employees have in Teams, including the ability to edit or delete messages, create custom emojis, and report inappropriate content. These policies help maintain professional communication standards while enabling necessary collaboration features.",
@@ -5422,6 +5715,7 @@
"name": "standards.AutopilotProfile",
"cat": "Device Management Standards",
"tag": ["SMB1001 (2.2)"],
+ "appliesToTest": ["SMB1001_2_2"],
"disabledFeatures": { "report": false, "warn": false, "remediate": false },
"helpText": "Assign the appropriate Autopilot profile to streamline device deployment.",
"docsDescription": "This standard allows the deployment of Autopilot profiles to devices, including settings such as unique name templates, language options, and local admin privileges.",
@@ -5532,6 +5826,17 @@
"SMB1001 (2.2)",
"SMB1001 (4.7)"
],
+ "appliesToTest": [
+ "SMB1001_1_10",
+ "SMB1001_1_12",
+ "SMB1001_1_2",
+ "SMB1001_1_3",
+ "SMB1001_1_4",
+ "SMB1001_1_8",
+ "SMB1001_1_9",
+ "SMB1001_2_2",
+ "SMB1001_4_7"
+ ],
"helpText": "Deploy and manage Intune templates across devices.",
"executiveText": "Deploys standardized device management configurations across all corporate devices, ensuring consistent security policies, application settings, and compliance requirements. This template-based approach streamlines device management while maintaining uniform security standards across the organization.",
"addedComponent": [
@@ -5629,6 +5934,15 @@
"SMB1001 (1.10)",
"SMB1001 (1.12)"
],
+ "appliesToTest": [
+ "SMB1001_1_10",
+ "SMB1001_1_12",
+ "SMB1001_1_2",
+ "SMB1001_1_3",
+ "SMB1001_1_4",
+ "SMB1001_1_8",
+ "SMB1001_1_9"
+ ],
"helpText": "Deploy and maintain Intune reusable settings templates that can be referenced by multiple policies.",
"executiveText": "Creates and keeps reusable Intune settings templates consistent so common firewall and configuration blocks can be reused across many policies.",
"addedComponent": [
@@ -5714,6 +6028,24 @@
"SMB1001 (2.8)",
"SMB1001 (2.9)"
],
+ "appliesToTest": [
+ "CIS_5_2_2_1",
+ "CIS_5_2_2_10",
+ "CIS_5_2_2_11",
+ "CIS_5_2_2_12",
+ "CIS_5_2_2_2",
+ "CIS_5_2_2_3",
+ "CIS_5_2_2_4",
+ "CIS_5_2_2_5",
+ "CIS_5_2_2_6",
+ "CIS_5_2_2_7",
+ "CIS_5_2_2_8",
+ "CIS_5_2_2_9",
+ "SMB1001_2_5",
+ "SMB1001_2_6",
+ "SMB1001_2_8",
+ "SMB1001_2_9"
+ ],
"helpText": "Manage conditional access policies for better security.",
"executiveText": "Deploys standardized conditional access policies that automatically enforce security requirements based on user location, device compliance, and risk factors. These templates ensure consistent security controls across the organization while enabling secure access to business resources.",
"addedComponent": [
@@ -5787,6 +6119,7 @@
"multi": true,
"cat": "Templates",
"tag": ["CIS M365 6.0.1 (5.1.3.1)"],
+ "appliesToTest": ["CIS_5_1_3_1"],
"disabledFeatures": { "report": true, "warn": true, "remediate": false },
"impact": "Medium Impact",
"addedDate": "2023-12-30",
@@ -6613,6 +6946,7 @@
"name": "standards.EnforcePrivateGroups",
"cat": "Entra (AAD) Standards",
"tag": ["CIS M365 6.0.1 (1.2.1)"],
+ "appliesToTest": ["CIS_1_2_1"],
"helpText": "Sets all public Microsoft 365 groups to private automatically. Groups can be excluded by display name keyword.",
"docsDescription": "Ensures only organisation-managed or approved public groups exist by automatically switching public Microsoft 365 (Unified) groups to private visibility. Groups whose display name matches any of the configured exclusion keywords are left unchanged. This aligns with CIS M365 6.0.1 benchmark control 1.2.1.",
"executiveText": "Enforces private visibility on all Microsoft 365 groups to prevent unauthorised external access to group resources such as Teams, SharePoint sites, and Planner boards. Approved public groups can be excluded by name, ensuring governance while retaining flexibility for intentionally public collaboration spaces.",
@@ -6646,6 +6980,7 @@
"name": "standards.EmptyFilterIPAllowList",
"cat": "Defender Standards",
"tag": ["CIS M365 6.0.1 (2.1.12)"],
+ "appliesToTest": ["CIS_2_1_12"],
"helpText": "Ensures the connection filter IP allow list is not used. IPs on this list bypass spam, spoof, and authentication checks.",
"docsDescription": "IPs on the connection filter allow list bypass spam, spoof, and authentication checks. CIS recommends keeping this list empty to ensure all inbound email is properly scanned. This standard checks that the IPAllowList on the Default hosted connection filter policy is empty and can remediate by clearing it.",
"executiveText": "Ensures the Exchange Online connection filter IP allow list is empty, preventing any IP addresses from bypassing spam filtering, spoofing checks, and sender authentication. Keeping this list empty ensures all inbound email undergoes full security scanning, reducing the risk of phishing and malware delivery through trusted-but-compromised sources.",
@@ -6668,6 +7003,7 @@
"name": "standards.TeamsZAP",
"cat": "Defender Standards",
"tag": ["CIS M365 6.0.1 (2.4.4)"],
+ "appliesToTest": ["CIS_2_4_4"],
"helpText": "Ensures Zero-hour auto purge (ZAP) is enabled for Microsoft Teams, automatically removing malicious messages after delivery.",
"docsDescription": "Zero-hour auto purge (ZAP) for Microsoft Teams retroactively detects and neutralises malicious messages that have already been delivered in Teams chats. Enabling ZAP ensures that phishing, malware, and high confidence phishing messages are automatically purged even after initial delivery, aligning with CIS M365 6.0.1 benchmark control 2.4.4.",
"executiveText": "Enables Zero-hour auto purge for Microsoft Teams to automatically detect and remove malicious messages after delivery. This provides an additional layer of protection against phishing and malware that may bypass initial scanning, ensuring threats are neutralised even after they reach users.",
@@ -6690,6 +7026,7 @@
"name": "standards.CollaborationDomainRestriction",
"cat": "Entra (AAD) Standards",
"tag": ["CIS M365 6.0.1 (5.1.6.1)"],
+ "appliesToTest": ["CIS_5_1_6_1"],
"helpText": "Restricts B2B collaboration invitations to a specified list of allowed domains. If no domains are provided, the standard will alert and report on whether any domain restrictions are currently configured.",
"docsDescription": "By default, Microsoft Entra ID allows collaboration invitations to be sent to any external domain. CIS recommends restricting B2B collaboration invitations to only approved domains to reduce the risk of data exfiltration and unauthorized access. This standard checks the B2B management policy for an allow list of domains and can remediate by setting the allowed domains list.",
"executiveText": "Restricts external collaboration invitations to approved domains only, preventing users from sharing data with unapproved external organizations. This reduces the risk of data exfiltration and ensures that collaboration occurs only with trusted business partners.",
diff --git a/src/pages/tenant/standards/templates/template.jsx b/src/pages/tenant/standards/templates/template.jsx
index 19cf27c788f2..3890212fdbd8 100644
--- a/src/pages/tenant/standards/templates/template.jsx
+++ b/src/pages/tenant/standards/templates/template.jsx
@@ -207,7 +207,11 @@ const Page = () => {
standard.label.toLowerCase().includes(searchQuery.toLowerCase()) ||
standard.helpText.toLowerCase().includes(searchQuery.toLowerCase()) ||
(standard.tag &&
- standard.tag.some((tag) => tag.toLowerCase().includes(searchQuery.toLowerCase()))),
+ standard.tag.some((tag) => tag.toLowerCase().includes(searchQuery.toLowerCase()))) ||
+ (standard.appliesToTest &&
+ standard.appliesToTest.some((testId) =>
+ testId.toLowerCase().includes(searchQuery.toLowerCase())
+ )),
);
const handleToggleStandard = (standardName) => {
From d8aa24676157801840144ab3822773c7b5187696 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Thu, 7 May 2026 18:31:21 +0800
Subject: [PATCH 120/181] TAP audit log prebuilt alert
---
.../CippTable/CIPPTableToptoolbar.js | 2 +-
src/data/AuditLogTemplates.json | 29 +++++++++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/src/components/CippTable/CIPPTableToptoolbar.js b/src/components/CippTable/CIPPTableToptoolbar.js
index 58d8a180813b..232c752bb2c9 100644
--- a/src/components/CippTable/CIPPTableToptoolbar.js
+++ b/src/components/CippTable/CIPPTableToptoolbar.js
@@ -1239,7 +1239,7 @@ export const CIPPTableToptoolbar = React.memo(
)}
{/* Cold start indicator */}
- {getRequestData?.data?.pages?.[0].Metadata?.ColdStart === true && (
+ {getRequestData?.data?.pages?.[0]?.Metadata?.ColdStart === true && (
diff --git a/src/data/AuditLogTemplates.json b/src/data/AuditLogTemplates.json
index 051f0dc16283..efa21ac67a53 100644
--- a/src/data/AuditLogTemplates.json
+++ b/src/data/AuditLogTemplates.json
@@ -420,5 +420,34 @@
}
]
}
+ },
+ {
+ "value": "TAPCreated",
+ "name": "A Temporary Access Pass has been created for a user",
+ "template": {
+ "preset": {
+ "value": "TAPCreated",
+ "label": "A Temporary Access Pass has been created for a user"
+ },
+ "logbook": { "value": "Audit.AzureActiveDirectory", "label": "Azure AD" },
+ "conditions": [
+ {
+ "Property": { "value": "List:Operation", "label": "Operation" },
+ "Operator": { "value": "EQ", "label": "Equals to" },
+ "Input": {
+ "value": "Update user.",
+ "label": "updated user"
+ }
+ },
+ {
+ "Property": { "value": "String", "label": "SecuredAccessPassData" },
+ "Operator": { "value": "ne", "label": "Not Equals to" },
+ "Input": {
+ "value": "[]",
+ "label": "[]"
+ }
+ }
+ ]
+ }
}
]
From d3c75d83392fd5d766ce7606279ca89af4cf1a8c Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Thu, 7 May 2026 12:46:41 +0200
Subject: [PATCH 121/181] more test suite tags
---
src/data/standards.json | 90 +++++++++++++++++++++++++++++++++++------
1 file changed, 77 insertions(+), 13 deletions(-)
diff --git a/src/data/standards.json b/src/data/standards.json
index 39116e6cdc2b..cc708f747177 100644
--- a/src/data/standards.json
+++ b/src/data/standards.json
@@ -350,7 +350,8 @@
"EIDSCAAP14",
"EIDSCAST08",
"EIDSCAST09",
- "SMB1001_2_8"
+ "SMB1001_2_8",
+ "ZTNA21792"
],
"helpText": "Disables Guest access to enumerate directory objects. This prevents guest users from seeing other users or guests in the directory.",
"docsDescription": "Sets it so guests can view only their own user profile. Permission to view other users isn't allowed. Also restricts guest users from seeing the membership of groups they're in. See exactly what get locked down in the [Microsoft documentation.](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions)",
@@ -444,7 +445,8 @@
"EIDSCAAG01",
"EIDSCAAG02",
"EIDSCAAG03",
- "SMB1001_2_8"
+ "SMB1001_2_8",
+ "ZTNA21841"
],
"helpText": "Configures the report suspicious activity settings and system credential preferences in the authentication methods policy.",
"docsDescription": "Controls the authentication methods policy settings for reporting suspicious activity and system credential preferences. These settings help enhance the security of authentication in your organization.",
@@ -712,7 +714,9 @@
"EIDSCAAF06",
"SMB1001_2_5",
"SMB1001_2_6",
- "SMB1001_2_9"
+ "SMB1001_2_9",
+ "ZTNA21838",
+ "ZTNA21839"
],
"helpText": "Enables the FIDO2 authenticationMethod for the tenant",
"docsDescription": "Enables FIDO2 capabilities for the tenant. This allows users to use FIDO2 keys like a Yubikey for authentication.",
@@ -817,7 +821,7 @@
"name": "standards.PasswordExpireDisabled",
"cat": "Entra (AAD) Standards",
"tag": ["CIS M365 6.0.1 (1.3.1)", "PWAgePolicyNew"],
- "appliesToTest": ["CIS_1_3_1"],
+ "appliesToTest": ["CIS_1_3_1", "ZTNA21811"],
"helpText": "Disables the expiration of passwords for the tenant by setting the password expiration policy to never expire for any user.",
"docsDescription": "Sets passwords to never expire for tenant, recommended to use in conjunction with secure password requirements.",
"executiveText": "Eliminates mandatory password expiration requirements, allowing employees to keep strong passwords indefinitely rather than forcing frequent changes that often lead to weaker passwords. This modern security approach reduces help desk calls and improves overall password security when combined with multi-factor authentication.",
@@ -943,6 +947,7 @@
"EIDSCACR02",
"EIDSCACR03",
"EIDSCACR04",
+ "ZTNA21809",
"ZTNA21869"
],
"helpText": "Enables App consent admin requests for the tenant via the GA role. Does not overwrite existing reviewer settings",
@@ -1132,6 +1137,7 @@
"tag": ["CIS M365 6.0.1 (1.3.4)", "SMB1001 (2.8)"],
"appliesToTest": [
"CIS_1_3_4",
+ "EIDSCAAP05",
"SMB1001_2_8"
],
"helpText": "**Requires 'Billing Administrator' GDAP role.** This standard disables all self service licenses and enables all exclusions",
@@ -1203,7 +1209,8 @@
"EIDSCACP04",
"ZTNA21772",
"ZTNA21774",
- "ZTNA21807"
+ "ZTNA21807",
+ "ZTNA21810"
],
"helpText": "Disables users from being able to consent to applications, except for those specified in the field below",
"docsDescription": "Requires users to get administrator consent before sharing data with applications. You can preapprove specific applications.",
@@ -1250,7 +1257,8 @@
"CIS_5_1_6_3",
"EIDSCAAP04",
"EIDSCAAP07",
- "SMB1001_2_8"
+ "SMB1001_2_8",
+ "ZTNA21791"
],
"helpText": "This setting controls who can invite guests to your directory to collaborate on resources secured by your company, such as SharePoint sites or Azure resources.",
"executiveText": "Controls who within the organization can invite external partners and vendors to access company resources, ensuring proper oversight of external access while enabling necessary business collaboration. This helps maintain security while supporting partnership and vendor relationships.",
@@ -1356,6 +1364,7 @@
"CIS_5_2_3_5",
"EIDSCAAS04",
"SMB1001_2_5",
+ "SMB1001_2_5_L4",
"SMB1001_2_6",
"SMB1001_2_9"
],
@@ -1385,6 +1394,7 @@
"CIS_5_2_3_5",
"EIDSCAAV01",
"SMB1001_2_5",
+ "SMB1001_2_5_L4",
"SMB1001_2_6",
"SMB1001_2_9"
],
@@ -1412,6 +1422,7 @@
"appliesToTest": [
"CIS_5_2_3_7",
"SMB1001_2_5",
+ "SMB1001_2_5_L4",
"SMB1001_2_6",
"SMB1001_2_9"
],
@@ -1560,7 +1571,8 @@
"impactColour": "warning",
"addedDate": "2026-03-13",
"powershellEquivalent": "Graph API",
- "recommendedBy": []
+ "recommendedBy": [],
+ "appliesToTest": ["ZTNA21773", "ZTNA21896", "ZTNA21992"]
},
{
"name": "standards.OutBoundSpamAlert",
@@ -2030,6 +2042,7 @@
"CISAMSEXO31",
"CIS_2_1_9",
"ORCA108",
+ "ORCA108_1",
"SMB1001_2_12"
],
"helpText": "Enables DKIM for all domains that currently support it",
@@ -2962,6 +2975,7 @@
"ORCA119",
"ORCA156",
"ORCA179",
+ "ORCA189_2",
"ORCA226",
"ORCA236",
"ORCA237",
@@ -3228,6 +3242,7 @@
"appliesToTest": [
"CIS_2_1_4",
"ORCA158",
+ "ORCA189",
"ORCA227"
],
"helpText": "This creates a Safe Attachment policy",
@@ -3296,7 +3311,7 @@
"name": "standards.AtpPolicyForO365",
"cat": "Defender Standards",
"tag": ["CIS M365 6.0.1 (2.1.5)", "NIST CSF 2.0 (DE.CM-09)"],
- "appliesToTest": ["CIS_2_1_5"],
+ "appliesToTest": ["CIS_2_1_5", "ORCA225"],
"helpText": "This creates a Atp policy that enables Defender for Office 365 for SharePoint, OneDrive and Microsoft Teams.",
"addedComponent": [
{
@@ -3398,8 +3413,10 @@
"CIS_2_1_11",
"CIS_2_1_2",
"CIS_2_1_3",
+ "ORCA120_malware",
"ORCA121",
"ORCA124",
+ "ORCA205",
"ORCA232",
"ZTNA21817",
"ZTNA21819"
@@ -3542,6 +3559,12 @@
"ORCA102",
"ORCA103",
"ORCA104",
+ "ORCA109",
+ "ORCA110",
+ "ORCA118_1",
+ "ORCA118_3",
+ "ORCA120_phish",
+ "ORCA120_spam",
"ORCA123",
"ORCA139",
"ORCA140",
@@ -4352,7 +4375,8 @@
"appliesToTest": [
"CIS_5_1_4_2",
"ZTNA21801",
- "ZTNA21802"
+ "ZTNA21802",
+ "ZTNA21837"
],
"helpText": "Sets the maximum number of devices that can be registered by a user. A value of 0 disables device registration by users",
"executiveText": "Limits how many devices each employee can register for corporate access, preventing excessive device proliferation while accommodating legitimate business needs. This helps maintain security oversight and prevents potential abuse of device registration privileges.",
@@ -5485,7 +5509,7 @@
"name": "standards.TeamsFederationConfiguration",
"cat": "Teams Standards",
"tag": ["CIS M365 6.0.1 (8.2.1)"],
- "appliesToTest": ["CIS_8_2_1"],
+ "appliesToTest": ["CIS_8_2_1", "CIS_8_2_4"],
"helpText": "Sets the properties of the Global federation configuration.",
"docsDescription": "Sets the properties of the Global federation configuration. Federation configuration settings determine whether or not your users can communicate with users who have SIP accounts with a federated organization.",
"executiveText": "Configures how the organization federates with external organizations for Teams communication, controlling whether employees can communicate with specific external domains or all external organizations. This setting enables secure inter-organizational collaboration while maintaining control over external communications.",
@@ -5835,7 +5859,29 @@
"SMB1001_1_8",
"SMB1001_1_9",
"SMB1001_2_2",
- "SMB1001_4_7"
+ "SMB1001_4_7",
+ "ZTNA24540",
+ "ZTNA24541",
+ "ZTNA24542",
+ "ZTNA24543",
+ "ZTNA24545",
+ "ZTNA24547",
+ "ZTNA24548",
+ "ZTNA24549",
+ "ZTNA24550",
+ "ZTNA24552",
+ "ZTNA24553",
+ "ZTNA24564",
+ "ZTNA24568",
+ "ZTNA24569",
+ "ZTNA24572",
+ "ZTNA24574",
+ "ZTNA24575",
+ "ZTNA24576",
+ "ZTNA24784",
+ "ZTNA24839",
+ "ZTNA24840",
+ "ZTNA24870"
],
"helpText": "Deploy and manage Intune templates across devices.",
"executiveText": "Deploys standardized device management configurations across all corporate devices, ensuring consistent security policies, application settings, and compliance requirements. This template-based approach streamlines device management while maintaining uniform security standards across the organization.",
@@ -5941,7 +5987,13 @@
"SMB1001_1_3",
"SMB1001_1_4",
"SMB1001_1_8",
- "SMB1001_1_9"
+ "SMB1001_1_9",
+ "ZTNA24540",
+ "ZTNA24550",
+ "ZTNA24552",
+ "ZTNA24574",
+ "ZTNA24575",
+ "ZTNA24784"
],
"helpText": "Deploy and maintain Intune reusable settings templates that can be referenced by multiple policies.",
"executiveText": "Creates and keeps reusable Intune settings templates consistent so common firewall and configuration blocks can be reused across many policies.",
@@ -6044,7 +6096,19 @@
"SMB1001_2_5",
"SMB1001_2_6",
"SMB1001_2_8",
- "SMB1001_2_9"
+ "SMB1001_2_9",
+ "ZTNA21783",
+ "ZTNA21786",
+ "ZTNA21806",
+ "ZTNA21808",
+ "ZTNA21824",
+ "ZTNA21825",
+ "ZTNA21828",
+ "ZTNA21830",
+ "ZTNA21883",
+ "ZTNA21892",
+ "ZTNA21941",
+ "ZTNA24827"
],
"helpText": "Manage conditional access policies for better security.",
"executiveText": "Deploys standardized conditional access policies that automatically enforce security requirements based on user location, device compliance, and risk factors. These templates ensure consistent security controls across the organization while enabling secure access to business resources.",
From 7c057478c680134722ffbaf43087185c3a999f17 Mon Sep 17 00:00:00 2001
From: Joachim
Date: Thu, 7 May 2026 13:28:05 +0200
Subject: [PATCH 122/181] Add Usage Location field to JIT Admin and template
forms (#5910)
---
.../administration/jit-admin-templates/add.jsx | 14 ++++++++++++++
.../administration/jit-admin-templates/edit.jsx | 14 ++++++++++++++
.../identity/administration/jit-admin/add.jsx | 17 +++++++++++++++++
3 files changed, 45 insertions(+)
diff --git a/src/pages/identity/administration/jit-admin-templates/add.jsx b/src/pages/identity/administration/jit-admin-templates/add.jsx
index 986e7ea378d1..0a57a8b33882 100644
--- a/src/pages/identity/administration/jit-admin-templates/add.jsx
+++ b/src/pages/identity/administration/jit-admin-templates/add.jsx
@@ -9,6 +9,7 @@ import { CippFormDomainSelector } from "../../../../components/CippComponents/Ci
import { CippFormUserSelector } from "../../../../components/CippComponents/CippFormUserSelector";
import { CippFormGroupSelector } from "../../../../components/CippComponents/CippFormGroupSelector";
import gdaproles from "../../../../data/GDAPRoles.json";
+import countryList from "../../../../data/countryList.json";
import { useSettings } from "../../../../hooks/use-settings";
import { useEffect } from "react";
@@ -352,6 +353,19 @@ const Page = () => {
/>
)}
+
+ ({
+ label: Name,
+ value: Code,
+ }))}
+ formControl={formControl}
+ />
+
{
/>
)}
+
+ ({
+ label: Name,
+ value: Code,
+ }))}
+ formControl={formControl}
+ />
+
{
if (template.defaultExistingUser) {
formControl.setValue("existingUser", template.defaultExistingUser, { shouldDirty: true });
}
+ if (template.defaultUsageLocation) {
+ formControl.setValue("usageLocation", template.defaultUsageLocation, { shouldDirty: true });
+ }
// Dates
if (template.defaultDuration) {
@@ -343,6 +347,19 @@ const Page = () => {
validators={{ required: "Domain is required" }}
/>
+
+ ({
+ label: Name,
+ value: Code,
+ }))}
+ formControl={formControl}
+ />
+
From 397d0c9ff5e9ddf3c5df02b27aedf0b2845c2cb2 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Fri, 8 May 2026 00:19:28 +0200
Subject: [PATCH 123/181] add purview section
---
.../CippDeployCompliancePolicyDrawer.jsx | 236 ++++++++++++++++++
.../CippComponents/CippPolicyImportDrawer.jsx | 41 ++-
src/layouts/config.js | 46 ++++
.../compliance/dlp-templates/index.js | 107 ++++++++
src/pages/security/compliance/dlp/index.js | 111 ++++++++
.../compliance/labels-templates/index.js | 114 +++++++++
src/pages/security/compliance/labels/index.js | 90 +++++++
.../compliance/sit-templates/index.js | 107 ++++++++
src/pages/security/compliance/sit/index.js | 81 ++++++
9 files changed, 923 insertions(+), 10 deletions(-)
create mode 100644 src/components/CippComponents/CippDeployCompliancePolicyDrawer.jsx
create mode 100644 src/pages/security/compliance/dlp-templates/index.js
create mode 100644 src/pages/security/compliance/dlp/index.js
create mode 100644 src/pages/security/compliance/labels-templates/index.js
create mode 100644 src/pages/security/compliance/labels/index.js
create mode 100644 src/pages/security/compliance/sit-templates/index.js
create mode 100644 src/pages/security/compliance/sit/index.js
diff --git a/src/components/CippComponents/CippDeployCompliancePolicyDrawer.jsx b/src/components/CippComponents/CippDeployCompliancePolicyDrawer.jsx
new file mode 100644
index 000000000000..c881757e087b
--- /dev/null
+++ b/src/components/CippComponents/CippDeployCompliancePolicyDrawer.jsx
@@ -0,0 +1,236 @@
+import React, { useEffect, useState } from "react";
+import { Button, Divider, Stack } from "@mui/material";
+import { Grid } from "@mui/system";
+import { useForm, useFormState, useWatch } from "react-hook-form";
+import { RocketLaunch } from "@mui/icons-material";
+import { CippOffCanvas } from "./CippOffCanvas";
+import CippFormComponent from "./CippFormComponent";
+import { CippFormTenantSelector } from "./CippFormTenantSelector";
+import { CippApiResults } from "./CippApiResults";
+import { ApiPostCall } from "../../api/ApiCall";
+
+const MODE_CONFIG = {
+ DlpCompliancePolicy: {
+ title: "Deploy DLP Compliance Policy",
+ buttonLabel: "Deploy DLP Policy",
+ postUrl: "/api/AddDlpCompliancePolicy",
+ listTemplatesUrl: "/api/ListDlpCompliancePolicyTemplates",
+ templateQueryKey: "TemplateListDlpCompliancePolicy",
+ relatedQueryKeys: ["ListDlpCompliancePolicy", "ListDlpCompliancePolicyTemplates"],
+ placeholder: `{
+ "Name": "Block Credit Card data",
+ "Comment": "Blocks documents containing credit card numbers",
+ "Mode": "Enable",
+ "ExchangeLocation": "All",
+ "SharePointLocation": "All",
+ "OneDriveLocation": "All",
+ "RuleParams": {
+ "Name": "Block Credit Card data Rule",
+ "ContentContainsSensitiveInformation": [{ "name": "Credit Card Number", "minCount": "1" }],
+ "BlockAccess": true
+ }
+}`,
+ },
+ SensitivityLabel: {
+ title: "Deploy Sensitivity Label",
+ buttonLabel: "Deploy Sensitivity Label",
+ postUrl: "/api/AddSensitivityLabel",
+ listTemplatesUrl: "/api/ListSensitivityLabelTemplates",
+ templateQueryKey: "TemplateListSensitivityLabel",
+ relatedQueryKeys: ["ListSensitivityLabel", "ListSensitivityLabelTemplates"],
+ placeholder: `{
+ "Name": "Confidential",
+ "DisplayName": "Confidential",
+ "Tooltip": "Confidential data, do not share externally",
+ "Comment": "Internal-only confidential classification",
+ "ContentType": "File, Email",
+ "EncryptionEnabled": true,
+ "EncryptionProtectionType": "Template",
+ "ContentMarkingHeaderEnabled": true,
+ "ContentMarkingHeaderText": "Confidential - Internal Use Only",
+ "PolicyParams": {
+ "Name": "Confidential Label Policy",
+ "ExchangeLocation": "All",
+ "Settings": [
+ ["mandatory", "false"],
+ ["disablemandatoryinoutlook", "true"]
+ ]
+ }
+}`,
+ },
+ SensitiveInfoType: {
+ title: "Deploy Sensitive Information Type",
+ buttonLabel: "Deploy SIT",
+ postUrl: "/api/AddSensitiveInfoType",
+ listTemplatesUrl: "/api/ListSensitiveInfoTypeTemplates",
+ templateQueryKey: "TemplateListSensitiveInfoType",
+ relatedQueryKeys: ["ListSensitiveInfoType", "ListSensitiveInfoTypeTemplates"],
+ placeholder: `{
+ "Name": "Custom Employee ID",
+ "Description": "Internal Employee ID format EMP-NNNNN",
+ "Pattern": "EMP-\\\\d{5}",
+ "Confidence": "High",
+ "Recommended": true
+}
+
+// Or with a base64-encoded XML rule pack:
+// {
+// "Name": "Custom Rule Pack",
+// "FileDataBase64": ""
+// }`,
+ },
+};
+
+export const CippDeployCompliancePolicyDrawer = ({
+ mode,
+ buttonText,
+ requiredPermissions = [],
+ PermissionButton = Button,
+}) => {
+ const config = MODE_CONFIG[mode];
+
+ const [drawerVisible, setDrawerVisible] = useState(false);
+
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: {
+ selectedTenants: [],
+ TemplateList: null,
+ PowerShellCommand: "",
+ },
+ });
+
+ const { isValid } = useFormState({ control: formControl.control });
+
+ const templateListVal = useWatch({ control: formControl.control, name: "TemplateList" });
+
+ useEffect(() => {
+ if (templateListVal?.value) {
+ formControl.setValue("PowerShellCommand", JSON.stringify(templateListVal.value));
+ }
+ }, [templateListVal, formControl]);
+
+ const deployPolicy = ApiPostCall({
+ urlFromData: true,
+ relatedQueryKeys: config?.relatedQueryKeys ?? [],
+ });
+
+ useEffect(() => {
+ if (deployPolicy.isSuccess) {
+ formControl.reset({
+ selectedTenants: [],
+ TemplateList: null,
+ PowerShellCommand: "",
+ });
+ }
+ }, [deployPolicy.isSuccess, formControl]);
+
+ if (!config) {
+ return null;
+ }
+
+ const handleSubmit = () => {
+ formControl.trigger();
+ if (!isValid) return;
+ deployPolicy.mutate({
+ url: config.postUrl,
+ data: formControl.getValues(),
+ });
+ };
+
+ const handleCloseDrawer = () => {
+ setDrawerVisible(false);
+ formControl.reset({
+ selectedTenants: [],
+ TemplateList: null,
+ PowerShellCommand: "",
+ });
+ };
+
+ return (
+ <>
+ setDrawerVisible(true)}
+ startIcon={}
+ >
+ {buttonText ?? config.buttonLabel}
+
+
+
+ {deployPolicy.isLoading
+ ? "Deploying..."
+ : deployPolicy.isSuccess
+ ? "Deploy Another"
+ : "Deploy"}
+
+
+ Close
+
+
+ }
+ >
+
+
+
+
+
+
+
+
+ option,
+ url: config.listTemplatesUrl,
+ }}
+ placeholder="Select a template or enter PowerShell JSON manually"
+ />
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
diff --git a/src/components/CippComponents/CippPolicyImportDrawer.jsx b/src/components/CippComponents/CippPolicyImportDrawer.jsx
index bbd1dbe73751..a4149928b19c 100644
--- a/src/components/CippComponents/CippPolicyImportDrawer.jsx
+++ b/src/components/CippComponents/CippPolicyImportDrawer.jsx
@@ -21,12 +21,40 @@ import { CippApiResults } from './CippApiResults'
import { CippFormTenantSelector } from './CippFormTenantSelector'
import { CippFolderNavigation } from './CippFolderNavigation'
+// Modes that only support browsing community repos (no tenant fallback)
+const REPO_ONLY_MODES = [
+ 'ReportBuilder',
+ 'DlpCompliancePolicy',
+ 'SensitivityLabel',
+ 'SensitiveInfoType',
+]
+
+const RELATED_QUERY_KEYS_BY_MODE = {
+ ConditionalAccess: ['ListCATemplates-table'],
+ Standards: ['listStandardTemplates'],
+ ReportBuilder: ['ListReportBuilderTemplates'],
+ DlpCompliancePolicy: ['ListDlpCompliancePolicyTemplates'],
+ SensitivityLabel: ['ListSensitivityLabelTemplates'],
+ SensitiveInfoType: ['ListSensitiveInfoTypeTemplates'],
+}
+
+const MODE_LABELS = {
+ ReportBuilder: 'Report Template',
+ DlpCompliancePolicy: 'DLP Policy',
+ SensitivityLabel: 'Sensitivity Label',
+ SensitiveInfoType: 'Sensitive Info Type',
+}
+
+const DEFAULT_QUERY_KEYS = ['ListIntuneTemplates-table', 'ListIntuneTemplates-autcomplete']
+
export const CippPolicyImportDrawer = ({
buttonText = 'Browse Catalog',
requiredPermissions = [],
PermissionButton = Button,
mode = 'Intune',
}) => {
+ const isRepoOnlyMode = REPO_ONLY_MODES.includes(mode)
+
const [drawerVisible, setDrawerVisible] = useState(false)
const [searchQuery, setSearchQuery] = useState('')
const [viewDialogOpen, setViewDialogOpen] = useState(false)
@@ -73,14 +101,7 @@ export const CippPolicyImportDrawer = ({
const importPolicy = ApiPostCall({
urlFromData: true,
- relatedQueryKeys:
- mode === 'ConditionalAccess'
- ? ['ListCATemplates-table']
- : mode === 'Standards'
- ? ['listStandardTemplates']
- : mode === 'ReportBuilder'
- ? ['ListReportBuilderTemplates']
- : ['ListIntuneTemplates-table', 'ListIntuneTemplates-autcomplete'],
+ relatedQueryKeys: RELATED_QUERY_KEYS_BY_MODE[mode] || DEFAULT_QUERY_KEYS,
})
const viewPolicyQuery = ApiPostCall({
@@ -298,7 +319,7 @@ export const CippPolicyImportDrawer = ({
{buttonText}
option.value)
: []),
- ...(mode !== 'ReportBuilder'
+ ...(!isRepoOnlyMode
? [{ label: 'Get template from existing tenant', value: 'tenant' }]
: []),
]}
diff --git a/src/layouts/config.js b/src/layouts/config.js
index ec6a017bf71b..aac86af27397 100644
--- a/src/layouts/config.js
+++ b/src/layouts/config.js
@@ -301,6 +301,9 @@ export const nativeMenuItems = [
'Security.Alert.*',
'Tenant.DeviceCompliance.*',
'Security.SafeLinksPolicy.*',
+ 'Security.DlpCompliancePolicy.*',
+ 'Security.SensitivityLabel.*',
+ 'Security.SensitiveInfoType.*',
],
items: [
{
@@ -383,6 +386,49 @@ export const nativeMenuItems = [
},
],
},
+ {
+ title: 'Purview Compliance',
+ permissions: [
+ 'Security.DlpCompliancePolicy.*',
+ 'Security.SensitivityLabel.*',
+ 'Security.SensitiveInfoType.*',
+ ],
+ items: [
+ {
+ title: 'DLP Policies',
+ path: '/security/compliance/dlp',
+ permissions: ['Security.DlpCompliancePolicy.*'],
+ },
+ {
+ title: 'DLP Policy Templates',
+ path: '/security/compliance/dlp-templates',
+ permissions: ['Security.DlpCompliancePolicy.*'],
+ scope: 'global',
+ },
+ {
+ title: 'Sensitivity Labels',
+ path: '/security/compliance/labels',
+ permissions: ['Security.SensitivityLabel.*'],
+ },
+ {
+ title: 'Sensitivity Label Templates',
+ path: '/security/compliance/labels-templates',
+ permissions: ['Security.SensitivityLabel.*'],
+ scope: 'global',
+ },
+ {
+ title: 'Sensitive Information Types',
+ path: '/security/compliance/sit',
+ permissions: ['Security.SensitiveInfoType.*'],
+ },
+ {
+ title: 'Sensitive Info Type Templates',
+ path: '/security/compliance/sit-templates',
+ permissions: ['Security.SensitiveInfoType.*'],
+ scope: 'global',
+ },
+ ],
+ },
],
},
{
diff --git a/src/pages/security/compliance/dlp-templates/index.js b/src/pages/security/compliance/dlp-templates/index.js
new file mode 100644
index 000000000000..b2b597c51167
--- /dev/null
+++ b/src/pages/security/compliance/dlp-templates/index.js
@@ -0,0 +1,107 @@
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { GitHub } from "@mui/icons-material";
+import { ApiGetCall } from "../../../../api/ApiCall";
+import { CippPolicyImportDrawer } from "../../../../components/CippComponents/CippPolicyImportDrawer.jsx";
+import { CippDeployCompliancePolicyDrawer } from "../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx";
+import { PermissionButton } from "../../../../utils/permissions.js";
+
+const Page = () => {
+ const pageTitle = "DLP Compliance Policy Templates";
+ const cardButtonPermissions = ["Security.DlpCompliancePolicy.ReadWrite"];
+
+ const integrations = ApiGetCall({
+ url: "/api/ListExtensionsConfig",
+ queryKey: "Integrations",
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
+
+ const actions = [
+ {
+ label: "Save to GitHub",
+ type: "POST",
+ url: "/api/ExecCommunityRepo",
+ icon: ,
+ data: {
+ Action: "UploadTemplate",
+ GUID: "GUID",
+ },
+ fields: [
+ {
+ label: "Repository",
+ name: "FullName",
+ type: "select",
+ api: {
+ url: "/api/ListCommunityRepos",
+ data: { WriteAccess: true },
+ queryKey: "CommunityRepos-Write",
+ dataKey: "Results",
+ valueField: "FullName",
+ labelField: "FullName",
+ },
+ multiple: false,
+ creatable: false,
+ required: true,
+ validators: { required: { value: true, message: "This field is required" } },
+ },
+ {
+ label: "Commit Message",
+ placeholder: "Enter a commit message for adding this file to GitHub",
+ name: "Message",
+ type: "textField",
+ multiline: true,
+ required: true,
+ rows: 4,
+ },
+ ],
+ confirmText: "Are you sure you want to save this template to the selected repository?",
+ condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
+ },
+ {
+ label: "Delete Template",
+ type: "POST",
+ url: "/api/RemoveDlpCompliancePolicyTemplate",
+ data: { ID: "GUID" },
+ confirmText: "Do you want to delete the template?",
+ icon: ,
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: ["name", "comments", "Mode", "Workload", "Enabled", "GUID"],
+ actions: actions,
+ };
+
+ const simpleColumns = ["name", "comments", "Mode", "Workload", "Enabled", "GUID"];
+
+ return (
+
+
+
+ >
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
diff --git a/src/pages/security/compliance/dlp/index.js b/src/pages/security/compliance/dlp/index.js
new file mode 100644
index 000000000000..cfafc189d642
--- /dev/null
+++ b/src/pages/security/compliance/dlp/index.js
@@ -0,0 +1,111 @@
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { Book, Block, Check } from "@mui/icons-material";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { CippDeployCompliancePolicyDrawer } from "../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx";
+import { PermissionButton } from "../../../../utils/permissions.js";
+
+const Page = () => {
+ const pageTitle = "DLP Compliance Policies";
+ const apiUrl = "/api/ListDlpCompliancePolicy";
+ const cardButtonPermissions = ["Security.DlpCompliancePolicy.ReadWrite"];
+
+ const actions = [
+ {
+ label: "Create template based on policy",
+ type: "POST",
+ icon: ,
+ url: "/api/AddDlpCompliancePolicyTemplate",
+ dataFunction: (data) => {
+ return { ...data };
+ },
+ confirmText: "Are you sure you want to create a template based on this DLP policy?",
+ },
+ {
+ label: "Enable Policy",
+ type: "POST",
+ icon: ,
+ url: "/api/EditDlpCompliancePolicy",
+ data: {
+ State: "!enable",
+ Identity: "Name",
+ },
+ confirmText: "Are you sure you want to enable this DLP policy?",
+ condition: (row) => row.Enabled === false,
+ },
+ {
+ label: "Disable Policy",
+ type: "POST",
+ icon: ,
+ url: "/api/EditDlpCompliancePolicy",
+ data: {
+ State: "!disable",
+ Identity: "Name",
+ },
+ confirmText: "Are you sure you want to disable this DLP policy?",
+ condition: (row) => row.Enabled === true,
+ },
+ {
+ label: "Delete Policy",
+ type: "POST",
+ icon: ,
+ url: "/api/RemoveDlpCompliancePolicy",
+ data: {
+ Identity: "Name",
+ },
+ confirmText: "Are you sure you want to delete this DLP policy?",
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: [
+ "Name",
+ "Comment",
+ "Mode",
+ "Enabled",
+ "Workload",
+ "ExchangeLocation",
+ "SharePointLocation",
+ "OneDriveLocation",
+ "TeamsLocation",
+ "EndpointDlpLocation",
+ "RuleCount",
+ "CreatedBy",
+ "WhenCreatedUTC",
+ "WhenChangedUTC",
+ ],
+ actions: actions,
+ };
+
+ const simpleColumns = [
+ "Name",
+ "Mode",
+ "Enabled",
+ "Workload",
+ "RuleCount",
+ "CreatedBy",
+ "WhenCreatedUTC",
+ "WhenChangedUTC",
+ ];
+
+ return (
+
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
diff --git a/src/pages/security/compliance/labels-templates/index.js b/src/pages/security/compliance/labels-templates/index.js
new file mode 100644
index 000000000000..3a4a5a13119d
--- /dev/null
+++ b/src/pages/security/compliance/labels-templates/index.js
@@ -0,0 +1,114 @@
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { GitHub } from "@mui/icons-material";
+import { ApiGetCall } from "../../../../api/ApiCall";
+import { CippPolicyImportDrawer } from "../../../../components/CippComponents/CippPolicyImportDrawer.jsx";
+import { CippDeployCompliancePolicyDrawer } from "../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx";
+import { PermissionButton } from "../../../../utils/permissions.js";
+
+const Page = () => {
+ const pageTitle = "Sensitivity Label Templates";
+ const cardButtonPermissions = ["Security.SensitivityLabel.ReadWrite"];
+
+ const integrations = ApiGetCall({
+ url: "/api/ListExtensionsConfig",
+ queryKey: "Integrations",
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
+
+ const actions = [
+ {
+ label: "Save to GitHub",
+ type: "POST",
+ url: "/api/ExecCommunityRepo",
+ icon: ,
+ data: {
+ Action: "UploadTemplate",
+ GUID: "GUID",
+ },
+ fields: [
+ {
+ label: "Repository",
+ name: "FullName",
+ type: "select",
+ api: {
+ url: "/api/ListCommunityRepos",
+ data: { WriteAccess: true },
+ queryKey: "CommunityRepos-Write",
+ dataKey: "Results",
+ valueField: "FullName",
+ labelField: "FullName",
+ },
+ multiple: false,
+ creatable: false,
+ required: true,
+ validators: { required: { value: true, message: "This field is required" } },
+ },
+ {
+ label: "Commit Message",
+ placeholder: "Enter a commit message for adding this file to GitHub",
+ name: "Message",
+ type: "textField",
+ multiline: true,
+ required: true,
+ rows: 4,
+ },
+ ],
+ confirmText: "Are you sure you want to save this template to the selected repository?",
+ condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
+ },
+ {
+ label: "Delete Template",
+ type: "POST",
+ url: "/api/RemoveSensitivityLabelTemplate",
+ data: { ID: "GUID" },
+ confirmText: "Do you want to delete the template?",
+ icon: ,
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: [
+ "name",
+ "DisplayName",
+ "comments",
+ "ContentType",
+ "EncryptionEnabled",
+ "GUID",
+ ],
+ actions: actions,
+ };
+
+ const simpleColumns = ["name", "DisplayName", "comments", "ContentType", "EncryptionEnabled", "GUID"];
+
+ return (
+
+
+
+ >
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
diff --git a/src/pages/security/compliance/labels/index.js b/src/pages/security/compliance/labels/index.js
new file mode 100644
index 000000000000..53f1259877e9
--- /dev/null
+++ b/src/pages/security/compliance/labels/index.js
@@ -0,0 +1,90 @@
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { Book } from "@mui/icons-material";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { CippDeployCompliancePolicyDrawer } from "../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx";
+import { PermissionButton } from "../../../../utils/permissions.js";
+
+const Page = () => {
+ const pageTitle = "Sensitivity Labels";
+ const apiUrl = "/api/ListSensitivityLabel";
+ const cardButtonPermissions = ["Security.SensitivityLabel.ReadWrite"];
+
+ const actions = [
+ {
+ label: "Create template based on label",
+ type: "POST",
+ icon: ,
+ url: "/api/AddSensitivityLabelTemplate",
+ dataFunction: (data) => {
+ return { ...data };
+ },
+ confirmText: "Are you sure you want to create a template based on this sensitivity label?",
+ },
+ {
+ label: "Delete Label",
+ type: "POST",
+ icon: ,
+ url: "/api/RemoveSensitivityLabel",
+ data: {
+ Identity: "Guid",
+ },
+ confirmText:
+ "Are you sure you want to delete this sensitivity label? Labels currently published to users will be removed from policies.",
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: [
+ "DisplayName",
+ "Name",
+ "Comment",
+ "Tooltip",
+ "ParentId",
+ "ContentType",
+ "EncryptionEnabled",
+ "EncryptionProtectionType",
+ "ContentMarkingHeaderEnabled",
+ "ContentMarkingFooterEnabled",
+ "ContentMarkingWatermarkEnabled",
+ "SiteAndGroupProtectionEnabled",
+ "Priority",
+ "Disabled",
+ "PublishedInPolicies",
+ ],
+ actions: actions,
+ };
+
+ const simpleColumns = [
+ "DisplayName",
+ "Name",
+ "ContentType",
+ "EncryptionEnabled",
+ "ContentMarkingHeaderEnabled",
+ "ContentMarkingWatermarkEnabled",
+ "SiteAndGroupProtectionEnabled",
+ "Priority",
+ "Disabled",
+ ];
+
+ return (
+
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
diff --git a/src/pages/security/compliance/sit-templates/index.js b/src/pages/security/compliance/sit-templates/index.js
new file mode 100644
index 000000000000..8bf4c54cc9e1
--- /dev/null
+++ b/src/pages/security/compliance/sit-templates/index.js
@@ -0,0 +1,107 @@
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { GitHub } from "@mui/icons-material";
+import { ApiGetCall } from "../../../../api/ApiCall";
+import { CippPolicyImportDrawer } from "../../../../components/CippComponents/CippPolicyImportDrawer.jsx";
+import { CippDeployCompliancePolicyDrawer } from "../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx";
+import { PermissionButton } from "../../../../utils/permissions.js";
+
+const Page = () => {
+ const pageTitle = "Sensitive Information Type Templates";
+ const cardButtonPermissions = ["Security.SensitiveInfoType.ReadWrite"];
+
+ const integrations = ApiGetCall({
+ url: "/api/ListExtensionsConfig",
+ queryKey: "Integrations",
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
+
+ const actions = [
+ {
+ label: "Save to GitHub",
+ type: "POST",
+ url: "/api/ExecCommunityRepo",
+ icon: ,
+ data: {
+ Action: "UploadTemplate",
+ GUID: "GUID",
+ },
+ fields: [
+ {
+ label: "Repository",
+ name: "FullName",
+ type: "select",
+ api: {
+ url: "/api/ListCommunityRepos",
+ data: { WriteAccess: true },
+ queryKey: "CommunityRepos-Write",
+ dataKey: "Results",
+ valueField: "FullName",
+ labelField: "FullName",
+ },
+ multiple: false,
+ creatable: false,
+ required: true,
+ validators: { required: { value: true, message: "This field is required" } },
+ },
+ {
+ label: "Commit Message",
+ placeholder: "Enter a commit message for adding this file to GitHub",
+ name: "Message",
+ type: "textField",
+ multiline: true,
+ required: true,
+ rows: 4,
+ },
+ ],
+ confirmText: "Are you sure you want to save this template to the selected repository?",
+ condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
+ },
+ {
+ label: "Delete Template",
+ type: "POST",
+ url: "/api/RemoveSensitiveInfoTypeTemplate",
+ data: { ID: "GUID" },
+ confirmText: "Do you want to delete the template?",
+ icon: ,
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: ["name", "comments", "Pattern", "Confidence", "Locale", "GUID"],
+ actions: actions,
+ };
+
+ const simpleColumns = ["name", "comments", "Pattern", "Confidence", "Locale", "GUID"];
+
+ return (
+
+
+
+ >
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
diff --git a/src/pages/security/compliance/sit/index.js b/src/pages/security/compliance/sit/index.js
new file mode 100644
index 000000000000..f88f324d0194
--- /dev/null
+++ b/src/pages/security/compliance/sit/index.js
@@ -0,0 +1,81 @@
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { Book } from "@mui/icons-material";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { CippDeployCompliancePolicyDrawer } from "../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx";
+import { PermissionButton } from "../../../../utils/permissions.js";
+
+const Page = () => {
+ const pageTitle = "Sensitive Information Types";
+ const apiUrl = "/api/ListSensitiveInfoType";
+ const cardButtonPermissions = ["Security.SensitiveInfoType.ReadWrite"];
+
+ const actions = [
+ {
+ label: "Create template based on SIT",
+ type: "POST",
+ icon: ,
+ url: "/api/AddSensitiveInfoTypeTemplate",
+ dataFunction: (data) => {
+ return { ...data };
+ },
+ confirmText:
+ "Are you sure you want to create a template based on this Sensitive Information Type?",
+ },
+ {
+ label: "Delete SIT",
+ type: "POST",
+ icon: ,
+ url: "/api/RemoveSensitiveInfoType",
+ data: {
+ Identity: "Name",
+ },
+ confirmText:
+ "Are you sure you want to delete this Sensitive Information Type? Built-in Microsoft types cannot be deleted.",
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: [
+ "Name",
+ "Description",
+ "Publisher",
+ "Recommended",
+ "RulePackId",
+ "RulePackVersion",
+ "State",
+ "Type",
+ ],
+ actions: actions,
+ };
+
+ const simpleColumns = [
+ "Name",
+ "Publisher",
+ "Description",
+ "Recommended",
+ "RulePackVersion",
+ "State",
+ ];
+
+ return (
+
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
From 1b5174664ba9c91d9412e974e1d5a2e2a8532972 Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Fri, 8 May 2026 00:46:37 +0200
Subject: [PATCH 124/181] feat: add AutoDiscover data retrieval to
CippDomainCards
- Implemented API call to fetch AutoDiscover data for the specified domain.
- Added a new DomainResultCard to display AutoDiscover results, including validation passes, warns, and fails.
Fixes #5972
---
src/components/CippCards/CippDomainCards.jsx | 27 ++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/src/components/CippCards/CippDomainCards.jsx b/src/components/CippCards/CippDomainCards.jsx
index 9268fcd08f96..fede72bd1347 100644
--- a/src/components/CippCards/CippDomainCards.jsx
+++ b/src/components/CippCards/CippDomainCards.jsx
@@ -470,6 +470,13 @@ export const CippDomainCards = ({ domain: propDomain = "", fullwidth = false })
waiting: !!domain,
});
+ const { data: autoDiscoverData, isFetching: autoDiscoverLoading } = ApiGetCall({
+ url: "/api/ListDomainHealth",
+ queryKey: `autodiscover-${domain}`,
+ data: { Domain: domain, Action: "ReadAutoDiscover" },
+ waiting: !!domain,
+ });
+
const { data: httpsData, isFetching: httpsLoading } = ApiGetCall({
url: "/api/ListDomainHealth",
queryKey: `https-${domain}-${subdomains}`,
@@ -684,6 +691,26 @@ export const CippDomainCards = ({ domain: propDomain = "", fullwidth = false })
}
/>
+
+
+
+ AutoDiscover ({autoDiscoverData?.RecordType || "None"}):
+
+
+
+
+ }
+ />
+
{enableHttps && (
Date: Fri, 8 May 2026 09:12:36 +0800
Subject: [PATCH 125/181] Add Investigate status to custom tests
---
src/pages/tools/custom-tests/add.jsx | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/pages/tools/custom-tests/add.jsx b/src/pages/tools/custom-tests/add.jsx
index b101c5869550..41b01afdd9ea 100644
--- a/src/pages/tools/custom-tests/add.jsx
+++ b/src/pages/tools/custom-tests/add.jsx
@@ -311,6 +311,7 @@ const Page = () => {
{ value: 'Auto', label: 'Auto' },
{ value: 'AlwaysPass', label: 'Always Pass' },
{ value: 'AlwaysInfo', label: 'Always Info' },
+ { value: 'AlwaysInvestigate', label: 'Always Investigate' },
]
const scriptNameField = {
@@ -739,7 +740,8 @@ All UPNs: {{join(Result[*].UserPrincipalName, ", ")}}`,
Return a hashtable with CIPPStatus (Passed/
- Failed/Info), CIPPResults, and optional{' '}
+ Failed/Info/Investigate),{' '}
+ CIPPResults, and optional{' '}
CIPPResultMarkdown to control status and rendering directly (Auto
result mode only)
From b0661ac661e1a26992c4560e0d2c9ad766c9ac24 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Fri, 8 May 2026 10:10:21 +0800
Subject: [PATCH 126/181] Update AuditLogTemplates.json
---
src/data/AuditLogTemplates.json | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/data/AuditLogTemplates.json b/src/data/AuditLogTemplates.json
index efa21ac67a53..1762fb2eb7bb 100644
--- a/src/data/AuditLogTemplates.json
+++ b/src/data/AuditLogTemplates.json
@@ -446,6 +446,11 @@
"value": "[]",
"label": "[]"
}
+ },
+ {
+ "Property": { "value": "String", "label": "SecuredAccessPassData" },
+ "Operator": { "value": "like", "label": "Like" },
+ "Input": { "value": "*" }
}
]
}
From 182f0c81f22adc6729260df24b361689efea0034 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Fri, 8 May 2026 12:33:46 +0200
Subject: [PATCH 127/181] pushing new compliance menus
---
.../CippDeployCompliancePolicyDrawer.jsx | 23 ++++
.../CippComponents/CippPolicyImportDrawer.jsx | 41 ++-----
src/layouts/config.js | 107 ++++++++++-------
.../compliance/retention-templates/index.js | 107 +++++++++++++++++
.../security/compliance/retention/index.js | 112 ++++++++++++++++++
5 files changed, 313 insertions(+), 77 deletions(-)
create mode 100644 src/pages/security/compliance/retention-templates/index.js
create mode 100644 src/pages/security/compliance/retention/index.js
diff --git a/src/components/CippComponents/CippDeployCompliancePolicyDrawer.jsx b/src/components/CippComponents/CippDeployCompliancePolicyDrawer.jsx
index c881757e087b..3cf35e3cb2f8 100644
--- a/src/components/CippComponents/CippDeployCompliancePolicyDrawer.jsx
+++ b/src/components/CippComponents/CippDeployCompliancePolicyDrawer.jsx
@@ -29,6 +29,29 @@ const MODE_CONFIG = {
"ContentContainsSensitiveInformation": [{ "name": "Credit Card Number", "minCount": "1" }],
"BlockAccess": true
}
+}`,
+ },
+ RetentionCompliancePolicy: {
+ title: "Deploy Retention Compliance Policy",
+ buttonLabel: "Deploy Retention Policy",
+ postUrl: "/api/AddRetentionCompliancePolicy",
+ listTemplatesUrl: "/api/ListRetentionCompliancePolicyTemplates",
+ templateQueryKey: "TemplateListRetentionCompliancePolicy",
+ relatedQueryKeys: [
+ "ListRetentionCompliancePolicy",
+ "ListRetentionCompliancePolicyTemplates",
+ ],
+ placeholder: `{
+ "Name": "7-year Email Retention",
+ "Comment": "Retain Exchange mail for 7 years",
+ "ExchangeLocation": "All",
+ "Enabled": true,
+ "RuleParams": {
+ "Name": "7-year Email Retention Rule",
+ "RetentionDuration": 2555,
+ "RetentionComplianceAction": "Keep",
+ "ExpirationDateOption": "ModificationAgeInDays"
+ }
}`,
},
SensitivityLabel: {
diff --git a/src/components/CippComponents/CippPolicyImportDrawer.jsx b/src/components/CippComponents/CippPolicyImportDrawer.jsx
index a4149928b19c..bbd1dbe73751 100644
--- a/src/components/CippComponents/CippPolicyImportDrawer.jsx
+++ b/src/components/CippComponents/CippPolicyImportDrawer.jsx
@@ -21,40 +21,12 @@ import { CippApiResults } from './CippApiResults'
import { CippFormTenantSelector } from './CippFormTenantSelector'
import { CippFolderNavigation } from './CippFolderNavigation'
-// Modes that only support browsing community repos (no tenant fallback)
-const REPO_ONLY_MODES = [
- 'ReportBuilder',
- 'DlpCompliancePolicy',
- 'SensitivityLabel',
- 'SensitiveInfoType',
-]
-
-const RELATED_QUERY_KEYS_BY_MODE = {
- ConditionalAccess: ['ListCATemplates-table'],
- Standards: ['listStandardTemplates'],
- ReportBuilder: ['ListReportBuilderTemplates'],
- DlpCompliancePolicy: ['ListDlpCompliancePolicyTemplates'],
- SensitivityLabel: ['ListSensitivityLabelTemplates'],
- SensitiveInfoType: ['ListSensitiveInfoTypeTemplates'],
-}
-
-const MODE_LABELS = {
- ReportBuilder: 'Report Template',
- DlpCompliancePolicy: 'DLP Policy',
- SensitivityLabel: 'Sensitivity Label',
- SensitiveInfoType: 'Sensitive Info Type',
-}
-
-const DEFAULT_QUERY_KEYS = ['ListIntuneTemplates-table', 'ListIntuneTemplates-autcomplete']
-
export const CippPolicyImportDrawer = ({
buttonText = 'Browse Catalog',
requiredPermissions = [],
PermissionButton = Button,
mode = 'Intune',
}) => {
- const isRepoOnlyMode = REPO_ONLY_MODES.includes(mode)
-
const [drawerVisible, setDrawerVisible] = useState(false)
const [searchQuery, setSearchQuery] = useState('')
const [viewDialogOpen, setViewDialogOpen] = useState(false)
@@ -101,7 +73,14 @@ export const CippPolicyImportDrawer = ({
const importPolicy = ApiPostCall({
urlFromData: true,
- relatedQueryKeys: RELATED_QUERY_KEYS_BY_MODE[mode] || DEFAULT_QUERY_KEYS,
+ relatedQueryKeys:
+ mode === 'ConditionalAccess'
+ ? ['ListCATemplates-table']
+ : mode === 'Standards'
+ ? ['listStandardTemplates']
+ : mode === 'ReportBuilder'
+ ? ['ListReportBuilderTemplates']
+ : ['ListIntuneTemplates-table', 'ListIntuneTemplates-autcomplete'],
})
const viewPolicyQuery = ApiPostCall({
@@ -319,7 +298,7 @@ export const CippPolicyImportDrawer = ({
{buttonText}
option.value)
: []),
- ...(!isRepoOnlyMode
+ ...(mode !== 'ReportBuilder'
? [{ label: 'Get template from existing tenant', value: 'tenant' }]
: []),
]}
diff --git a/src/layouts/config.js b/src/layouts/config.js
index aac86af27397..c820f5664acc 100644
--- a/src/layouts/config.js
+++ b/src/layouts/config.js
@@ -301,9 +301,11 @@ export const nativeMenuItems = [
'Security.Alert.*',
'Tenant.DeviceCompliance.*',
'Security.SafeLinksPolicy.*',
- 'Security.DlpCompliancePolicy.*',
- 'Security.SensitivityLabel.*',
- 'Security.SensitiveInfoType.*',
+ // TEMP: Purview Compliance menu hidden for dev build
+ // 'Security.DlpCompliancePolicy.*',
+ // 'Security.RetentionCompliancePolicy.*',
+ // 'Security.SensitivityLabel.*',
+ // 'Security.SensitiveInfoType.*',
],
items: [
{
@@ -386,49 +388,62 @@ export const nativeMenuItems = [
},
],
},
- {
- title: 'Purview Compliance',
- permissions: [
- 'Security.DlpCompliancePolicy.*',
- 'Security.SensitivityLabel.*',
- 'Security.SensitiveInfoType.*',
- ],
- items: [
- {
- title: 'DLP Policies',
- path: '/security/compliance/dlp',
- permissions: ['Security.DlpCompliancePolicy.*'],
- },
- {
- title: 'DLP Policy Templates',
- path: '/security/compliance/dlp-templates',
- permissions: ['Security.DlpCompliancePolicy.*'],
- scope: 'global',
- },
- {
- title: 'Sensitivity Labels',
- path: '/security/compliance/labels',
- permissions: ['Security.SensitivityLabel.*'],
- },
- {
- title: 'Sensitivity Label Templates',
- path: '/security/compliance/labels-templates',
- permissions: ['Security.SensitivityLabel.*'],
- scope: 'global',
- },
- {
- title: 'Sensitive Information Types',
- path: '/security/compliance/sit',
- permissions: ['Security.SensitiveInfoType.*'],
- },
- {
- title: 'Sensitive Info Type Templates',
- path: '/security/compliance/sit-templates',
- permissions: ['Security.SensitiveInfoType.*'],
- scope: 'global',
- },
- ],
- },
+ // TEMP: Purview Compliance menu hidden for dev build
+ // {
+ // title: 'Purview Compliance',
+ // permissions: [
+ // 'Security.DlpCompliancePolicy.*',
+ // 'Security.RetentionCompliancePolicy.*',
+ // 'Security.SensitivityLabel.*',
+ // 'Security.SensitiveInfoType.*',
+ // ],
+ // items: [
+ // {
+ // title: 'DLP Policies',
+ // path: '/security/compliance/dlp',
+ // permissions: ['Security.DlpCompliancePolicy.*'],
+ // },
+ // {
+ // title: 'DLP Policy Templates',
+ // path: '/security/compliance/dlp-templates',
+ // permissions: ['Security.DlpCompliancePolicy.*'],
+ // scope: 'global',
+ // },
+ // {
+ // title: 'Retention Policies',
+ // path: '/security/compliance/retention',
+ // permissions: ['Security.RetentionCompliancePolicy.*'],
+ // },
+ // {
+ // title: 'Retention Policy Templates',
+ // path: '/security/compliance/retention-templates',
+ // permissions: ['Security.RetentionCompliancePolicy.*'],
+ // scope: 'global',
+ // },
+ // {
+ // title: 'Sensitivity Labels',
+ // path: '/security/compliance/labels',
+ // permissions: ['Security.SensitivityLabel.*'],
+ // },
+ // {
+ // title: 'Sensitivity Label Templates',
+ // path: '/security/compliance/labels-templates',
+ // permissions: ['Security.SensitivityLabel.*'],
+ // scope: 'global',
+ // },
+ // {
+ // title: 'Sensitive Information Types',
+ // path: '/security/compliance/sit',
+ // permissions: ['Security.SensitiveInfoType.*'],
+ // },
+ // {
+ // title: 'Sensitive Info Type Templates',
+ // path: '/security/compliance/sit-templates',
+ // permissions: ['Security.SensitiveInfoType.*'],
+ // scope: 'global',
+ // },
+ // ],
+ // },
],
},
{
diff --git a/src/pages/security/compliance/retention-templates/index.js b/src/pages/security/compliance/retention-templates/index.js
new file mode 100644
index 000000000000..3c3faa0e833a
--- /dev/null
+++ b/src/pages/security/compliance/retention-templates/index.js
@@ -0,0 +1,107 @@
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { GitHub } from "@mui/icons-material";
+import { ApiGetCall } from "../../../../api/ApiCall";
+import { CippPolicyImportDrawer } from "../../../../components/CippComponents/CippPolicyImportDrawer.jsx";
+import { CippDeployCompliancePolicyDrawer } from "../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx";
+import { PermissionButton } from "../../../../utils/permissions.js";
+
+const Page = () => {
+ const pageTitle = "Retention Policy Templates";
+ const cardButtonPermissions = ["Security.RetentionCompliancePolicy.ReadWrite"];
+
+ const integrations = ApiGetCall({
+ url: "/api/ListExtensionsConfig",
+ queryKey: "Integrations",
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
+
+ const actions = [
+ {
+ label: "Save to GitHub",
+ type: "POST",
+ url: "/api/ExecCommunityRepo",
+ icon: ,
+ data: {
+ Action: "UploadTemplate",
+ GUID: "GUID",
+ },
+ fields: [
+ {
+ label: "Repository",
+ name: "FullName",
+ type: "select",
+ api: {
+ url: "/api/ListCommunityRepos",
+ data: { WriteAccess: true },
+ queryKey: "CommunityRepos-Write",
+ dataKey: "Results",
+ valueField: "FullName",
+ labelField: "FullName",
+ },
+ multiple: false,
+ creatable: false,
+ required: true,
+ validators: { required: { value: true, message: "This field is required" } },
+ },
+ {
+ label: "Commit Message",
+ placeholder: "Enter a commit message for adding this file to GitHub",
+ name: "Message",
+ type: "textField",
+ multiline: true,
+ required: true,
+ rows: 4,
+ },
+ ],
+ confirmText: "Are you sure you want to save this template to the selected repository?",
+ condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
+ },
+ {
+ label: "Delete Template",
+ type: "POST",
+ url: "/api/RemoveRetentionCompliancePolicyTemplate",
+ data: { ID: "GUID" },
+ confirmText: "Do you want to delete the template?",
+ icon: ,
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: ["name", "comments", "Enabled", "RestrictiveRetention", "GUID"],
+ actions: actions,
+ };
+
+ const simpleColumns = ["name", "comments", "Enabled", "RestrictiveRetention", "GUID"];
+
+ return (
+
+
+
+ >
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
diff --git a/src/pages/security/compliance/retention/index.js b/src/pages/security/compliance/retention/index.js
new file mode 100644
index 000000000000..4bd75687fbce
--- /dev/null
+++ b/src/pages/security/compliance/retention/index.js
@@ -0,0 +1,112 @@
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { Book, Block, Check } from "@mui/icons-material";
+import { TrashIcon } from "@heroicons/react/24/outline";
+import { CippDeployCompliancePolicyDrawer } from "../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx";
+import { PermissionButton } from "../../../../utils/permissions.js";
+
+const Page = () => {
+ const pageTitle = "Purview Retention Policies";
+ const apiUrl = "/api/ListRetentionCompliancePolicy";
+ const cardButtonPermissions = ["Security.RetentionCompliancePolicy.ReadWrite"];
+
+ const actions = [
+ {
+ label: "Create template based on policy",
+ type: "POST",
+ icon: ,
+ url: "/api/AddRetentionCompliancePolicyTemplate",
+ dataFunction: (data) => {
+ return { ...data };
+ },
+ confirmText: "Are you sure you want to create a template based on this retention policy?",
+ },
+ {
+ label: "Enable Policy",
+ type: "POST",
+ icon: ,
+ url: "/api/EditRetentionCompliancePolicy",
+ data: {
+ State: "!enable",
+ Identity: "Name",
+ },
+ confirmText: "Are you sure you want to enable this retention policy?",
+ condition: (row) => row.Enabled === false,
+ },
+ {
+ label: "Disable Policy",
+ type: "POST",
+ icon: ,
+ url: "/api/EditRetentionCompliancePolicy",
+ data: {
+ State: "!disable",
+ Identity: "Name",
+ },
+ confirmText: "Are you sure you want to disable this retention policy?",
+ condition: (row) => row.Enabled === true,
+ },
+ {
+ label: "Delete Policy",
+ type: "POST",
+ icon: ,
+ url: "/api/RemoveRetentionCompliancePolicy",
+ data: {
+ Identity: "Name",
+ },
+ confirmText: "Are you sure you want to delete this retention policy?",
+ color: "danger",
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: [
+ "Name",
+ "Comment",
+ "Enabled",
+ "Workload",
+ "RestrictiveRetention",
+ "ExchangeLocation",
+ "SharePointLocation",
+ "OneDriveLocation",
+ "ModernGroupLocation",
+ "TeamsChannelLocation",
+ "TeamsChatLocation",
+ "RuleCount",
+ "CreatedBy",
+ "WhenCreatedUTC",
+ "WhenChangedUTC",
+ ],
+ actions: actions,
+ };
+
+ const simpleColumns = [
+ "Name",
+ "Enabled",
+ "Workload",
+ "RuleCount",
+ "RestrictiveRetention",
+ "CreatedBy",
+ "WhenCreatedUTC",
+ "WhenChangedUTC",
+ ];
+
+ return (
+
+ }
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+export default Page;
From 2a59c7970f9589c46861a1fbca1a811e8abda525 Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Fri, 8 May 2026 12:37:07 +0200
Subject: [PATCH 128/181] feat: add manager and sponsor properties to user
patching
- Introduced 'manager' and 'sponsor' properties to PATCHABLE_PROPERTIES.
- Implemented user selection for these properties using CippFormUserSelector.
- Added validation for tenant domain restrictions when selecting users.
- Updated confirmation step to handle new properties correctly.
Fixes #5933
---
.../administration/users/patch-wizard.jsx | 70 +++++++++++++++++--
1 file changed, 65 insertions(+), 5 deletions(-)
diff --git a/src/pages/identity/administration/users/patch-wizard.jsx b/src/pages/identity/administration/users/patch-wizard.jsx
index 300aebfaafa0..1168f12f593e 100644
--- a/src/pages/identity/administration/users/patch-wizard.jsx
+++ b/src/pages/identity/administration/users/patch-wizard.jsx
@@ -15,11 +15,13 @@ import {
Switch,
FormControlLabel,
Autocomplete,
+ Alert,
} from '@mui/material'
import { CippWizardStepButtons } from '../../../../components/CippWizard/CippWizardStepButtons'
import { ApiPostCall, ApiGetCall } from '../../../../api/ApiCall'
import { CippApiResults } from '../../../../components/CippComponents/CippApiResults'
import { CippDataTable } from '../../../../components/CippTable/CippDataTable'
+import { CippFormUserSelector } from '../../../../components/CippComponents/CippFormUserSelector'
import { Delete } from '@mui/icons-material'
// User properties that can be patched
@@ -54,6 +56,11 @@ const PATCHABLE_PROPERTIES = [
label: 'Job Title',
type: 'string',
},
+ {
+ property: 'manager',
+ label: 'Manager',
+ type: 'userSelector',
+ },
{
property: 'officeLocation',
label: 'Office Location',
@@ -79,6 +86,11 @@ const PATCHABLE_PROPERTIES = [
label: 'Show in Address List',
type: 'boolean',
},
+ {
+ property: 'sponsor',
+ label: 'Sponsor',
+ type: 'userSelector',
+ },
{
property: 'state',
label: 'State/Province',
@@ -182,6 +194,21 @@ const PropertySelectionStep = (props) => {
// Get unique tenant domains from users
const tenantDomains =
[...new Set(users?.map((user) => user.Tenant || user.tenantFilter).filter(Boolean))] || []
+ const firstTenantDomain = tenantDomains[0]
+ const hasManagerSelected = selectedProperties.includes('manager')
+ const hasSponsorSelected = selectedProperties.includes('sponsor')
+ const hasRelationshipSelected = hasManagerSelected || hasSponsorSelected
+
+ useEffect(() => {
+ if (!hasRelationshipSelected || !firstTenantDomain) {
+ return
+ }
+
+ const currentTenantFilter = formControl.getValues('tenantFilter')
+ if (currentTenantFilter?.value !== firstTenantDomain) {
+ formControl.setValue('tenantFilter', { value: firstTenantDomain })
+ }
+ }, [firstTenantDomain, formControl, hasRelationshipSelected])
// Fetch custom data mappings for all tenants
const customDataMappings = ApiGetCall({
@@ -248,6 +275,21 @@ const PropertySelectionStep = (props) => {
)
}
+ if (property?.type === 'userSelector') {
+ return (
+
+ )
+ }
+
// Default to text input for string types with consistent styling
return (
{
Properties to update
+ {hasRelationshipSelected && tenantDomains.length > 1 && (
+
+ The user picker is scoped to {firstTenantDomain}. Cross-tenant manager or sponsor
+ assignment is not supported, so the selected user must exist in each target tenant.
+
+ )}
{selectedProperties.map(renderPropertyInput)}
@@ -455,7 +503,14 @@ const ConfirmationStep = (props) => {
}
selectedProperties.forEach((propName) => {
- if (propertyValues[propName] !== undefined && propertyValues[propName] !== '') {
+ const propertyValue = propertyValues[propName]
+
+ if (propertyValue !== undefined && propertyValue !== '' && propertyValue !== null) {
+ if (propName === 'manager' || propName === 'sponsor') {
+ if (propertyValue?.value) userData[propName] = propertyValue.value
+ return
+ }
+
// Handle dot notation properties (e.g., "extension_abc123.customField")
if (propName.includes('.')) {
const parts = propName.split('.')
@@ -470,10 +525,10 @@ const ConfirmationStep = (props) => {
}
// Set the final property value
- current[parts[parts.length - 1]] = propertyValues[propName]
+ current[parts[parts.length - 1]] = propertyValue
} else {
// Handle regular properties
- userData[propName] = propertyValues[propName]
+ userData[propName] = propertyValue
}
}
})
@@ -522,8 +577,13 @@ const ConfirmationStep = (props) => {
{selectedProperties.map((propName) => {
const property = allProperties.find((p) => p.property === propName)
const value = propertyValues[propName]
- const displayValue =
- property?.type === 'boolean' ? (value ? 'Yes' : 'No') : value || 'Not set'
+ let displayValue = value || 'Not set'
+
+ if (propName === 'manager' || propName === 'sponsor') {
+ displayValue = value?.label || value?.value || 'Not set'
+ } else if (property?.type === 'boolean') {
+ displayValue = value ? 'Yes' : 'No'
+ }
return (
From d25142333ac8e0787040f4b62d330d90c939cf44 Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Fri, 8 May 2026 13:56:58 +0200
Subject: [PATCH 129/181] fix(jit-admin): submit TAP lifetime within policy
bounds
Fixes #5965
---
.../identity/administration/jit-admin/add.jsx | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/src/pages/identity/administration/jit-admin/add.jsx b/src/pages/identity/administration/jit-admin/add.jsx
index a1c1fce87c82..d99a1b6518c1 100644
--- a/src/pages/identity/administration/jit-admin/add.jsx
+++ b/src/pages/identity/administration/jit-admin/add.jsx
@@ -31,6 +31,12 @@ const Page = () => {
const watcher = useWatch({ control: formControl.control });
const useTAP = useWatch({ control: formControl.control, name: "UseTAP" });
+ const startDate = useWatch({ control: formControl.control, name: "startDate" });
+ const endDate = useWatch({ control: formControl.control, name: "endDate" });
+ const tapLifetimeInMinutes = useWatch({
+ control: formControl.control,
+ name: "tapLifetimeInMinutes",
+ });
const tapPolicy = ApiGetCall({
url: selectedTenant
@@ -47,6 +53,22 @@ const Page = () => {
const useRoles = useWatch({ control: formControl.control, name: "useRoles" });
const useGroups = useWatch({ control: formControl.control, name: "useGroups" });
+ useEffect(() => {
+ if (!useTAP || !startDate || !endDate) {
+ formControl.setValue("tapLifetimeInMinutes", null);
+ return;
+ }
+
+ const requestedMinutes = Math.max(1, Math.round((endDate - startDate) / 60));
+ const tapPolicyConfig = tapPolicy.data?.Results?.[0];
+ const policyMax = tapPolicyConfig?.maximumLifetimeInMinutes ?? 1440;
+ const policyMin = Math.min(tapPolicyConfig?.minimumLifetimeInMinutes ?? 1, policyMax);
+ formControl.setValue(
+ "tapLifetimeInMinutes",
+ Math.min(Math.max(requestedMinutes, policyMin), policyMax)
+ );
+ }, [useTAP, startDate, endDate, tapPolicy.data, formControl]);
+
// Clear fields when switches are toggled off
useEffect(() => {
if (!useRoles) {
@@ -501,6 +523,11 @@ const Page = () => {
/>
+
{
TAP is not enabled in this tenant. TAP generation will fail.
)}
+ {useTAP && tapLifetimeInMinutes && (
+
+ TAP will be valid for {tapLifetimeInMinutes} minutes.
+
+ )}
Date: Fri, 8 May 2026 23:17:03 +0800
Subject: [PATCH 130/181] Disable all tenant support for message trace
---
src/pages/email/tools/message-trace/index.js | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/pages/email/tools/message-trace/index.js b/src/pages/email/tools/message-trace/index.js
index 56ccf9bcd20a..d5876859b182 100644
--- a/src/pages/email/tools/message-trace/index.js
+++ b/src/pages/email/tools/message-trace/index.js
@@ -347,6 +347,5 @@ const Page = () => {
);
};
-Page.getLayout = (page) => {page};
-
+Page.getLayout = (page) => {page};
export default Page;
From 8e09f2231bc97fa6937168143f29512ec4d776ef Mon Sep 17 00:00:00 2001
From: Roel van der Wegen
Date: Fri, 8 May 2026 19:30:21 +0200
Subject: [PATCH 131/181] add make to portals list
---
src/data/portals.json | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/data/portals.json b/src/data/portals.json
index 3d9cdb73b85a..58f49e3ae2c3 100644
--- a/src/data/portals.json
+++ b/src/data/portals.json
@@ -81,14 +81,23 @@
"icon": "ShieldMoon"
},
{
- "label": "Power Platform",
- "name": "Power_Platform_Portal",
+ "label": "Power Platform (Admin)",
+ "name": "Power_Platform_Portal_Admin",
"url": "https://admin.powerplatform.microsoft.com/account/login/customerId",
"variable": "customerId",
"target": "_blank",
"external": true,
"icon": "PrecisionManufacturing"
},
+ {
+ "label": "Power Platform (Maker)",
+ "name": "Power_Platform_Portal_Maker",
+ "url": "https://make.powerapps.com/home?tenant=customerId",
+ "variable": "customerId",
+ "target": "_blank",
+ "external": true,
+ "icon": "PrecisionManufacturing"
+ }
{
"label": "Power BI",
"name": "Power_BI_Portal",
From b05e0923d8afc286f7ca5591056bf847c8dbd755 Mon Sep 17 00:00:00 2001
From: Bobby <31723128+kris6673@users.noreply.github.com>
Date: Fri, 8 May 2026 22:36:34 +0200
Subject: [PATCH 132/181] feat(standards): add by-standard alignment summary
view
---
.../CippComponents/CippTranslations.jsx | 1 +
src/components/CippTable/CippDataTable.js | 15 +-
.../CippTable/CippDataTableButton.jsx | 11 +-
src/pages/tenant/standards/alignment/index.js | 565 ++++++++++++++++--
src/utils/get-cipp-column-size.js | 2 +
src/utils/get-cipp-formatting.js | 6 +-
6 files changed, 545 insertions(+), 55 deletions(-)
diff --git a/src/components/CippComponents/CippTranslations.jsx b/src/components/CippComponents/CippTranslations.jsx
index c4b337ded761..8eb5ada15b07 100644
--- a/src/components/CippComponents/CippTranslations.jsx
+++ b/src/components/CippComponents/CippTranslations.jsx
@@ -9,6 +9,7 @@ export const CippTranslations = {
surName: "Surname",
city: "City",
tenant: "Tenant",
+ tenants: "Tenants",
tenantFilter: "Tenant",
showTenantInformation: "Show Tenant Information",
refreshTenantList: "Refresh tenant list",
diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js
index 0fc4f87432b7..253327713912 100644
--- a/src/components/CippTable/CippDataTable.js
+++ b/src/components/CippTable/CippDataTable.js
@@ -579,6 +579,9 @@ export const CippDataTable = (props) => {
}, [columns.length, usedData, queryKey, settings?.currentTenant, filterTypeMap])
const createDialog = useDialog()
+ const hasActions = !!actions
+ const hasOffCanvas = !!offCanvas
+ const hasOnChange = !!onChange
// Compute modeInfo via useMemo so it stays stable but updates when relevant inputs change.
const modeInfo = useMemo(
@@ -593,7 +596,7 @@ export const CippDataTable = (props) => {
maxHeightOffset,
settings
),
- [simple, !!actions, !!offCanvas, !!onChange, maxHeightOffset, settings?.tablePageSize?.value]
+ [simple, hasActions, hasOffCanvas, hasOnChange, maxHeightOffset, settings?.tablePageSize?.value]
)
// Include updateTrigger in data memo to force re-render when license backfill completes
@@ -651,7 +654,15 @@ export const CippDataTable = (props) => {
const muiTableBodyRowProps = useMemo(() => {
if (offCanvasOnRowClick && offCanvas) {
return ({ row }) => ({
- onClick: () => {
+ onClick: (event) => {
+ if (
+ event.target?.closest?.(
+ 'button, a, input, textarea, select, [role="button"], [role="menuitem"], [data-no-row-click="true"]'
+ )
+ ) {
+ return
+ }
+
setOffCanvasData(row.original)
const filteredRowsArray = table?.getFilteredRowModel?.()?.rows
if (filteredRowsArray) {
diff --git a/src/components/CippTable/CippDataTableButton.jsx b/src/components/CippTable/CippDataTableButton.jsx
index 79eec0f04bc5..86c3c887e1e9 100644
--- a/src/components/CippTable/CippDataTableButton.jsx
+++ b/src/components/CippTable/CippDataTableButton.jsx
@@ -5,7 +5,9 @@ import { getCippTranslation } from "../../utils/get-cipp-translation";
const CippDataTableButton = ({ data, title, tableTitle = "Data" }) => {
const [openDialogs, setOpenDialogs] = useState([]);
- const handleOpenDialog = () => {
+ const handleOpenDialog = (event) => {
+ event?.stopPropagation();
+
let dataArray;
if (Array.isArray(data)) {
@@ -21,7 +23,8 @@ const CippDataTableButton = ({ data, title, tableTitle = "Data" }) => {
setOpenDialogs([...openDialogs, dataArray]);
};
- const handleCloseDialog = (index) => {
+ const handleCloseDialog = (index, event) => {
+ event?.stopPropagation?.();
setOpenDialogs(openDialogs.filter((_, i) => i !== index));
};
const dataIsNotANullArray =
@@ -48,7 +51,9 @@ const CippDataTableButton = ({ data, title, tableTitle = "Data" }) => {
+
+
+
+
+
From 4b9efd827d27a3498eca51b444934a99e78c634f Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Mon, 11 May 2026 23:14:49 +0800
Subject: [PATCH 140/181] Update index.js
---
src/pages/tenant/reports/list-licenses/index.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/tenant/reports/list-licenses/index.js b/src/pages/tenant/reports/list-licenses/index.js
index 35d61ea16158..24a228054f1d 100644
--- a/src/pages/tenant/reports/list-licenses/index.js
+++ b/src/pages/tenant/reports/list-licenses/index.js
@@ -16,7 +16,7 @@ const Page = () => {
"TermInfo", // TODO TermInfo is not showing as a clickable json object in the table, like CApolicies does in the mfa report. IDK how to fix it. -Bobby
];
- return ;
+ return ;
};
Page.getLayout = (page) => {page};
From cfe8c705025c918e34646f68bba815af2a0d04b2 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Mon, 11 May 2026 19:51:43 +0200
Subject: [PATCH 141/181] adds #5939
---
.../tenant/reports/list-licenses/index.js | 70 ++++++++++++++++++-
1 file changed, 69 insertions(+), 1 deletion(-)
diff --git a/src/pages/tenant/reports/list-licenses/index.js b/src/pages/tenant/reports/list-licenses/index.js
index 24a228054f1d..7c2a26c3922f 100644
--- a/src/pages/tenant/reports/list-licenses/index.js
+++ b/src/pages/tenant/reports/list-licenses/index.js
@@ -1,5 +1,7 @@
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
+import { AssignmentInd } from "@mui/icons-material";
+import CippFormComponent from "../../../../components/CippComponents/CippFormComponent";
const Page = () => {
const pageTitle = "Licences Report";
@@ -16,7 +18,73 @@ const Page = () => {
"TermInfo", // TODO TermInfo is not showing as a clickable json object in the table, like CApolicies does in the mfa report. IDK how to fix it. -Bobby
];
- return ;
+ const actions = [
+ {
+ label: "Assign License to User",
+ type: "POST",
+ url: "/api/ExecBulkLicense",
+ icon: ,
+ confirmText: "Are you sure you want to assign [License] to the selected user?",
+ multiPost: false,
+ children: ({ formHook, row }) => (
+ `${option.displayName} (${option.userPrincipalName})`,
+ valueField: "id",
+ queryKey: `Users-${row?.Tenant}`,
+ data: {
+ Endpoint: "users",
+ $select: "id,displayName,userPrincipalName",
+ $count: true,
+ $orderby: "displayName",
+ $top: 999,
+ },
+ }}
+ />
+ ),
+ customDataformatter: (row, action, formData) => ({
+ tenantFilter: row.Tenant,
+ LicenseOperation: "Add",
+ Licenses: [{ label: row.License, value: row.skuId }],
+ userIds: [formData.userIds?.value],
+ }),
+ },
+ ];
+
+ const offCanvas = {
+ extendedInfoFields: [
+ "Tenant",
+ "License",
+ "CountUsed",
+ "CountAvailable",
+ "TotalLicenses",
+ "AssignedUsers",
+ "AssignedGroups",
+ "TermInfo",
+ ],
+ actions: actions,
+ };
+
+ return (
+
+ );
};
Page.getLayout = (page) => {page};
From 0d42f6798b69367401c33f692b541faa8f483651 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Mon, 11 May 2026 19:51:47 +0200
Subject: [PATCH 142/181] #5939
---
.../tenant/reports/list-licenses/index.js | 82 +++++++++----------
1 file changed, 41 insertions(+), 41 deletions(-)
diff --git a/src/pages/tenant/reports/list-licenses/index.js b/src/pages/tenant/reports/list-licenses/index.js
index 7c2a26c3922f..4d877df75f8f 100644
--- a/src/pages/tenant/reports/list-licenses/index.js
+++ b/src/pages/tenant/reports/list-licenses/index.js
@@ -1,30 +1,30 @@
-import { Layout as DashboardLayout } from "../../../../layouts/index.js";
-import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { AssignmentInd } from "@mui/icons-material";
-import CippFormComponent from "../../../../components/CippComponents/CippFormComponent";
+import { Layout as DashboardLayout } from '../../../../layouts/index.js'
+import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { AssignmentInd } from '@mui/icons-material'
+import CippFormComponent from '../../../../components/CippComponents/CippFormComponent'
const Page = () => {
- const pageTitle = "Licences Report";
- const apiUrl = "/api/ListLicenses";
+ const pageTitle = 'Licences Report'
+ const apiUrl = '/api/ListLicenses'
const simpleColumns = [
- "Tenant",
- "License",
- "CountUsed",
- "CountAvailable",
- "TotalLicenses",
- "AssignedUsers",
- "AssignedGroups",
- "TermInfo", // TODO TermInfo is not showing as a clickable json object in the table, like CApolicies does in the mfa report. IDK how to fix it. -Bobby
- ];
+ 'Tenant',
+ 'License',
+ 'CountUsed',
+ 'CountAvailable',
+ 'TotalLicenses',
+ 'AssignedUsers',
+ 'AssignedGroups',
+ 'TermInfo', // TODO TermInfo is not showing as a clickable json object in the table, like CApolicies does in the mfa report. IDK how to fix it. -Bobby
+ ]
const actions = [
{
- label: "Assign License to User",
- type: "POST",
- url: "/api/ExecBulkLicense",
+ label: 'Assign License to User',
+ type: 'POST',
+ url: '/api/ExecBulkLicense',
icon: ,
- confirmText: "Are you sure you want to assign [License] to the selected user?",
+ confirmText: 'Are you sure you want to assign [License] to the selected user?',
multiPost: false,
children: ({ formHook, row }) => (
{
multiple={false}
creatable={false}
formControl={formHook}
- validators={{ required: "Please select a user" }}
+ validators={{ required: 'Please select a user' }}
api={{
tenantFilter: row?.Tenant,
- url: "/api/ListGraphRequest",
- dataKey: "Results",
+ url: '/api/ListGraphRequest',
+ dataKey: 'Results',
labelField: (option) => `${option.displayName} (${option.userPrincipalName})`,
- valueField: "id",
+ valueField: 'id',
queryKey: `Users-${row?.Tenant}`,
data: {
- Endpoint: "users",
- $select: "id,displayName,userPrincipalName",
+ Endpoint: 'users',
+ $select: 'id,displayName,userPrincipalName',
$count: true,
- $orderby: "displayName",
+ $orderby: 'displayName',
$top: 999,
},
}}
@@ -54,26 +54,26 @@ const Page = () => {
),
customDataformatter: (row, action, formData) => ({
tenantFilter: row.Tenant,
- LicenseOperation: "Add",
+ LicenseOperation: 'Add',
Licenses: [{ label: row.License, value: row.skuId }],
userIds: [formData.userIds?.value],
}),
},
- ];
+ ]
const offCanvas = {
extendedInfoFields: [
- "Tenant",
- "License",
- "CountUsed",
- "CountAvailable",
- "TotalLicenses",
- "AssignedUsers",
- "AssignedGroups",
- "TermInfo",
+ 'Tenant',
+ 'License',
+ 'CountUsed',
+ 'CountAvailable',
+ 'TotalLicenses',
+ 'AssignedUsers',
+ 'AssignedGroups',
+ 'TermInfo',
],
actions: actions,
- };
+ }
return (
{
actions={actions}
offCanvas={offCanvas}
/>
- );
-};
+ )
+}
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page}
-export default Page;
+export default Page
From 64e408072e2cea57f098f49acbd84dd3d96187b2 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Mon, 11 May 2026 19:58:59 +0200
Subject: [PATCH 143/181] implemenets #5948
---
.../CippApplicationDeployDrawer.jsx | 299 ++++++++++--------
1 file changed, 159 insertions(+), 140 deletions(-)
diff --git a/src/components/CippComponents/CippApplicationDeployDrawer.jsx b/src/components/CippComponents/CippApplicationDeployDrawer.jsx
index 99c2cd52d249..56c7ecae0655 100644
--- a/src/components/CippComponents/CippApplicationDeployDrawer.jsx
+++ b/src/components/CippComponents/CippApplicationDeployDrawer.jsx
@@ -1,119 +1,119 @@
-import React, { useEffect, useCallback, useState } from "react";
-import { Divider, Button, Alert, CircularProgress } from "@mui/material";
-import { Grid } from "@mui/system";
-import { useForm, useWatch } from "react-hook-form";
-import { Add } from "@mui/icons-material";
-import { CippOffCanvas } from "./CippOffCanvas";
-import CippFormComponent from "./CippFormComponent";
-import { CippFormTenantSelector } from "./CippFormTenantSelector";
-import { CippFormCondition } from "./CippFormCondition";
-import { CippApiResults } from "./CippApiResults";
-import languageList from "../../data/languageList.json";
-import { ApiPostCall } from "../../api/ApiCall";
+import React, { useEffect, useCallback, useState } from 'react'
+import { Divider, Button, Alert, CircularProgress } from '@mui/material'
+import { Grid } from '@mui/system'
+import { useForm, useWatch } from 'react-hook-form'
+import { Add } from '@mui/icons-material'
+import { CippOffCanvas } from './CippOffCanvas'
+import CippFormComponent from './CippFormComponent'
+import { CippFormTenantSelector } from './CippFormTenantSelector'
+import { CippFormCondition } from './CippFormCondition'
+import { CippApiResults } from './CippApiResults'
+import languageList from '../../data/languageList.json'
+import { ApiPostCall } from '../../api/ApiCall'
export const CippApplicationDeployDrawer = ({
- buttonText = "Add Application",
+ buttonText = 'Add Application',
requiredPermissions = [],
PermissionButton = Button,
}) => {
- const [drawerVisible, setDrawerVisible] = useState(false);
+ const [drawerVisible, setDrawerVisible] = useState(false)
const formControl = useForm({
- mode: "onChange",
- });
+ mode: 'onChange',
+ })
const selectedTenants = useWatch({
control: formControl.control,
- name: "selectedTenants",
- });
+ name: 'selectedTenants',
+ })
const applicationType = useWatch({
control: formControl.control,
- name: "appType",
- });
+ name: 'appType',
+ })
const searchQuerySelection = useWatch({
control: formControl.control,
- name: "packageSearch",
- });
+ name: 'packageSearch',
+ })
const updateSearchSelection = useCallback(
(searchQuerySelection) => {
if (searchQuerySelection) {
- formControl.setValue("packagename", searchQuerySelection.value.packagename);
- formControl.setValue("applicationName", searchQuerySelection.value.applicationName);
- formControl.setValue("description", searchQuerySelection.value.description);
+ formControl.setValue('packagename', searchQuerySelection.value.packagename)
+ formControl.setValue('applicationName', searchQuerySelection.value.applicationName)
+ formControl.setValue('description', searchQuerySelection.value.description)
searchQuerySelection.value.customRepo
- ? formControl.setValue("customRepo", searchQuerySelection.value.customRepo)
- : null;
+ ? formControl.setValue('customRepo', searchQuerySelection.value.customRepo)
+ : null
}
},
- [formControl.setValue],
- );
+ [formControl.setValue]
+ )
useEffect(() => {
- updateSearchSelection(searchQuerySelection);
- }, [updateSearchSelection, searchQuerySelection]);
+ updateSearchSelection(searchQuerySelection)
+ }, [updateSearchSelection, searchQuerySelection])
const postUrl = {
- mspApp: "/api/AddMSPApp",
- StoreApp: "/api/AddStoreApp",
- winGetApp: "/api/AddwinGetApp",
- chocolateyApp: "/api/AddChocoApp",
- officeApp: "/api/AddOfficeApp",
- win32ScriptApp: "/api/AddWin32ScriptApp",
- };
+ mspApp: '/api/AddMSPApp',
+ StoreApp: '/api/AddStoreApp',
+ winGetApp: '/api/AddwinGetApp',
+ chocolateyApp: '/api/AddChocoApp',
+ officeApp: '/api/AddOfficeApp',
+ win32ScriptApp: '/api/AddWin32ScriptApp',
+ }
const ChocosearchResults = ApiPostCall({
urlFromData: true,
- });
+ })
const winGetSearchResults = ApiPostCall({
urlFromData: true,
- });
+ })
const deployApplication = ApiPostCall({
urlFromData: true,
- relatedQueryKeys: ["Queued Applications"],
- });
+ relatedQueryKeys: ['Queued Applications'],
+ })
const searchApp = (searchText, type) => {
- if (type === "choco") {
+ if (type === 'choco') {
ChocosearchResults.mutate({
url: `/api/ListAppsRepository`,
data: { search: searchText },
queryKey: `SearchApp-${searchText}-${type}`,
- });
+ })
}
- if (type === "StoreApp") {
+ if (type === 'StoreApp') {
winGetSearchResults.mutate({
url: `/api/ListPotentialApps`,
- data: { searchString: searchText, type: "WinGet" },
+ data: { searchString: searchText, type: 'WinGet' },
queryKey: `SearchApp-${searchText}-${type}`,
- });
+ })
}
- };
+ }
const handleSubmit = () => {
- const formData = formControl.getValues();
- const formattedData = { ...formData };
- formattedData.tenantFilter = "allTenants"; //added to prevent issues with location check. temp fix
+ const formData = formControl.getValues()
+ const formattedData = { ...formData }
+ formattedData.tenantFilter = 'allTenants' //added to prevent issues with location check. temp fix
formattedData.selectedTenants = selectedTenants.map((tenant) => ({
defaultDomainName: tenant.value,
customerId: tenant.addedFields.customerId,
- }));
+ }))
deployApplication.mutate({
url: postUrl[applicationType?.value],
data: formattedData,
- relatedQueryKeys: ["Queued Applications"],
- });
- };
+ relatedQueryKeys: ['Queued Applications'],
+ })
+ }
const handleCloseDrawer = () => {
- setDrawerVisible(false);
- formControl.reset();
- };
+ setDrawerVisible(false)
+ formControl.reset()
+ }
return (
<>
@@ -130,7 +130,7 @@ export const CippApplicationDeployDrawer = ({
onClose={handleCloseDrawer}
size="xl"
footer={
-
+
{deployApplication.isLoading
- ? "Deploying..."
+ ? 'Deploying...'
: deployApplication.isSuccess
- ? "Deploy Another"
- : "Deploy Application"}
+ ? 'Deploy Another'
+ : 'Deploy Application'}
Close
@@ -156,16 +156,16 @@ export const CippApplicationDeployDrawer = ({
label="Select Application Type"
name="appType"
options={[
- { label: "MSP Vendor App", value: "mspApp" },
- { label: "Store App", value: "StoreApp" },
+ { label: 'MSP Vendor App', value: 'mspApp' },
+ { label: 'Store App', value: 'StoreApp' },
// uncomment after release { label: "WinGet App", value: "winGetApp" },
- { label: "Chocolatey App", value: "chocolateyApp" },
- { label: "Microsoft Office", value: "officeApp" },
- { label: "Custom Application", value: "win32ScriptApp" },
+ { label: 'Chocolatey App', value: 'chocolateyApp' },
+ { label: 'Microsoft Office', value: 'officeApp' },
+ { label: 'Custom Application', value: 'win32ScriptApp' },
]}
multiple={false}
formControl={formControl}
- validators={{ required: "Please select an application type" }}
+ validators={{ required: 'Please select an application type' }}
/>
{/* Tenant Selector */}
@@ -177,7 +177,7 @@ export const CippApplicationDeployDrawer = ({
type="multiple"
allTenants={true}
preselectedEnabled={true}
- validators={{ required: "At least one tenant must be selected" }}
+ validators={{ required: 'At least one tenant must be selected' }}
/>
@@ -195,23 +195,23 @@ export const CippApplicationDeployDrawer = ({
label="Select MSP Tool"
name="rmmname"
options={[
- { value: "datto", label: "Datto RMM", isSponsor: false },
- { value: "syncro", label: "Syncro RMM", isSponsor: true },
- { value: "huntress", label: "Huntress", isSponsor: true },
+ { value: 'datto', label: 'Datto RMM', isSponsor: false },
+ { value: 'syncro', label: 'Syncro RMM', isSponsor: true },
+ { value: 'huntress', label: 'Huntress', isSponsor: true },
{
- value: "automate",
- label: "CW Automate",
+ value: 'automate',
+ label: 'CW Automate',
isSponsor: false,
},
{
- value: "cwcommand",
- label: "CW Command",
+ value: 'cwcommand',
+ label: 'CW Command',
isSponsor: false,
},
]}
formControl={formControl}
multiple={false}
- validators={{ required: "Please select an MSP Tool" }}
+ validators={{ required: 'Please select an MSP Tool' }}
/>
@@ -247,7 +247,7 @@ export const CippApplicationDeployDrawer = ({
label="Server URL (e.g., https://pinotage.rmm.datto.com)"
name="params.dattoUrl"
formControl={formControl}
- validators={{ required: "Server URL is required" }}
+ validators={{ required: 'Server URL is required' }}
/>
{selectedTenants?.map((tenant, index) => (
@@ -296,7 +296,7 @@ export const CippApplicationDeployDrawer = ({
label="Account Key"
name="params.AccountKey"
formControl={formControl}
- validators={{ required: "Account Key is required" }}
+ validators={{ required: 'Account Key is required' }}
/>
{selectedTenants?.map((tenant, index) => (
@@ -325,7 +325,7 @@ export const CippApplicationDeployDrawer = ({
label="Automate Server (including HTTPS)"
name="params.Server"
formControl={formControl}
- validators={{ required: "Automate Server is required" }}
+ validators={{ required: 'Automate Server is required' }}
/>
{selectedTenants?.map((tenant, index) => (
@@ -381,11 +381,11 @@ export const CippApplicationDeployDrawer = ({
type="radio"
name="AssignTo"
options={[
- { label: "Do not assign", value: "On" },
- { label: "Assign to all users", value: "allLicensedUsers" },
- { label: "Assign to all devices", value: "AllDevices" },
- { label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
- { label: "Assign to Custom Group", value: "customGroup" },
+ { label: 'Do not assign', value: 'On' },
+ { label: 'Assign to all users', value: 'allLicensedUsers' },
+ { label: 'Assign to all devices', value: 'AllDevices' },
+ { label: 'Assign to all users and devices', value: 'AllDevicesAndUsers' },
+ { label: 'Assign to Custom Group', value: 'customGroup' },
]}
formControl={formControl}
row
@@ -403,7 +403,7 @@ export const CippApplicationDeployDrawer = ({
label="Custom Group Names separated by comma. Wildcards (*) are allowed"
name="customGroup"
formControl={formControl}
- validators={{ required: "Please specify custom group names" }}
+ validators={{ required: 'Please specify custom group names' }}
/>
@@ -427,7 +427,7 @@ export const CippApplicationDeployDrawer = ({
{
- searchApp(formControl.getValues("searchQuery"), "StoreApp");
+ searchApp(formControl.getValues('searchQuery'), 'StoreApp')
}}
disabled={winGetSearchResults.isPending}
>
@@ -460,7 +460,7 @@ export const CippApplicationDeployDrawer = ({
label="WinGet Package Identifier"
name="packagename"
formControl={formControl}
- validators={{ required: "Package Identifier is required" }}
+ validators={{ required: 'Package Identifier is required' }}
/>
@@ -469,7 +469,7 @@ export const CippApplicationDeployDrawer = ({
label="Application Name"
name="applicationName"
formControl={formControl}
- validators={{ required: "Application Name is required" }}
+ validators={{ required: 'Application Name is required' }}
/>
@@ -497,11 +497,11 @@ export const CippApplicationDeployDrawer = ({
type="radio"
name="AssignTo"
options={[
- { label: "Do not assign", value: "On" },
- { label: "Assign to all users", value: "allLicensedUsers" },
- { label: "Assign to all devices", value: "AllDevices" },
- { label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
- { label: "Assign to Custom Group", value: "customGroup" },
+ { label: 'Do not assign', value: 'On' },
+ { label: 'Assign to all users', value: 'allLicensedUsers' },
+ { label: 'Assign to all devices', value: 'AllDevices' },
+ { label: 'Assign to all users and devices', value: 'AllDevicesAndUsers' },
+ { label: 'Assign to Custom Group', value: 'customGroup' },
]}
formControl={formControl}
row
@@ -519,7 +519,7 @@ export const CippApplicationDeployDrawer = ({
label="Custom Group Names separated by comma. Wildcards (*) are allowed"
name="customGroup"
formControl={formControl}
- validators={{ required: "Please specify custom group names" }}
+ validators={{ required: 'Please specify custom group names' }}
/>
@@ -543,7 +543,7 @@ export const CippApplicationDeployDrawer = ({
{
- searchApp(formControl.getValues("searchQuery"), "choco");
+ searchApp(formControl.getValues('searchQuery'), 'choco')
}}
disabled={ChocosearchResults.isPending}
>
@@ -576,7 +576,7 @@ export const CippApplicationDeployDrawer = ({
label="Chocolatey Package Name"
name="packagename"
formControl={formControl}
- validators={{ required: "Package Name is required" }}
+ validators={{ required: 'Package Name is required' }}
/>
@@ -585,7 +585,7 @@ export const CippApplicationDeployDrawer = ({
label="Application Name"
name="applicationName"
formControl={formControl}
- validators={{ required: "Application Name is required" }}
+ validators={{ required: 'Application Name is required' }}
/>
@@ -643,11 +643,11 @@ export const CippApplicationDeployDrawer = ({
type="radio"
name="AssignTo"
options={[
- { label: "Do not assign", value: "On" },
- { label: "Assign to all users", value: "allLicensedUsers" },
- { label: "Assign to all devices", value: "AllDevices" },
- { label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
- { label: "Assign to Custom Group", value: "customGroup" },
+ { label: 'Do not assign', value: 'On' },
+ { label: 'Assign to all users', value: 'allLicensedUsers' },
+ { label: 'Assign to all devices', value: 'AllDevices' },
+ { label: 'Assign to all users and devices', value: 'AllDevicesAndUsers' },
+ { label: 'Assign to Custom Group', value: 'customGroup' },
]}
formControl={formControl}
row
@@ -665,7 +665,7 @@ export const CippApplicationDeployDrawer = ({
label="Custom Group Names separated by comma. Wildcards (*) are allowed"
name="customGroup"
formControl={formControl}
- validators={{ required: "Please specify custom group names" }}
+ validators={{ required: 'Please specify custom group names' }}
/>
@@ -684,16 +684,16 @@ export const CippApplicationDeployDrawer = ({
label="Excluded Apps"
name="excludedApps"
options={[
- { value: "access", label: "Access" },
- { value: "excel", label: "Excel" },
- { value: "oneNote", label: "OneNote" },
- { value: "outlook", label: "Outlook" },
- { value: "powerPoint", label: "PowerPoint" },
- { value: "publisher", label: "Publisher" },
- { value: "teams", label: "Teams" },
- { value: "word", label: "Word" },
- { value: "lync", label: "Skype For Business" },
- { value: "bing", label: "Bing" },
+ { value: 'access', label: 'Access' },
+ { value: 'excel', label: 'Excel' },
+ { value: 'oneNote', label: 'OneNote' },
+ { value: 'outlook', label: 'Outlook' },
+ { value: 'powerPoint', label: 'PowerPoint' },
+ { value: 'publisher', label: 'Publisher' },
+ { value: 'teams', label: 'Teams' },
+ { value: 'word', label: 'Word' },
+ { value: 'lync', label: 'Skype For Business' },
+ { value: 'bing', label: 'Bing' },
]}
multiple={true}
formControl={formControl}
@@ -705,15 +705,15 @@ export const CippApplicationDeployDrawer = ({
label="Update Channel"
name="updateChannel"
options={[
- { value: "current", label: "Current Channel" },
- { value: "firstReleaseCurrent", label: "Current (Preview)" },
- { value: "monthlyEnterprise", label: "Monthly Enterprise" },
- { value: "deferred", label: "Semi-Annual Enterprise" },
- { value: "firstReleaseDeferred", label: "Semi-Annual Enterprise (Preview)" },
+ { value: 'current', label: 'Current Channel' },
+ { value: 'firstReleaseCurrent', label: 'Current (Preview)' },
+ { value: 'monthlyEnterprise', label: 'Monthly Enterprise' },
+ { value: 'deferred', label: 'Semi-Annual Enterprise' },
+ { value: 'firstReleaseDeferred', label: 'Semi-Annual Enterprise (Preview)' },
]}
multiple={false}
formControl={formControl}
- validators={{ required: "Please select an update channel" }}
+ validators={{ required: 'Please select an update channel' }}
/>
@@ -727,7 +727,7 @@ export const CippApplicationDeployDrawer = ({
}))}
multiple={true}
formControl={formControl}
- validators={{ required: "Please select at least one language" }}
+ validators={{ required: 'Please select at least one language' }}
/>
@@ -787,14 +787,14 @@ export const CippApplicationDeployDrawer = ({
formControl={formControl}
multiline
rows={10}
- validators={{ required: "Please provide custom XML configuration" }}
+ validators={{ required: 'Please provide custom XML configuration' }}
/>
Provide a custom Office Configuration XML. When using custom XML, all other Office
- configuration options above will be ignored. See{" "}
+ configuration options above will be ignored. See{' '}
Office Customization Tool
- {" "}
+ {' '}
to generate XML.
@@ -806,15 +806,32 @@ export const CippApplicationDeployDrawer = ({
type="radio"
name="AssignTo"
options={[
- { label: "Do not assign", value: "On" },
- { label: "Assign to all users", value: "allLicensedUsers" },
- { label: "Assign to all devices", value: "AllDevices" },
- { label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
+ { label: 'Do not assign', value: 'On' },
+ { label: 'Assign to all users', value: 'allLicensedUsers' },
+ { label: 'Assign to all devices', value: 'AllDevices' },
+ { label: 'Assign to all users and devices', value: 'AllDevicesAndUsers' },
+ { label: 'Assign to Custom Group', value: 'customGroup' },
]}
formControl={formControl}
row
/>
+
+
+
+
+
{/* Win32 Script App Section */}
@@ -830,7 +847,7 @@ export const CippApplicationDeployDrawer = ({
label="Application Name"
name="applicationName"
formControl={formControl}
- validators={{ required: "Application Name is required" }}
+ validators={{ required: 'Application Name is required' }}
/>
@@ -857,7 +874,7 @@ export const CippApplicationDeployDrawer = ({
formControl={formControl}
multiline
rows={8}
- validators={{ required: "Install script is required" }}
+ validators={{ required: 'Install script is required' }}
/>
@@ -892,7 +909,9 @@ export const CippApplicationDeployDrawer = ({
formControl={formControl}
multiline
rows={6}
- validators={{ required: "Detection script is required when using script detection" }}
+ validators={{
+ required: 'Detection script is required when using script detection',
+ }}
/>
@@ -960,11 +979,11 @@ export const CippApplicationDeployDrawer = ({
type="radio"
name="AssignTo"
options={[
- { label: "Do not assign", value: "On" },
- { label: "Assign to all users", value: "allLicensedUsers" },
- { label: "Assign to all devices", value: "AllDevices" },
- { label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
- { label: "Assign to Custom Group", value: "customGroup" },
+ { label: 'Do not assign', value: 'On' },
+ { label: 'Assign to all users', value: 'allLicensedUsers' },
+ { label: 'Assign to all devices', value: 'AllDevices' },
+ { label: 'Assign to all users and devices', value: 'AllDevicesAndUsers' },
+ { label: 'Assign to Custom Group', value: 'customGroup' },
]}
formControl={formControl}
row
@@ -982,7 +1001,7 @@ export const CippApplicationDeployDrawer = ({
label="Custom Group Names separated by comma. Wildcards (*) are allowed"
name="customGroup"
formControl={formControl}
- validators={{ required: "Please specify custom group names" }}
+ validators={{ required: 'Please specify custom group names' }}
/>
@@ -992,5 +1011,5 @@ export const CippApplicationDeployDrawer = ({
>
- );
-};
+ )
+}
From 445820dddc1438aa87d4b57d523784a9a5f2fb04 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Tue, 12 May 2026 02:01:46 +0800
Subject: [PATCH 144/181] Better intune policy support for alltenants list
---
.../CippComponents/CippIntunePolicyDetails.jsx | 2 +-
src/components/CippFormPages/CippJSONView.jsx | 10 ++++++----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/components/CippComponents/CippIntunePolicyDetails.jsx b/src/components/CippComponents/CippIntunePolicyDetails.jsx
index 064230da3e18..b1820e1c47b8 100644
--- a/src/components/CippComponents/CippIntunePolicyDetails.jsx
+++ b/src/components/CippComponents/CippIntunePolicyDetails.jsx
@@ -60,5 +60,5 @@ export const CippIntunePolicyDetails = ({ row, tenant }) => {
)
}
- return
+ return
}
diff --git a/src/components/CippFormPages/CippJSONView.jsx b/src/components/CippFormPages/CippJSONView.jsx
index f5044792b149..fb69ef966b37 100644
--- a/src/components/CippFormPages/CippJSONView.jsx
+++ b/src/components/CippFormPages/CippJSONView.jsx
@@ -248,27 +248,29 @@ function CippJsonView({
type,
defaultOpen = false,
title = 'Policy Details',
+ tenant = null,
}) {
const [viewJson, setViewJson] = useState(false)
const [accordionOpen, setAccordionOpen] = useState(defaultOpen)
const [drilldownData, setDrilldownData] = useState([]) // Array of { data, title }
+ const objectTenant =
+ tenant || object?.Tenant || object?.tenant || object?.TenantFilter || object?.tenantFilter || null
+
// Use the GUID resolver hook
- const { guidMapping, isLoadingGuids, resolveGuids, isGuid } = useGuidResolver()
+ const { guidMapping, isLoadingGuids, resolveGuids, isGuid } = useGuidResolver(objectTenant)
const resolvedType =
type ||
(object?.omaSettings || object?.settings || object?.definitionValues || object?.added
? 'intune'
: undefined)
- const adminTemplateTenant =
- object?.Tenant || object?.tenant || object?.TenantFilter || object?.tenantFilter || null
const {
definitionsMap: addedDefinitionsMap,
isLoadingDefinitions,
isDefinitionsError,
} = useAdminTemplateDefinitions({
added: object?.added,
- manualTenant: adminTemplateTenant,
+ manualTenant: objectTenant,
waiting: resolvedType === 'intune',
})
From 55dd9cc22fab7e05f07214f55acc92743faf8829 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Tue, 12 May 2026 02:04:38 +0800
Subject: [PATCH 145/181] HVE user page
---
.../CippComponents/CippHVEUserDrawer.jsx | 8 +-
.../CippComponents/CippNotificationForm.jsx | 1 +
src/data/CIPPDBCacheTypes.json | 5 +
src/layouts/config.js | 5 +
.../administration/hve-accounts/index.js | 204 ++++++++++++++++++
.../email/administration/mailboxes/index.js | 2 -
6 files changed, 221 insertions(+), 4 deletions(-)
create mode 100644 src/pages/email/administration/hve-accounts/index.js
diff --git a/src/components/CippComponents/CippHVEUserDrawer.jsx b/src/components/CippComponents/CippHVEUserDrawer.jsx
index 3c4ba53ca852..56505c0f18dd 100644
--- a/src/components/CippComponents/CippHVEUserDrawer.jsx
+++ b/src/components/CippComponents/CippHVEUserDrawer.jsx
@@ -98,7 +98,8 @@ export const CippHVEUserDrawer = ({
HVE SMTP Configuration Settings:
- Server: smtp-hve.office365.com
+ Server: smtp.hve.mx.microsoft (recommended) or
+ smtp-hve.office365.com (deprecated)
Port: 587
@@ -109,9 +110,12 @@ export const CippHVEUserDrawer = ({
TLS Support: TLS 1.2 and TLS 1.3
+
+ Authentication: HVE account credentials or OAuth token
+
- Use these settings to configure your email client for HVE access.
+ Use these settings to configure your application or device for HVE access.
diff --git a/src/components/CippComponents/CippNotificationForm.jsx b/src/components/CippComponents/CippNotificationForm.jsx
index 03ecce096ec9..f2f74b19d7f1 100644
--- a/src/components/CippComponents/CippNotificationForm.jsx
+++ b/src/components/CippComponents/CippNotificationForm.jsx
@@ -42,6 +42,7 @@ export const CippNotificationForm = ({
{ label: "Adding a group", value: "AddGroup" },
{ label: "Adding a tenant", value: "NewTenant" },
{ label: "Executing the offboard wizard", value: "ExecOffboardUser" },
+ { label: "Custom Test Alerts", value: "CustomTests" },
];
const severityTypes = [
diff --git a/src/data/CIPPDBCacheTypes.json b/src/data/CIPPDBCacheTypes.json
index 8742001441cd..0d0588d2b624 100644
--- a/src/data/CIPPDBCacheTypes.json
+++ b/src/data/CIPPDBCacheTypes.json
@@ -244,6 +244,11 @@
"friendlyName": "Mailboxes",
"description": "All Exchange Online mailboxes"
},
+ {
+ "type": "HVEAccounts",
+ "friendlyName": "HVE Accounts",
+ "description": "High Volume Email accounts"
+ },
{
"type": "CASMailboxes",
"friendlyName": "CAS Mailboxes",
diff --git a/src/layouts/config.js b/src/layouts/config.js
index 0cc0c8ec303b..ad0004307a96 100644
--- a/src/layouts/config.js
+++ b/src/layouts/config.js
@@ -674,6 +674,11 @@ export const nativeMenuItems = [
path: '/email/administration/mailboxes',
permissions: ['Exchange.Mailbox.*'],
},
+ {
+ title: 'HVE Accounts',
+ path: '/email/administration/hve-accounts',
+ permissions: ['Exchange.Mailbox.*'],
+ },
{
title: 'Deleted Mailboxes',
path: '/email/administration/deleted-mailboxes',
diff --git a/src/pages/email/administration/hve-accounts/index.js b/src/pages/email/administration/hve-accounts/index.js
new file mode 100644
index 000000000000..265884d44650
--- /dev/null
+++ b/src/pages/email/administration/hve-accounts/index.js
@@ -0,0 +1,204 @@
+import { Layout as DashboardLayout } from '../../../../layouts/index.js'
+import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { CippHVEUserDrawer } from '../../../../components/CippComponents/CippHVEUserDrawer.jsx'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
+import { Stack } from '@mui/system'
+import { TrashIcon } from '@heroicons/react/24/outline'
+import {
+ Edit,
+ AlternateEmail,
+ Receipt,
+ RemoveCircleOutline,
+ Reply,
+} from '@mui/icons-material'
+
+const Page = () => {
+ const pageTitle = 'HVE Accounts'
+
+ const reportDB = useCippReportDB({
+ apiUrl: '/api/ListHVEAccounts',
+ queryKey: 'ListHVEAccounts',
+ cacheName: 'HVEAccounts',
+ syncTitle: 'Sync HVE Accounts',
+ allowToggle: true,
+ defaultCached: true,
+ })
+
+ const actions = [
+ {
+ label: 'Edit Display Name',
+ type: 'POST',
+ url: '/api/ExecHVEUser',
+ icon: ,
+ data: { Identity: 'primarySmtpAddress', Action: 'Edit' },
+ fields: [
+ {
+ type: 'textField',
+ name: 'DisplayName',
+ label: 'Display Name',
+ },
+ ],
+ confirmText: 'Update display name for [primarySmtpAddress]',
+ hideBulk: true,
+ },
+ {
+ label: 'Set Reply-To Address',
+ type: 'POST',
+ url: '/api/ExecHVEUser',
+ icon: ,
+ data: { Identity: 'primarySmtpAddress', Action: 'Edit' },
+ fields: [
+ {
+ type: 'textField',
+ name: 'ReplyTo',
+ label: 'Reply-To Address',
+ placeholder: 'e.g. replies@contoso.com (leave empty to clear)',
+ },
+ ],
+ confirmText: 'Update reply-to address for [primarySmtpAddress]',
+ hideBulk: true,
+ },
+ {
+ label: 'Change Primary SMTP Address',
+ type: 'POST',
+ url: '/api/ExecHVEUser',
+ icon: ,
+ data: { Identity: 'primarySmtpAddress', Action: 'Edit' },
+ fields: [
+ {
+ type: 'textField',
+ name: 'username',
+ label: 'Username (local part)',
+ placeholder: 'e.g. hveaccount01',
+ },
+ {
+ type: 'autoComplete',
+ name: 'domain',
+ label: 'Domain',
+ api: {
+ url: '/api/ListGraphRequest',
+ dataKey: 'Results',
+ queryKey: 'listDomains-hve',
+ labelField: (option) => option.id,
+ valueField: 'id',
+ addedField: {
+ isDefault: 'isDefault',
+ isVerified: 'isVerified',
+ },
+ data: {
+ Endpoint: 'domains',
+ manualPagination: true,
+ $count: true,
+ $top: 99,
+ },
+ dataFilter: (domains) =>
+ domains
+ .filter((d) => d?.addedFields?.isVerified === true)
+ .sort((a, b) => {
+ if (a.addedFields?.isDefault === true) return -1
+ if (b.addedFields?.isDefault === true) return 1
+ return 0
+ }),
+ },
+ },
+ ],
+ confirmText: 'Change primary SMTP address for [primarySmtpAddress]',
+ hideBulk: true,
+ },
+ {
+ label: 'Assign Billing Policy',
+ type: 'POST',
+ url: '/api/ExecHVEUser',
+ icon: ,
+ data: { Identity: 'primarySmtpAddress', Action: 'AssignBillingPolicy' },
+ fields: [
+ {
+ type: 'autoComplete',
+ name: 'BillingPolicyId',
+ label: 'Billing Policy',
+ multiple: false,
+ api: {
+ url: '/api/ListHVEAccounts',
+ queryKey: 'ListHVEBillingPolicies',
+ labelField: (option) =>
+ `${option.Name || option.BillingPolicyName || option.BillingPolicyId} (${option.BillingPolicyId || option.Guid || option.Identity})`,
+ valueField: (option) => option.BillingPolicyId || option.Guid || option.Identity,
+ data: {
+ ListBillingPolicies: true,
+ },
+ },
+ },
+ ],
+ confirmText: 'Assign billing policy to [primarySmtpAddress]. Current policy: [BillingPolicyName]',
+ hideBulk: true,
+ },
+ {
+ label: 'Remove Billing Policy',
+ type: 'POST',
+ url: '/api/ExecHVEUser',
+ icon: ,
+ data: { Identity: 'primarySmtpAddress', Action: 'RemoveBillingPolicy' },
+ confirmText:
+ 'Remove billing policy [BillingPolicyName] from [primarySmtpAddress]?',
+ condition: (row) => row.BillingPolicyName && row.BillingPolicyName !== 'None',
+ hideBulk: true,
+ },
+ {
+ label: 'Delete HVE Account',
+ type: 'POST',
+ icon: ,
+ url: '/api/ExecHVEUser',
+ data: { Identity: 'primarySmtpAddress', Action: 'Remove' },
+ confirmText: 'Are you sure you want to delete HVE account [primarySmtpAddress]?',
+ multiPost: false,
+ },
+ ]
+
+ const offCanvas = {
+ extendedInfoFields: [
+ 'displayName',
+ 'primarySmtpAddress',
+ 'Alias',
+ 'AdditionalEmailAddresses',
+ 'BillingPolicyName',
+ 'BillingPolicyId',
+ 'WhenCreated',
+ 'ExternalDirectoryObjectId',
+ ],
+ actions: actions,
+ }
+
+ const simpleColumns = [
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
+ 'displayName',
+ 'primarySmtpAddress',
+ 'Alias',
+ 'WhenCreated',
+ 'AdditionalEmailAddresses',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
+ ]
+
+ return (
+ <>
+
+
+ {reportDB.controls}
+
+ }
+ />
+ {reportDB.syncDialog}
+ >
+ )
+}
+
+Page.getLayout = (page) => {page}
+
+export default Page
diff --git a/src/pages/email/administration/mailboxes/index.js b/src/pages/email/administration/mailboxes/index.js
index f0187d414983..01bc84afae65 100644
--- a/src/pages/email/administration/mailboxes/index.js
+++ b/src/pages/email/administration/mailboxes/index.js
@@ -1,7 +1,6 @@
import { Layout as DashboardLayout } from '../../../../layouts/index.js'
import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
import CippExchangeActions from '../../../../components/CippComponents/CippExchangeActions'
-import { CippHVEUserDrawer } from '../../../../components/CippComponents/CippHVEUserDrawer.jsx'
import { CippSharedMailboxDrawer } from '../../../../components/CippComponents/CippSharedMailboxDrawer.jsx'
import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
import { Stack } from '@mui/system'
@@ -71,7 +70,6 @@ const Page = () => {
cardButton={
-
{reportDB.controls}
}
From 9cee69d460f246f83583316091ba86170f73f172 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Mon, 11 May 2026 20:13:45 +0200
Subject: [PATCH 146/181] eclusions everywhere
---
.../CippComponents/CippAppTemplateDrawer.jsx | 15 ++++
.../CippApplicationDeployDrawer.jsx | 75 +++++++++++++++++++
.../CippIntunePolicyActions.jsx | 7 ++
.../CippComponents/CippPolicyDeployDrawer.jsx | 15 ++++
.../CippWizard/CippIntunePolicy.jsx | 15 ++++
.../endpoint/applications/templates/index.js | 6 ++
6 files changed, 133 insertions(+)
diff --git a/src/components/CippComponents/CippAppTemplateDrawer.jsx b/src/components/CippComponents/CippAppTemplateDrawer.jsx
index e9db8701f3d6..4727f66988f2 100644
--- a/src/components/CippComponents/CippAppTemplateDrawer.jsx
+++ b/src/components/CippComponents/CippAppTemplateDrawer.jsx
@@ -892,6 +892,21 @@ export const CippAppTemplateDrawer = ({
/>
+
+
+
+
+
{/* Add App Button */}
{applicationType?.value && (
diff --git a/src/components/CippComponents/CippApplicationDeployDrawer.jsx b/src/components/CippComponents/CippApplicationDeployDrawer.jsx
index 56c7ecae0655..a68ade232835 100644
--- a/src/components/CippComponents/CippApplicationDeployDrawer.jsx
+++ b/src/components/CippComponents/CippApplicationDeployDrawer.jsx
@@ -407,6 +407,21 @@ export const CippApplicationDeployDrawer = ({
/>
+
+
+
+
+
{/* WinGet App Section */}
@@ -523,6 +538,21 @@ export const CippApplicationDeployDrawer = ({
/>
+
+
+
+
+
{/* Chocolatey App Section */}
@@ -669,6 +699,21 @@ export const CippApplicationDeployDrawer = ({
/>
+
+
+
+
+
{/* Office App Section */}
@@ -832,6 +877,21 @@ export const CippApplicationDeployDrawer = ({
/>
+
+
+
+
+
{/* Win32 Script App Section */}
@@ -1005,6 +1065,21 @@ export const CippApplicationDeployDrawer = ({
/>
+
+
+
+
+
diff --git a/src/components/CippComponents/CippIntunePolicyActions.jsx b/src/components/CippComponents/CippIntunePolicyActions.jsx
index 531245e94625..c3052bd20a15 100644
--- a/src/components/CippComponents/CippIntunePolicyActions.jsx
+++ b/src/components/CippComponents/CippIntunePolicyActions.jsx
@@ -63,6 +63,11 @@ export const useCippIntunePolicyActions = (tenant, policyType, options = {}) =>
defaultValue: "include",
helperText: "Choose whether to include or exclude devices matching the filter.",
},
+ {
+ type: "textField",
+ name: "excludeGroup",
+ label: "Exclude Group Names separated by comma. Wildcards (*) are allowed",
+ },
];
const getCustomDataFormatter = (assignTo) => (row, action, formData) => {
@@ -74,6 +79,7 @@ export const useCippIntunePolicyActions = (tenant, policyType, options = {}) =>
...(platformType && { platformType }),
AssignTo: assignTo,
assignmentMode: formData?.assignmentMode || "replace",
+ excludeGroup: formData?.excludeGroup || null,
AssignmentFilterName: formData?.assignmentFilter?.value || null,
AssignmentFilterType: formData?.assignmentFilter?.value
? formData?.assignmentFilterType || "include"
@@ -92,6 +98,7 @@ export const useCippIntunePolicyActions = (tenant, policyType, options = {}) =>
GroupIds: selectedGroups.map((group) => group.value).filter(Boolean),
GroupNames: selectedGroups.map((group) => group.label).filter(Boolean),
assignmentMode: formData?.assignmentMode || "replace",
+ excludeGroup: formData?.excludeGroup || null,
AssignmentFilterName: formData?.assignmentFilter?.value || null,
AssignmentFilterType: formData?.assignmentFilter?.value
? formData?.assignmentFilterType || "include"
diff --git a/src/components/CippComponents/CippPolicyDeployDrawer.jsx b/src/components/CippComponents/CippPolicyDeployDrawer.jsx
index 3810581daea9..ad695d39cace 100644
--- a/src/components/CippComponents/CippPolicyDeployDrawer.jsx
+++ b/src/components/CippComponents/CippPolicyDeployDrawer.jsx
@@ -201,6 +201,21 @@ export const CippPolicyDeployDrawer = ({
/>
+
+
+
+
+
{
/>
+
+
+
+
+
{
name: "customGroup",
label: "Custom Group Names (comma separated, wildcards allowed)",
},
+ {
+ type: "textField",
+ name: "excludeGroup",
+ label: "Exclude Group Names (comma separated, wildcards allowed)",
+ },
],
customDataformatter: (row, action, formData) => ({
templateId: row.GUID,
@@ -127,6 +132,7 @@ const Page = () => {
})),
AssignTo: formData?.AssignTo || "",
customGroup: formData?.customGroup || "",
+ excludeGroup: formData?.excludeGroup || "",
}),
confirmText: 'Deploy "[displayName]" ([appCount] apps) to the selected tenants?',
},
From 14461b4f68c5f6e3214512a575d585439d9cbbd7 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Mon, 11 May 2026 20:13:49 +0200
Subject: [PATCH 147/181] eclusions everywhere
---
.../CippIntunePolicyActions.jsx | 212 +++++++++---------
.../CippWizard/CippIntunePolicy.jsx | 138 ++++++------
.../endpoint/applications/templates/index.js | 172 +++++++-------
3 files changed, 261 insertions(+), 261 deletions(-)
diff --git a/src/components/CippComponents/CippIntunePolicyActions.jsx b/src/components/CippComponents/CippIntunePolicyActions.jsx
index c3052bd20a15..09faf1efebf5 100644
--- a/src/components/CippComponents/CippIntunePolicyActions.jsx
+++ b/src/components/CippComponents/CippIntunePolicyActions.jsx
@@ -1,15 +1,15 @@
-import { Book, LaptopChromebook } from "@mui/icons-material";
-import { GlobeAltIcon, TrashIcon, UserIcon, UserGroupIcon } from "@heroicons/react/24/outline";
+import { Book, LaptopChromebook } from '@mui/icons-material'
+import { GlobeAltIcon, TrashIcon, UserIcon, UserGroupIcon } from '@heroicons/react/24/outline'
const assignmentModeOptions = [
- { label: "Replace existing assignments", value: "replace" },
- { label: "Append to existing assignments", value: "append" },
-];
+ { label: 'Replace existing assignments', value: 'replace' },
+ { label: 'Append to existing assignments', value: 'append' },
+]
const assignmentFilterTypeOptions = [
- { label: "Include - Apply policy to devices matching filter", value: "include" },
- { label: "Exclude - Apply policy to devices NOT matching filter", value: "exclude" },
-];
+ { label: 'Include - Apply policy to devices matching filter', value: 'include' },
+ { label: 'Exclude - Apply policy to devices NOT matching filter', value: 'exclude' },
+]
/**
* Get assignment actions for Intune policies
@@ -30,191 +30,191 @@ export const useCippIntunePolicyActions = (tenant, policyType, options = {}) =>
includeDelete = true,
deleteUrlName = policyType,
templateData = null,
- } = options;
+ } = options
const getAssignmentFields = () => [
{
- type: "radio",
- name: "assignmentMode",
- label: "Assignment mode",
+ type: 'radio',
+ name: 'assignmentMode',
+ label: 'Assignment mode',
options: assignmentModeOptions,
- defaultValue: "replace",
+ defaultValue: 'replace',
helperText:
- "Replace will overwrite existing assignments. Append keeps current assignments and adds/overwrites only for the selected groups.",
+ 'Replace will overwrite existing assignments. Append keeps current assignments and adds/overwrites only for the selected groups.',
},
{
- type: "autoComplete",
- name: "assignmentFilter",
- label: "Assignment Filter (Optional)",
+ type: 'autoComplete',
+ name: 'assignmentFilter',
+ label: 'Assignment Filter (Optional)',
multiple: false,
creatable: false,
api: {
- url: "/api/ListAssignmentFilters",
+ url: '/api/ListAssignmentFilters',
queryKey: `ListAssignmentFilters-${tenant}`,
labelField: (filter) => filter.displayName,
- valueField: "displayName",
+ valueField: 'displayName',
},
},
{
- type: "radio",
- name: "assignmentFilterType",
- label: "Assignment Filter Mode",
+ type: 'radio',
+ name: 'assignmentFilterType',
+ label: 'Assignment Filter Mode',
options: assignmentFilterTypeOptions,
- defaultValue: "include",
- helperText: "Choose whether to include or exclude devices matching the filter.",
+ defaultValue: 'include',
+ helperText: 'Choose whether to include or exclude devices matching the filter.',
},
{
- type: "textField",
- name: "excludeGroup",
- label: "Exclude Group Names separated by comma. Wildcards (*) are allowed",
+ type: 'textField',
+ name: 'excludeGroup',
+ label: 'Exclude Group Names separated by comma. Wildcards (*) are allowed',
},
- ];
+ ]
const getCustomDataFormatter = (assignTo) => (row, action, formData) => {
- const rows = Array.isArray(row) ? row : [row];
+ const rows = Array.isArray(row) ? row : [row]
return rows.map((item) => ({
- tenantFilter: tenant === "AllTenants" && item?.Tenant ? item.Tenant : tenant,
+ tenantFilter: tenant === 'AllTenants' && item?.Tenant ? item.Tenant : tenant,
ID: item?.id,
type: item?.URLName || policyType,
...(platformType && { platformType }),
AssignTo: assignTo,
- assignmentMode: formData?.assignmentMode || "replace",
+ assignmentMode: formData?.assignmentMode || 'replace',
excludeGroup: formData?.excludeGroup || null,
AssignmentFilterName: formData?.assignmentFilter?.value || null,
AssignmentFilterType: formData?.assignmentFilter?.value
- ? formData?.assignmentFilterType || "include"
+ ? formData?.assignmentFilterType || 'include'
: null,
- }));
- };
+ }))
+ }
const getCustomDataFormatterForGroups = () => (row, action, formData) => {
- const rows = Array.isArray(row) ? row : [row];
- const selectedGroups = Array.isArray(formData?.groupTargets) ? formData.groupTargets : [];
+ const rows = Array.isArray(row) ? row : [row]
+ const selectedGroups = Array.isArray(formData?.groupTargets) ? formData.groupTargets : []
return rows.map((item) => ({
- tenantFilter: tenant === "AllTenants" && item?.Tenant ? item.Tenant : tenant,
+ tenantFilter: tenant === 'AllTenants' && item?.Tenant ? item.Tenant : tenant,
ID: item?.id,
type: item?.URLName || policyType,
...(platformType && { platformType }),
GroupIds: selectedGroups.map((group) => group.value).filter(Boolean),
GroupNames: selectedGroups.map((group) => group.label).filter(Boolean),
- assignmentMode: formData?.assignmentMode || "replace",
+ assignmentMode: formData?.assignmentMode || 'replace',
excludeGroup: formData?.excludeGroup || null,
AssignmentFilterName: formData?.assignmentFilter?.value || null,
AssignmentFilterType: formData?.assignmentFilter?.value
- ? formData?.assignmentFilterType || "include"
+ ? formData?.assignmentFilterType || 'include'
: null,
- }));
- };
+ }))
+ }
- const actions = [];
+ const actions = []
// Create template action
if (includeCreateTemplate) {
actions.push({
- label: "Create template based on policy",
- type: "POST",
- url: "/api/AddIntuneTemplate",
+ label: 'Create template based on policy',
+ type: 'POST',
+ url: '/api/AddIntuneTemplate',
data: templateData || {
- ID: "id",
- URLName: policyType === "URLName" ? "URLName" : policyType,
+ ID: 'id',
+ URLName: policyType === 'URLName' ? 'URLName' : policyType,
},
- confirmText: "Are you sure you want to create a template based on this policy?",
+ confirmText: 'Are you sure you want to create a template based on this policy?',
icon: ,
- color: "info",
+ color: 'info',
multiPost: false,
- });
+ })
}
// Assign to All Users
actions.push({
- label: "Assign to All Users",
- type: "POST",
- url: "/api/ExecAssignPolicy",
+ label: 'Assign to All Users',
+ type: 'POST',
+ url: '/api/ExecAssignPolicy',
data: {
- AssignTo: "allLicensedUsers",
- ID: "id",
- type: policyType === "URLName" ? "URLName" : policyType,
- ...(platformType && { platformType: "!deviceAppManagement" }),
+ AssignTo: 'allLicensedUsers',
+ ID: 'id',
+ type: policyType === 'URLName' ? 'URLName' : policyType,
+ ...(platformType && { platformType: '!deviceAppManagement' }),
},
multiPost: false,
fields: getAssignmentFields(),
- customDataformatter: getCustomDataFormatter("allLicensedUsers"),
+ customDataformatter: getCustomDataFormatter('allLicensedUsers'),
confirmText: 'Are you sure you want to assign "[displayName]" to all users?',
icon: ,
- color: "info",
- });
+ color: 'info',
+ })
// Assign to All Devices
actions.push({
- label: "Assign to All Devices",
- type: "POST",
- url: "/api/ExecAssignPolicy",
+ label: 'Assign to All Devices',
+ type: 'POST',
+ url: '/api/ExecAssignPolicy',
data: {
- AssignTo: "AllDevices",
- ID: "id",
- type: policyType === "URLName" ? "URLName" : policyType,
- ...(platformType && { platformType: "!deviceAppManagement" }),
+ AssignTo: 'AllDevices',
+ ID: 'id',
+ type: policyType === 'URLName' ? 'URLName' : policyType,
+ ...(platformType && { platformType: '!deviceAppManagement' }),
},
multiPost: false,
fields: getAssignmentFields(),
- customDataformatter: getCustomDataFormatter("AllDevices"),
+ customDataformatter: getCustomDataFormatter('AllDevices'),
confirmText: 'Are you sure you want to assign "[displayName]" to all devices?',
icon: ,
- color: "info",
- });
+ color: 'info',
+ })
// Assign Globally (All Users / All Devices)
actions.push({
- label: "Assign Globally (All Users / All Devices)",
- type: "POST",
- url: "/api/ExecAssignPolicy",
+ label: 'Assign Globally (All Users / All Devices)',
+ type: 'POST',
+ url: '/api/ExecAssignPolicy',
data: {
- AssignTo: "AllDevicesAndUsers",
- ID: "id",
- type: policyType === "URLName" ? "URLName" : policyType,
- ...(platformType && { platformType: "!deviceAppManagement" }),
+ AssignTo: 'AllDevicesAndUsers',
+ ID: 'id',
+ type: policyType === 'URLName' ? 'URLName' : policyType,
+ ...(platformType && { platformType: '!deviceAppManagement' }),
},
multiPost: false,
fields: getAssignmentFields(),
- customDataformatter: getCustomDataFormatter("AllDevicesAndUsers"),
+ customDataformatter: getCustomDataFormatter('AllDevicesAndUsers'),
confirmText: 'Are you sure you want to assign "[displayName]" to all users and devices?',
icon: ,
- color: "info",
- });
+ color: 'info',
+ })
// Assign to Custom Group
actions.push({
- label: "Assign to Custom Group",
- type: "POST",
- url: "/api/ExecAssignPolicy",
+ label: 'Assign to Custom Group',
+ type: 'POST',
+ url: '/api/ExecAssignPolicy',
icon: ,
- color: "info",
+ color: 'info',
confirmText: 'Select the target groups for "[displayName]".',
multiPost: false,
fields: [
{
- type: "autoComplete",
- name: "groupTargets",
- label: "Group(s)",
+ type: 'autoComplete',
+ name: 'groupTargets',
+ label: 'Group(s)',
multiple: true,
creatable: false,
allowResubmit: true,
- validators: { required: "Please select at least one group" },
+ validators: { required: 'Please select at least one group' },
api: {
- url: "/api/ListGraphRequest",
- dataKey: "Results",
+ url: '/api/ListGraphRequest',
+ dataKey: 'Results',
queryKey: `ListPolicyAssignmentGroups-${tenant}`,
labelField: (group) =>
group.id ? `${group.displayName} (${group.id})` : group.displayName,
- valueField: "id",
+ valueField: 'id',
addedField: {
- description: "description",
+ description: 'description',
},
data: {
- Endpoint: "groups",
+ Endpoint: 'groups',
manualPagination: true,
- $select: "id,displayName,description",
- $orderby: "displayName",
+ $select: 'id,displayName,description',
+ $orderby: 'displayName',
$top: 999,
$count: true,
},
@@ -223,23 +223,23 @@ export const useCippIntunePolicyActions = (tenant, policyType, options = {}) =>
...getAssignmentFields(),
],
customDataformatter: getCustomDataFormatterForGroups(),
- });
+ })
// Delete action
if (includeDelete) {
actions.push({
- label: "Delete Policy",
- type: "POST",
- url: "/api/RemovePolicy",
+ label: 'Delete Policy',
+ type: 'POST',
+ url: '/api/RemovePolicy',
data: {
- ID: "id",
- URLName: deleteUrlName === "URLName" ? "URLName" : deleteUrlName,
+ ID: 'id',
+ URLName: deleteUrlName === 'URLName' ? 'URLName' : deleteUrlName,
},
- confirmText: "Are you sure you want to delete this policy?",
+ confirmText: 'Are you sure you want to delete this policy?',
icon: ,
- color: "danger",
- });
+ color: 'danger',
+ })
}
- return actions;
-};
+ return actions
+}
diff --git a/src/components/CippWizard/CippIntunePolicy.jsx b/src/components/CippWizard/CippIntunePolicy.jsx
index 38387be56a79..10d46a1b7e83 100644
--- a/src/components/CippWizard/CippIntunePolicy.jsx
+++ b/src/components/CippWizard/CippIntunePolicy.jsx
@@ -1,63 +1,63 @@
-import { Stack } from "@mui/material";
-import { Grid } from "@mui/system";
-import { CippWizardStepButtons } from "./CippWizardStepButtons";
-import CippJsonView from "../CippFormPages/CippJSONView";
-import CippFormComponent from "../CippComponents/CippFormComponent";
-import { ApiGetCall } from "../../api/ApiCall";
-import { useEffect, useState } from "react";
-import { useWatch } from "react-hook-form";
-import { CippFormCondition } from "../CippComponents/CippFormCondition";
-import { useSettings } from "../../hooks/use-settings";
+import { Stack } from '@mui/material'
+import { Grid } from '@mui/system'
+import { CippWizardStepButtons } from './CippWizardStepButtons'
+import CippJsonView from '../CippFormPages/CippJSONView'
+import CippFormComponent from '../CippComponents/CippFormComponent'
+import { ApiGetCall } from '../../api/ApiCall'
+import { useEffect, useState } from 'react'
+import { useWatch } from 'react-hook-form'
+import { CippFormCondition } from '../CippComponents/CippFormCondition'
+import { useSettings } from '../../hooks/use-settings'
const assignmentFilterTypeOptions = [
- { label: "Include - Apply policy to devices matching filter", value: "include" },
- { label: "Exclude - Apply policy to devices NOT matching filter", value: "exclude" },
-];
+ { label: 'Include - Apply policy to devices matching filter', value: 'include' },
+ { label: 'Exclude - Apply policy to devices NOT matching filter', value: 'exclude' },
+]
export const CippIntunePolicy = (props) => {
- const { formControl, onPreviousStep, onNextStep, currentStep } = props;
- const values = formControl.getValues();
- const tenantFilter = useSettings()?.currentTenant;
- const CATemplates = ApiGetCall({ url: "/api/ListIntuneTemplates", queryKey: "IntuneTemplates" });
- const [JSONData, setJSONData] = useState();
- const watcher = useWatch({ control: formControl.control, name: "TemplateList" });
- const jsonWatch = useWatch({ control: formControl.control, name: "RAWJson" });
- const selectedTenants = useWatch({ control: formControl.control, name: "tenantFilter" });
+ const { formControl, onPreviousStep, onNextStep, currentStep } = props
+ const values = formControl.getValues()
+ const tenantFilter = useSettings()?.currentTenant
+ const CATemplates = ApiGetCall({ url: '/api/ListIntuneTemplates', queryKey: 'IntuneTemplates' })
+ const [JSONData, setJSONData] = useState()
+ const watcher = useWatch({ control: formControl.control, name: 'TemplateList' })
+ const jsonWatch = useWatch({ control: formControl.control, name: 'RAWJson' })
+ const selectedTenants = useWatch({ control: formControl.control, name: 'tenantFilter' })
// do not provide inputs for reserved placeholders
const reservedPlaceholders = [
- "%serial%",
- "%systemroot%",
- "%systemdrive%",
- "%temp%",
- "%tenantid%",
- "%tenantfilter%",
- "%initialdomain%",
- "%tenantname%",
- "%partnertenantid%",
- "%samappid%",
- "%userprofile%",
- "%username%",
- "%userdomain%",
- "%windir%",
- "%programfiles%",
- "%programfiles(x86)%",
- "%programdata%",
- ];
+ '%serial%',
+ '%systemroot%',
+ '%systemdrive%',
+ '%temp%',
+ '%tenantid%',
+ '%tenantfilter%',
+ '%initialdomain%',
+ '%tenantname%',
+ '%partnertenantid%',
+ '%samappid%',
+ '%userprofile%',
+ '%username%',
+ '%userdomain%',
+ '%windir%',
+ '%programfiles%',
+ '%programfiles(x86)%',
+ '%programdata%',
+ ]
useEffect(() => {
if (CATemplates.isSuccess && watcher?.value) {
- const template = CATemplates.data.find((template) => template.GUID === watcher.value);
+ const template = CATemplates.data.find((template) => template.GUID === watcher.value)
if (template) {
- const jsonTemplate = template.RAWJson ? JSON.parse(template.RAWJson) : null;
- setJSONData(jsonTemplate);
- formControl.setValue("RAWJson", template.RAWJson);
- formControl.setValue("displayName", template.Displayname);
- formControl.setValue("description", template.Description);
- formControl.setValue("TemplateType", template.Type);
+ const jsonTemplate = template.RAWJson ? JSON.parse(template.RAWJson) : null
+ setJSONData(jsonTemplate)
+ formControl.setValue('RAWJson', template.RAWJson)
+ formControl.setValue('displayName', template.Displayname)
+ formControl.setValue('description', template.Description)
+ formControl.setValue('TemplateType', template.Type)
}
}
- }, [watcher]);
+ }, [watcher])
return (
@@ -93,11 +93,11 @@ export const CippIntunePolicy = (props) => {
type="radio"
name="AssignTo"
options={[
- { label: "Do not assign", value: "On" },
- { label: "Assign to all users", value: "allLicensedUsers" },
- { label: "Assign to all devices", value: "AllDevices" },
- { label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
- { label: "Assign to Custom Group", value: "customGroup" },
+ { label: 'Do not assign', value: 'On' },
+ { label: 'Assign to all users', value: 'allLicensedUsers' },
+ { label: 'Assign to all devices', value: 'AllDevices' },
+ { label: 'Assign to all users and devices', value: 'AllDevicesAndUsers' },
+ { label: 'Assign to Custom Group', value: 'customGroup' },
]}
formControl={formControl}
/>
@@ -114,7 +114,7 @@ export const CippIntunePolicy = (props) => {
label="Custom Group Names separated by comma. Wildcards (*) are allowed"
name="customGroup"
formControl={formControl}
- validators={{ required: "Please specify custom group names" }}
+ validators={{ required: 'Please specify custom group names' }}
/>
@@ -137,7 +137,7 @@ export const CippIntunePolicy = (props) => {
formControl={formControl}
field="AssignTo"
compareType="isOneOf"
- compareValue={["allLicensedUsers", "AllDevices", "AllDevicesAndUsers", "customGroup"]}
+ compareValue={['allLicensedUsers', 'AllDevices', 'AllDevicesAndUsers', 'customGroup']}
>
{
creatable={false}
formControl={formControl}
api={{
- url: "/api/ListAssignmentFilters",
+ url: '/api/ListAssignmentFilters',
queryKey: `ListAssignmentFilters-${tenantFilter}`,
labelField: (filter) => filter.displayName,
- valueField: "displayName",
+ valueField: 'displayName',
}}
/>
@@ -174,15 +174,15 @@ export const CippIntunePolicy = (props) => {
compareValue={/%(\w+)%/}
>
{(() => {
- const rawJson = jsonWatch ? jsonWatch : "";
- const placeholderMatches = [...rawJson.matchAll(/%(\w+)%/g)].map((m) => m[1]);
- const uniquePlaceholders = Array.from(new Set(placeholderMatches));
+ const rawJson = jsonWatch ? jsonWatch : ''
+ const placeholderMatches = [...rawJson.matchAll(/%(\w+)%/g)].map((m) => m[1])
+ const uniquePlaceholders = Array.from(new Set(placeholderMatches))
// Filter out reserved placeholders
const filteredPlaceholders = uniquePlaceholders.filter(
(placeholder) => !reservedPlaceholders.includes(`%${placeholder.toLowerCase()}%`)
- );
+ )
if (filteredPlaceholders.length === 0 || selectedTenants.length === 0) {
- return null;
+ return null
}
return filteredPlaceholders.map((placeholder) => (
@@ -192,11 +192,11 @@ export const CippIntunePolicy = (props) => {
type="textField"
defaultValue={
//if the placeholder is tenantid then replace it with tenant.addedFields.customerId, if the placeholder is tenantdomain then replace it with tenant.addedFields.defaultDomainName.
- placeholder === "tenantid"
+ placeholder === 'tenantid'
? tenant?.addedFields?.customerId
- : placeholder === "tenantdomain"
- ? tenant?.addedFields?.defaultDomainName
- : ""
+ : placeholder === 'tenantdomain'
+ ? tenant?.addedFields?.defaultDomainName
+ : ''
}
name={`replacemap.${tenant.value}.%${placeholder}%`}
label={`Value for '${placeholder}' in Tenant '${tenant.addedFields.defaultDomainName}'`}
@@ -205,7 +205,7 @@ export const CippIntunePolicy = (props) => {
/>
))}
- ));
+ ))
})()}
@@ -213,10 +213,10 @@ export const CippIntunePolicy = (props) => {
currentStep={currentStep}
onPreviousStep={onPreviousStep}
onNextStep={onNextStep}
- noNextButton={values.selectedOption === "UpdateTokens"}
+ noNextButton={values.selectedOption === 'UpdateTokens'}
formControl={formControl}
noSubmitButton={true}
/>
- );
-};
+ )
+}
diff --git a/src/pages/endpoint/applications/templates/index.js b/src/pages/endpoint/applications/templates/index.js
index afda39f5288d..b4a2a2bd1e28 100644
--- a/src/pages/endpoint/applications/templates/index.js
+++ b/src/pages/endpoint/applications/templates/index.js
@@ -1,127 +1,127 @@
-import { useState } from "react";
-import { Layout as DashboardLayout } from "../../../../layouts/index.js";
-import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { TrashIcon } from "@heroicons/react/24/outline";
-import { Edit, RocketLaunch } from "@mui/icons-material";
-import { CippAppTemplateDrawer } from "../../../../components/CippComponents/CippAppTemplateDrawer";
-import CippJsonView from "../../../../components/CippFormPages/CippJSONView";
-import { Box } from "@mui/material";
-import { ApiGetCall } from "../../../../api/ApiCall";
-import { GitHub } from "@mui/icons-material";
+import { useState } from 'react'
+import { Layout as DashboardLayout } from '../../../../layouts/index.js'
+import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { TrashIcon } from '@heroicons/react/24/outline'
+import { Edit, RocketLaunch } from '@mui/icons-material'
+import { CippAppTemplateDrawer } from '../../../../components/CippComponents/CippAppTemplateDrawer'
+import CippJsonView from '../../../../components/CippFormPages/CippJSONView'
+import { Box } from '@mui/material'
+import { ApiGetCall } from '../../../../api/ApiCall'
+import { GitHub } from '@mui/icons-material'
const Page = () => {
- const pageTitle = "Application Templates";
- const [editDrawerOpen, setEditDrawerOpen] = useState(false);
- const [editTemplate, setEditTemplate] = useState(null);
+ const pageTitle = 'Application Templates'
+ const [editDrawerOpen, setEditDrawerOpen] = useState(false)
+ const [editTemplate, setEditTemplate] = useState(null)
const integrations = ApiGetCall({
- url: "/api/ListExtensionsConfig",
- queryKey: "Integrations",
+ url: '/api/ListExtensionsConfig',
+ queryKey: 'Integrations',
refetchOnMount: false,
refetchOnReconnect: false,
- });
+ })
const actions = [
{
- label: "Edit Template",
+ label: 'Edit Template',
icon: ,
- color: "info",
+ color: 'info',
noConfirm: true,
customFunction: (row) => {
- setEditTemplate({ ...row });
- setEditDrawerOpen(true);
+ setEditTemplate({ ...row })
+ setEditDrawerOpen(true)
},
},
{
- label: "Save to GitHub",
- type: "POST",
- url: "/api/ExecCommunityRepo",
+ label: 'Save to GitHub',
+ type: 'POST',
+ url: '/api/ExecCommunityRepo',
icon: ,
data: {
- Action: "UploadTemplate",
- GUID: "GUID",
+ Action: 'UploadTemplate',
+ GUID: 'GUID',
},
fields: [
{
- label: "Repository",
- name: "FullName",
- type: "select",
+ label: 'Repository',
+ name: 'FullName',
+ type: 'select',
api: {
- url: "/api/ListCommunityRepos",
+ url: '/api/ListCommunityRepos',
data: {
WriteAccess: true,
},
- queryKey: "CommunityRepos-Write",
- dataKey: "Results",
- valueField: "FullName",
- labelField: "FullName",
+ queryKey: 'CommunityRepos-Write',
+ dataKey: 'Results',
+ valueField: 'FullName',
+ labelField: 'FullName',
},
multiple: false,
creatable: false,
required: true,
validators: {
- required: { value: true, message: "This field is required" },
+ required: { value: true, message: 'This field is required' },
},
},
{
- label: "Commit Message",
- placeholder: "Enter a commit message for adding this file to GitHub",
- name: "Message",
- type: "textField",
+ label: 'Commit Message',
+ placeholder: 'Enter a commit message for adding this file to GitHub',
+ name: 'Message',
+ type: 'textField',
multiline: true,
required: true,
rows: 4,
},
],
- confirmText: "Are you sure you want to save this template to the selected repository?",
+ confirmText: 'Are you sure you want to save this template to the selected repository?',
condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
},
{
- label: "Deploy Template",
- type: "POST",
- url: "/api/ExecDeployAppTemplate",
+ label: 'Deploy Template',
+ type: 'POST',
+ url: '/api/ExecDeployAppTemplate',
icon: ,
- color: "info",
+ color: 'info',
fields: [
{
- type: "autoComplete",
- name: "selectedTenants",
- label: "Select Tenants",
+ type: 'autoComplete',
+ name: 'selectedTenants',
+ label: 'Select Tenants',
multiple: true,
creatable: false,
api: {
- url: "/api/ListTenants?AllTenantSelector=true",
- queryKey: "ListTenants-AppTemplateDeploy",
+ url: '/api/ListTenants?AllTenantSelector=true',
+ queryKey: 'ListTenants-AppTemplateDeploy',
labelField: (tenant) => `${tenant.displayName} (${tenant.defaultDomainName})`,
- valueField: "defaultDomainName",
+ valueField: 'defaultDomainName',
addedField: {
- customerId: "customerId",
- defaultDomainName: "defaultDomainName",
+ customerId: 'customerId',
+ defaultDomainName: 'defaultDomainName',
},
},
- validators: { required: "Please select at least one tenant" },
+ validators: { required: 'Please select at least one tenant' },
},
{
- type: "radio",
- name: "AssignTo",
- label: "Override Assignment (optional)",
+ type: 'radio',
+ name: 'AssignTo',
+ label: 'Override Assignment (optional)',
options: [
- { label: "Keep template assignment", value: "" },
- { label: "Do not assign", value: "On" },
- { label: "Assign to all users", value: "allLicensedUsers" },
- { label: "Assign to all devices", value: "AllDevices" },
- { label: "Assign to all users and devices", value: "AllDevicesAndUsers" },
- { label: "Assign to Custom Group", value: "customGroup" },
+ { label: 'Keep template assignment', value: '' },
+ { label: 'Do not assign', value: 'On' },
+ { label: 'Assign to all users', value: 'allLicensedUsers' },
+ { label: 'Assign to all devices', value: 'AllDevices' },
+ { label: 'Assign to all users and devices', value: 'AllDevicesAndUsers' },
+ { label: 'Assign to Custom Group', value: 'customGroup' },
],
},
{
- type: "textField",
- name: "customGroup",
- label: "Custom Group Names (comma separated, wildcards allowed)",
+ type: 'textField',
+ name: 'customGroup',
+ label: 'Custom Group Names (comma separated, wildcards allowed)',
},
{
- type: "textField",
- name: "excludeGroup",
- label: "Exclude Group Names (comma separated, wildcards allowed)",
+ type: 'textField',
+ name: 'excludeGroup',
+ label: 'Exclude Group Names (comma separated, wildcards allowed)',
},
],
customDataformatter: (row, action, formData) => ({
@@ -130,27 +130,27 @@ const Page = () => {
defaultDomainName: t.value,
customerId: t.addedFields?.customerId,
})),
- AssignTo: formData?.AssignTo || "",
- customGroup: formData?.customGroup || "",
- excludeGroup: formData?.excludeGroup || "",
+ AssignTo: formData?.AssignTo || '',
+ customGroup: formData?.customGroup || '',
+ excludeGroup: formData?.excludeGroup || '',
}),
confirmText: 'Deploy "[displayName]" ([appCount] apps) to the selected tenants?',
},
{
- label: "Delete Template",
- type: "POST",
- url: "/api/RemoveAppTemplate",
- data: { ID: "GUID" },
+ label: 'Delete Template',
+ type: 'POST',
+ url: '/api/RemoveAppTemplate',
+ data: { ID: 'GUID' },
confirmText: 'Delete the template "[displayName]"?',
icon: ,
- color: "danger",
+ color: 'danger',
},
- ];
+ ]
const offCanvas = {
children: (row) => ,
- size: "lg",
- };
+ size: 'lg',
+ }
return (
<>
@@ -160,10 +160,10 @@ const Page = () => {
apiUrl="/api/ListAppTemplates"
actions={actions}
offCanvas={offCanvas}
- simpleColumns={["displayName", "description", "appCount", "appTypes", "appNames"]}
+ simpleColumns={['displayName', 'description', 'appCount', 'appTypes', 'appNames']}
queryKey="ListAppTemplates"
cardButton={
-
+
}
@@ -172,13 +172,13 @@ const Page = () => {
editData={editTemplate}
open={editDrawerOpen}
onClose={() => {
- setEditDrawerOpen(false);
- setEditTemplate(null);
+ setEditDrawerOpen(false)
+ setEditTemplate(null)
}}
/>
>
- );
-};
+ )
+}
-Page.getLayout = (page) => {page};
-export default Page;
+Page.getLayout = (page) => {page}
+export default Page
From 1b77b7843ee3c86e746019d8ce0ecd2ded3ed6cf Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Tue, 12 May 2026 02:28:27 +0800
Subject: [PATCH 148/181] Update manifest for PWA chrome install option
---
public/manifest.json | 17 ++++++++++++++---
public/sw.js | 8 ++++++++
src/pages/_app.js | 5 +++++
src/pages/_document.js | 6 ++++++
4 files changed, 33 insertions(+), 3 deletions(-)
create mode 100644 public/sw.js
diff --git a/public/manifest.json b/public/manifest.json
index 2cc60cd8b5a7..f30bb85dcc29 100644
--- a/public/manifest.json
+++ b/public/manifest.json
@@ -1,14 +1,25 @@
{
- "short_name": "Carpatin",
- "name": "Carpatin",
+ "short_name": "CIPP",
+ "name": "CIPP - CyberDrian Improved Partner Portal",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
+ },
+ {
+ "src": "android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
}
],
- "start_url": ".",
+ "start_url": "/",
+ "scope": "/",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
diff --git a/public/sw.js b/public/sw.js
new file mode 100644
index 000000000000..a5b7af04ecf4
--- /dev/null
+++ b/public/sw.js
@@ -0,0 +1,8 @@
+// Minimal service worker to satisfy Chrome's installability criteria.
+// This does NOT cache anything or provide offline support — it simply
+// passes all requests through to the network so Chrome treats the site
+// as an installable web app.
+
+self.addEventListener('install', () => self.skipWaiting())
+self.addEventListener('activate', (event) => event.waitUntil(self.clients.claim()))
+self.addEventListener('fetch', () => {})
diff --git a/src/pages/_app.js b/src/pages/_app.js
index f924bd5f626e..aa387f0417fa 100644
--- a/src/pages/_app.js
+++ b/src/pages/_app.js
@@ -80,6 +80,11 @@ const App = (props) => {
useEffect(() => {
if (typeof window === 'undefined') return
+ // Register minimal service worker for Chrome installability
+ if ('serviceWorker' in navigator) {
+ navigator.serviceWorker.register('/sw.js').catch(() => {})
+ }
+
const language = navigator.language || navigator.userLanguage || 'en-US'
const baseLang = language.split('-')[0]
diff --git a/src/pages/_document.js b/src/pages/_document.js
index c764cde02995..4cceb2676ef2 100644
--- a/src/pages/_document.js
+++ b/src/pages/_document.js
@@ -8,6 +8,12 @@ class CustomDocument extends Document {
return (
+
+
+
+
+
+
Date: Tue, 12 May 2026 02:28:43 +0800
Subject: [PATCH 149/181] Update manifest.json
---
public/manifest.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/public/manifest.json b/public/manifest.json
index f30bb85dcc29..42f5d73ea6af 100644
--- a/public/manifest.json
+++ b/public/manifest.json
@@ -21,6 +21,6 @@
"start_url": "/",
"scope": "/",
"display": "standalone",
- "theme_color": "#000000",
+ "theme_color": "#ffffff",
"background_color": "#ffffff"
-}
\ No newline at end of file
+}
From 20e2f554df668843e44dc2e88671bb605aab7067 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Mon, 11 May 2026 20:43:01 +0200
Subject: [PATCH 150/181] implements #5986
---
...CippTenantAllowBlockListTemplateDrawer.jsx | 62 ++++++++++++++-----
.../index.js | 49 +++++++++++----
2 files changed, 83 insertions(+), 28 deletions(-)
diff --git a/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx b/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
index cc0ecf78b506..aca5955c3732 100644
--- a/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
+++ b/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
@@ -23,13 +23,35 @@ export const CippTenantAllowBlockListTemplateDrawer = ({
buttonText = 'Add Template',
requiredPermissions = [],
PermissionButton = Button,
+ editData = null,
+ drawerVisible: controlledDrawerVisible,
+ setDrawerVisible: controlledSetDrawerVisible,
}) => {
- const [drawerVisible, setDrawerVisible] = useState(false)
+ const [internalDrawerVisible, internalSetDrawerVisible] = useState(false)
+ const drawerVisible = controlledDrawerVisible !== undefined ? controlledDrawerVisible : internalDrawerVisible
+ const setDrawerVisible = controlledSetDrawerVisible !== undefined ? controlledSetDrawerVisible : internalSetDrawerVisible
+
+ const isEditMode = !!editData
+
const formControl = useForm({
mode: 'onChange',
defaultValues,
})
+ useEffect(() => {
+ if (editData && drawerVisible) {
+ formControl.reset({
+ templateName: editData.templateName || '',
+ entries: Array.isArray(editData.entries) ? editData.entries.join(', ') : editData.entries || '',
+ notes: editData.notes || '',
+ listType: editData.listType ? { label: editData.listType, value: editData.listType } : null,
+ listMethod: editData.listMethod ? { label: editData.listMethod, value: editData.listMethod } : null,
+ NoExpiration: editData.NoExpiration || false,
+ RemoveAfter: editData.RemoveAfter || false,
+ })
+ }
+ }, [editData, drawerVisible, formControl])
+
const { isValid } = useFormState({ control: formControl.control })
const noExpiration = useWatch({ control: formControl.control, name: 'NoExpiration' })
@@ -197,10 +219,18 @@ export const CippTenantAllowBlockListTemplateDrawer = ({
RemoveAfter: values.RemoveAfter,
}
- saveTemplate.mutate({
- url: '/api/AddTenantAllowBlockListTemplate',
- data: payload,
- })
+ if (isEditMode && editData?.GUID) {
+ payload.GUID = editData.GUID
+ saveTemplate.mutate({
+ url: '/api/EditTenantAllowBlockListTemplate',
+ data: payload,
+ })
+ } else {
+ saveTemplate.mutate({
+ url: '/api/AddTenantAllowBlockListTemplate',
+ data: payload,
+ })
+ }
})
const handleCloseDrawer = () => {
@@ -210,16 +240,18 @@ export const CippTenantAllowBlockListTemplateDrawer = ({
return (
<>
- setDrawerVisible(true)}
- startIcon={}
- >
- {buttonText}
-
+ {!isEditMode && (
+ setDrawerVisible(true)}
+ startIcon={}
+ >
+ {buttonText}
+
+ )}
Close
diff --git a/src/pages/email/administration/tenant-allow-block-list-templates/index.js b/src/pages/email/administration/tenant-allow-block-list-templates/index.js
index 85de23ce2ec4..bacb8528338f 100644
--- a/src/pages/email/administration/tenant-allow-block-list-templates/index.js
+++ b/src/pages/email/administration/tenant-allow-block-list-templates/index.js
@@ -1,13 +1,26 @@
+import { useState } from 'react'
import { Layout as DashboardLayout } from '../../../../layouts/index.js'
import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
-import { Delete } from '@mui/icons-material'
+import { Delete, Edit } from '@mui/icons-material'
import CippJsonView from '../../../../components/CippFormPages/CippJSONView'
import { CippTenantAllowBlockListTemplateDrawer } from '../../../../components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx'
const Page = () => {
const pageTitle = 'Tenant Allow/Block List Templates'
+ const [editDrawerVisible, setEditDrawerVisible] = useState(false)
+ const [editData, setEditData] = useState(null)
const actions = [
+ {
+ label: 'Edit Template',
+ noConfirm: true,
+ customFunction: (row) => {
+ setEditData(row)
+ setEditDrawerVisible(true)
+ },
+ icon: ,
+ color: 'primary',
+ },
{
label: 'Delete Template',
type: 'POST',
@@ -36,18 +49,28 @@ const Page = () => {
]
return (
-
- }
- />
+ <>
+
+ }
+ />
+ {
+ setEditDrawerVisible(visible)
+ if (!visible) setEditData(null)
+ }}
+ />
+ >
)
}
From bc412396b99046eb487a838aaf213007f1db568e Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Mon, 11 May 2026 20:43:06 +0200
Subject: [PATCH 151/181] implements #5986
---
...CippTenantAllowBlockListTemplateDrawer.jsx | 28 ++++++++++++++-----
.../index.js | 4 +--
2 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx b/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
index aca5955c3732..1af45677ce0c 100644
--- a/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
+++ b/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
@@ -28,8 +28,10 @@ export const CippTenantAllowBlockListTemplateDrawer = ({
setDrawerVisible: controlledSetDrawerVisible,
}) => {
const [internalDrawerVisible, internalSetDrawerVisible] = useState(false)
- const drawerVisible = controlledDrawerVisible !== undefined ? controlledDrawerVisible : internalDrawerVisible
- const setDrawerVisible = controlledSetDrawerVisible !== undefined ? controlledSetDrawerVisible : internalSetDrawerVisible
+ const drawerVisible =
+ controlledDrawerVisible !== undefined ? controlledDrawerVisible : internalDrawerVisible
+ const setDrawerVisible =
+ controlledSetDrawerVisible !== undefined ? controlledSetDrawerVisible : internalSetDrawerVisible
const isEditMode = !!editData
@@ -42,10 +44,14 @@ export const CippTenantAllowBlockListTemplateDrawer = ({
if (editData && drawerVisible) {
formControl.reset({
templateName: editData.templateName || '',
- entries: Array.isArray(editData.entries) ? editData.entries.join(', ') : editData.entries || '',
+ entries: Array.isArray(editData.entries)
+ ? editData.entries.join(', ')
+ : editData.entries || '',
notes: editData.notes || '',
listType: editData.listType ? { label: editData.listType, value: editData.listType } : null,
- listMethod: editData.listMethod ? { label: editData.listMethod, value: editData.listMethod } : null,
+ listMethod: editData.listMethod
+ ? { label: editData.listMethod, value: editData.listMethod }
+ : null,
NoExpiration: editData.NoExpiration || false,
RemoveAfter: editData.RemoveAfter || false,
})
@@ -251,7 +257,11 @@ export const CippTenantAllowBlockListTemplateDrawer = ({
)}
Close
diff --git a/src/pages/email/administration/tenant-allow-block-list-templates/index.js b/src/pages/email/administration/tenant-allow-block-list-templates/index.js
index bacb8528338f..4e945b486c4d 100644
--- a/src/pages/email/administration/tenant-allow-block-list-templates/index.js
+++ b/src/pages/email/administration/tenant-allow-block-list-templates/index.js
@@ -58,9 +58,7 @@ const Page = () => {
actions={actions}
offCanvas={offCanvas}
simpleColumns={simpleColumns}
- cardButton={
-
- }
+ cardButton={}
/>
Date: Mon, 11 May 2026 20:47:36 +0200
Subject: [PATCH 152/181] fixed weird button
---
.../CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx b/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
index 1af45677ce0c..0e28dce6d188 100644
--- a/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
+++ b/src/components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx
@@ -246,7 +246,7 @@ export const CippTenantAllowBlockListTemplateDrawer = ({
return (
<>
- {!isEditMode && (
+ {!isEditMode && controlledDrawerVisible === undefined && (
setDrawerVisible(true)}
From a4915dff719e75be54e3b786b27028b54aadc26d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 May 2026 20:01:47 +0000
Subject: [PATCH 153/181] chore(deps): bump
@tanstack/react-query-persist-client
Bumps [@tanstack/react-query-persist-client](https://github.com/TanStack/query/tree/HEAD/packages/react-query-persist-client) from 5.90.27 to 5.96.2.
- [Release notes](https://github.com/TanStack/query/releases)
- [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query-persist-client/CHANGELOG.md)
- [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query-persist-client@5.96.2/packages/react-query-persist-client)
---
updated-dependencies:
- dependency-name: "@tanstack/react-query-persist-client"
dependency-version: 5.96.2
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
package.json | 2 +-
yarn.lock | 17 ++++++++++++-----
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 76b7d2a5f018..f8e54c1a224d 100644
--- a/package.json
+++ b/package.json
@@ -44,7 +44,7 @@
"@tanstack/query-sync-storage-persister": "^5.90.25",
"@tanstack/react-query": "^5.96.2",
"@tanstack/react-query-devtools": "^5.96.2",
- "@tanstack/react-query-persist-client": "^5.76.0",
+ "@tanstack/react-query-persist-client": "^5.96.2",
"@tanstack/react-table": "^8.19.2",
"@tiptap/core": "^3.4.1",
"@tiptap/extension-heading": "^3.4.1",
diff --git a/yarn.lock b/yarn.lock
index 46071d23d1bb..847ef311f58e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2119,6 +2119,13 @@
dependencies:
"@tanstack/query-core" "5.91.2"
+"@tanstack/query-persist-client-core@5.96.2":
+ version "5.96.2"
+ resolved "https://registry.yarnpkg.com/@tanstack/query-persist-client-core/-/query-persist-client-core-5.96.2.tgz#65ea5a2104a85a2f39ef1a007f6f0ad63fbf1c49"
+ integrity sha512-BYsP8folbvxzZsNnWJxSenEAdepGNfv809150U78D84yt/THi33EwfUCcdKWFbma5XKwlaFQGWMJKeWnVJ6GVA==
+ dependencies:
+ "@tanstack/query-core" "5.96.2"
+
"@tanstack/query-sync-storage-persister@^5.90.25":
version "5.90.27"
resolved "https://registry.yarnpkg.com/@tanstack/query-sync-storage-persister/-/query-sync-storage-persister-5.90.27.tgz#249c055565e31e0587c2b1900b0d7e0012982dd3"
@@ -2134,12 +2141,12 @@
dependencies:
"@tanstack/query-devtools" "5.96.2"
-"@tanstack/react-query-persist-client@^5.76.0":
- version "5.90.27"
- resolved "https://registry.yarnpkg.com/@tanstack/react-query-persist-client/-/react-query-persist-client-5.90.27.tgz#6bf177ea728eec30df50d87f4151dfac8aeaf4f0"
- integrity sha512-rKiCZ2C0kzmyDoLfrPHz2UdEDKHo/oXkKVRbhgtHya/bWH6jWDFX5cSFc1SLB33FDrgR8uOG1MwVohBrI4+F8A==
+"@tanstack/react-query-persist-client@^5.96.2":
+ version "5.96.2"
+ resolved "https://registry.yarnpkg.com/@tanstack/react-query-persist-client/-/react-query-persist-client-5.96.2.tgz#b47d62fc990a9fd38ddcf4a080d1300ae887e5a0"
+ integrity sha512-smQ38oVPlnvkG+G7R60IAD9X6azJLRjHEd7twml9XBLYM31ncPDP0tUKy/Gv/4ItVmKTtjZ5VabXpVZxnaWSww==
dependencies:
- "@tanstack/query-persist-client-core" "5.92.4"
+ "@tanstack/query-persist-client-core" "5.96.2"
"@tanstack/react-query@^5.96.2":
version "5.96.2"
From fe4bd7f9cdf6ff5188c8df9078d9b9a8d38ea979 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 11 May 2026 17:41:08 -0400
Subject: [PATCH 154/181] fix: allow alltenants sync on onedrive/sharepoint
---
src/pages/teams-share/onedrive/index.js | 1 +
src/pages/teams-share/sharepoint/index.js | 1 +
2 files changed, 2 insertions(+)
diff --git a/src/pages/teams-share/onedrive/index.js b/src/pages/teams-share/onedrive/index.js
index 56ffe4232699..7c06e88f1441 100644
--- a/src/pages/teams-share/onedrive/index.js
+++ b/src/pages/teams-share/onedrive/index.js
@@ -13,6 +13,7 @@ const Page = () => {
syncData: { Types: 'OneDriveUsageAccount' },
allowToggle: true,
defaultCached: false,
+ allowAllTenantSync: true,
})
const actions = [
diff --git a/src/pages/teams-share/sharepoint/index.js b/src/pages/teams-share/sharepoint/index.js
index 926f4647950d..cf1353f52b7f 100644
--- a/src/pages/teams-share/sharepoint/index.js
+++ b/src/pages/teams-share/sharepoint/index.js
@@ -27,6 +27,7 @@ const Page = () => {
syncData: { Types: 'SharePointSiteUsage' },
allowToggle: true,
defaultCached: true,
+ allowAllTenantSync: true,
})
const actions = [
From d7e8b0b569c3f9243ff7e09a326ed74ccbd3a046 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 11 May 2026 19:03:48 -0400
Subject: [PATCH 155/181] fix: tweak toggle button size
---
src/pages/tenant/standards/alignment/index.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/pages/tenant/standards/alignment/index.js b/src/pages/tenant/standards/alignment/index.js
index ce413aa54393..2d58b8b8af04 100644
--- a/src/pages/tenant/standards/alignment/index.js
+++ b/src/pages/tenant/standards/alignment/index.js
@@ -794,7 +794,7 @@ const Page = () => {
onChange={(event, newFilter) => {
if (newFilter !== null) setByStandardTenantFilter(newFilter)
}}
- sx={{ alignSelf: { xs: 'flex-start', sm: 'center' } }}
+ sx={{ alignSelf: { xs: 'flex-start', sm: 'center' }, '& .MuiToggleButton-root': { py: 0.25, px: 1, fontSize: '0.75rem' } }}
>
All ({tenants.length})
Compliant ({compliantTenants.length})
@@ -868,6 +868,7 @@ const Page = () => {
onChange={(event, newViewMode) => {
if (newViewMode !== null) setViewMode(newViewMode)
}}
+ sx={{ '& .MuiToggleButton-root': { py: 0.25, px: 1, fontSize: '0.75rem' } }}
>
From 15939e2b9a9a9d229b3f0e33b0fbde1467222016 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 11 May 2026 22:48:47 -0400
Subject: [PATCH 156/181] feat: improve run standard now UX provide single
action with autocomplete to select all tenants in template or individual
tenant (expanded from alltenants/groups)
---
.../CippFormTemplateTenantSelector.jsx | 146 ++++++
src/pages/tenant/manage/applied-standards.js | 6 +
src/pages/tenant/manage/drift.js | 7 +
.../tenant/manage/driftManagementActions.js | 83 ++--
src/pages/tenant/manage/policies-deployed.js | 420 +++++++++---------
src/pages/tenant/standards/templates/index.js | 199 +++++----
.../tenant/standards/templates/template.jsx | 374 ++++++++--------
7 files changed, 703 insertions(+), 532 deletions(-)
create mode 100644 src/components/CippComponents/CippFormTemplateTenantSelector.jsx
diff --git a/src/components/CippComponents/CippFormTemplateTenantSelector.jsx b/src/components/CippComponents/CippFormTemplateTenantSelector.jsx
new file mode 100644
index 000000000000..4ee436723abf
--- /dev/null
+++ b/src/components/CippComponents/CippFormTemplateTenantSelector.jsx
@@ -0,0 +1,146 @@
+import { useEffect, useState } from 'react'
+import { CippFormComponent } from './CippFormComponent'
+import { ApiGetCall } from '../../api/ApiCall'
+
+/**
+ * A tenant selector scoped to the tenants applicable to a given standards template.
+ *
+ * - If the template targets AllTenants, all tenants are offered plus an "All Tenants" option.
+ * - If the template targets tenant groups, each group's members are fetched and offered,
+ * plus the group itself as a "run for whole group" option.
+ * - Individual tenant entries are offered directly.
+ *
+ * The final value sent to the API will be the tenant's defaultDomainName, a group ID, or
+ * "allTenants".
+ */
+export const CippFormTemplateTenantSelector = ({
+ formControl,
+ templateTenants = [],
+ excludedTenants = [],
+ name = 'tenantFilter',
+ label = 'Select Tenant',
+ placeholder = 'Select a tenant, group, or All Tenants...',
+ required = true,
+ ...other
+}) => {
+ // Build a set of excluded values for fast lookup
+ const excludedValues = new Set(
+ excludedTenants.map((t) => (typeof t === 'object' ? t?.value : t)).filter(Boolean)
+ )
+ const isExcluded = (value) => excludedValues.has(value)
+ const [options, setOptions] = useState([])
+
+ // Determine what the template targets
+ const hasAllTenants = templateTenants.some(
+ (t) => t?.value === 'AllTenants' || t?.value === 'allTenants'
+ )
+ const groupIds = templateTenants.filter((t) => t?.type === 'Group').map((t) => t.value)
+ const individualTenants = templateTenants.filter(
+ (t) => t?.type !== 'Group' && t?.value !== 'AllTenants' && t?.value !== 'allTenants'
+ )
+
+ // Fetch all tenants when AllTenants is targeted
+ const allTenantList = ApiGetCall({
+ url: '/api/ListTenants?AllTenantSelector=true',
+ queryKey: 'ListTenants-TemplateTenantSelector',
+ waiting: hasAllTenants,
+ })
+
+ // Fetch each group's members (one request per group)
+ const groupRequests = groupIds.map((id) =>
+ // eslint-disable-next-line react-hooks/rules-of-hooks
+ ApiGetCall({
+ url: `/api/ListTenantGroups?groupId=${id}`,
+ queryKey: `TenantGroup-${id}`,
+ waiting: groupIds.length > 0,
+ })
+ )
+
+ useEffect(() => {
+ const built = [{ label: 'All Tenants in Template', value: 'allTenants', group: 'All Tenants' }]
+
+ if (hasAllTenants) {
+ if (allTenantList.isSuccess && Array.isArray(allTenantList.data)) {
+ allTenantList.data.forEach((tenant) => {
+ if (isExcluded(tenant.defaultDomainName)) return
+ built.push({
+ label: `${tenant.displayName} (${tenant.defaultDomainName})`,
+ value: tenant.defaultDomainName,
+ group: 'Individual Tenants',
+ })
+ })
+ }
+ }
+
+ groupRequests.forEach((req, idx) => {
+ const groupId = groupIds[idx]
+ const groupEntry = templateTenants.find((t) => t.value === groupId)
+ const groupName = groupEntry?.label ?? groupId
+
+ if (req.isSuccess) {
+ const results = Array.isArray(req.data?.Results)
+ ? req.data.Results
+ : Array.isArray(req.data)
+ ? req.data
+ : []
+ const matchedGroup = results.find((g) => g.Id === groupId) ?? results[0]
+
+ if (matchedGroup) {
+ // Individual members only — group itself is not selectable
+ const members = Array.isArray(matchedGroup.Members) ? matchedGroup.Members : []
+ members.forEach((m) => {
+ if (isExcluded(m.defaultDomainName)) return
+ built.push({
+ label: `${m.displayName ?? m.defaultDomainName} (${m.defaultDomainName})`,
+ value: m.defaultDomainName,
+ group: matchedGroup.Name ?? groupName,
+ })
+ })
+ }
+ }
+ })
+
+ // Individual tenant entries from the template
+ individualTenants.forEach((t) => {
+ if (isExcluded(t.value)) return
+ if (!built.some((b) => b.value === t.value)) {
+ built.push({
+ label: t.label ?? t.value,
+ value: t.value,
+ group: 'Individual Tenants',
+ })
+ }
+ })
+
+ setOptions(built)
+ }, [
+ hasAllTenants,
+ allTenantList.isSuccess,
+ allTenantList.data,
+ ...groupRequests.map((r) => r.isSuccess),
+ ...groupRequests.map((r) => r.data),
+ ])
+
+ const isFetching =
+ (hasAllTenants && allTenantList.isFetching) || groupRequests.some((r) => r.isFetching)
+
+ return (
+ option.group}
+ validators={
+ required ? { required: { value: true, message: 'Please select a tenant' } } : undefined
+ }
+ {...other}
+ />
+ )
+}
diff --git a/src/pages/tenant/manage/applied-standards.js b/src/pages/tenant/manage/applied-standards.js
index 58cc78f19c88..376507ec4017 100644
--- a/src/pages/tenant/manage/applied-standards.js
+++ b/src/pages/tenant/manage/applied-standards.js
@@ -1430,6 +1430,12 @@ const Page = () => {
templateDetails.refetch()
},
currentTenant,
+ templateTenants: Array.isArray(selectedTemplate?.tenantFilter)
+ ? selectedTemplate.tenantFilter
+ : [],
+ excludedTenants: Array.isArray(selectedTemplate?.excludedTenants)
+ ? selectedTemplate.excludedTenants
+ : [],
}),
]
diff --git a/src/pages/tenant/manage/drift.js b/src/pages/tenant/manage/drift.js
index 61ff73f14211..df2a3869dc38 100644
--- a/src/pages/tenant/manage/drift.js
+++ b/src/pages/tenant/manage/drift.js
@@ -1376,6 +1376,7 @@ const ManageDriftPage = () => {
)
// Actions for the ActionsMenu
+ const currentDriftTemplate = standardsApi.data?.find((t) => t.GUID === templateId)
const actions = createDriftManagementActions({
templateId,
onRefresh: () => {
@@ -1389,6 +1390,12 @@ const ManageDriftPage = () => {
setTriggerReport(true)
},
currentTenant: tenantFilter,
+ templateTenants: Array.isArray(currentDriftTemplate?.tenantFilter)
+ ? currentDriftTemplate.tenantFilter
+ : [],
+ excludedTenants: Array.isArray(currentDriftTemplate?.excludedTenants)
+ ? currentDriftTemplate.excludedTenants
+ : [],
})
// Effect to trigger the ExecutiveReportButton when needed
diff --git a/src/pages/tenant/manage/driftManagementActions.js b/src/pages/tenant/manage/driftManagementActions.js
index 5d7cd8e80488..7b3f59c7bca0 100644
--- a/src/pages/tenant/manage/driftManagementActions.js
+++ b/src/pages/tenant/manage/driftManagementActions.js
@@ -1,5 +1,6 @@
-import React from "react";
-import { Edit, Sync, PlayArrow, PictureAsPdf } from "@mui/icons-material";
+import React from 'react'
+import { Edit, Sync, PlayArrow, PictureAsPdf } from '@mui/icons-material'
+import { CippFormTemplateTenantSelector } from '../../../components/CippComponents/CippFormTemplateTenantSelector.jsx'
/**
* Creates the standard drift management actions array
@@ -11,29 +12,31 @@ import { Edit, Sync, PlayArrow, PictureAsPdf } from "@mui/icons-material";
*/
export const createDriftManagementActions = ({
templateId,
- templateType = "classic",
+ templateType = 'classic',
showEditTemplate = false,
onRefresh,
onGenerateReport,
currentTenant,
+ templateTenants = [],
+ excludedTenants = [],
}) => {
const actions = [
{
- label: "Refresh Data",
+ label: 'Refresh Data',
icon: ,
noConfirm: true,
customFunction: onRefresh,
},
- ];
+ ]
// Add Generate Report action if handler is provided
if (onGenerateReport) {
actions.push({
- label: "Generate Report",
+ label: 'Generate Report',
icon: ,
noConfirm: true,
customFunction: onGenerateReport,
- });
+ })
}
// Add template-specific actions if templateId is available
@@ -41,57 +44,55 @@ export const createDriftManagementActions = ({
// Conditionally add Edit Template action
if (showEditTemplate) {
actions.push({
- label: "Edit Template",
+ label: 'Edit Template',
icon: ,
- color: "info",
+ color: 'info',
noConfirm: true,
customFunction: () => {
// Use Next.js router for internal navigation
- import("next/router")
+ import('next/router')
.then(({ default: router }) => {
router.push(
`/tenant/standards/templates/template?id=${templateId}&type=${templateType}`
- );
+ )
})
.catch(() => {
// Fallback to window.location if router is not available
- window.location.href = `/tenant/standards/templates/template?id=${templateId}&type=${templateType}`;
- });
+ window.location.href = `/tenant/standards/templates/template?id=${templateId}&type=${templateType}`
+ })
},
- });
+ })
}
- actions.push(
- {
- label: `Run Standard Now (${currentTenant || "Currently Selected Tenant"})`,
- type: "GET",
- url: "/api/ExecStandardsRun",
- icon: ,
- data: {
- TemplateId: templateId,
- },
- confirmText: "Are you sure you want to force a run of this standard?",
- multiPost: false,
+ actions.push({
+ label: 'Run Standard Now',
+ type: 'GET',
+ url: '/api/ExecStandardsRun',
+ icon: ,
+ data: {
+ TemplateId: templateId,
},
- {
- label: "Run Standard Now (All Tenants in Template)",
- type: "GET",
- url: "/api/ExecStandardsRun",
- icon: ,
- data: {
- TemplateId: templateId,
- tenantFilter: "allTenants",
- },
- confirmText: "Are you sure you want to force a run of this standard?",
- multiPost: false,
- }
- );
+ customDataformatter: (_row, _action, formData) => ({
+ TemplateId: templateId,
+ tenantFilter: formData.tenantFilter?.value ?? formData.tenantFilter,
+ }),
+ children: ({ formHook }) => (
+
+ ),
+ confirmText: 'Are you sure you want to force a run of this standard?',
+ allowResubmit: true,
+ multiPost: false,
+ })
}
- return actions;
-};
+ return actions
+}
/**
* Default export for backward compatibility
*/
-export default createDriftManagementActions;
+export default createDriftManagementActions
diff --git a/src/pages/tenant/manage/policies-deployed.js b/src/pages/tenant/manage/policies-deployed.js
index 2a130d40dda1..616f5a64491f 100644
--- a/src/pages/tenant/manage/policies-deployed.js
+++ b/src/pages/tenant/manage/policies-deployed.js
@@ -1,6 +1,6 @@
-import { Layout as DashboardLayout } from "../../../layouts/index.js";
-import { useRouter } from "next/router";
-import { Policy, Security, AdminPanelSettings, Devices, ExpandMore } from "@mui/icons-material";
+import { Layout as DashboardLayout } from '../../../layouts/index.js'
+import { useRouter } from 'next/router'
+import { Policy, Security, AdminPanelSettings, Devices, ExpandMore } from '@mui/icons-material'
import {
Box,
Stack,
@@ -9,34 +9,34 @@ import {
AccordionSummary,
AccordionDetails,
Chip,
-} from "@mui/material";
-import { HeaderedTabbedLayout } from "../../../layouts/HeaderedTabbedLayout";
-import tabOptions from "./tabOptions.json";
-import { CippDataTable } from "../../../components/CippTable/CippDataTable";
-import { CippHead } from "../../../components/CippComponents/CippHead";
-import { ApiGetCall } from "../../../api/ApiCall";
-import standardsData from "../../../data/standards.json";
-import { createDriftManagementActions } from "./driftManagementActions";
-import { useSettings } from "../../../hooks/use-settings";
-import { CippAutoComplete } from "../../../components/CippComponents/CippAutocomplete";
-import { useEffect } from "react";
+} from '@mui/material'
+import { HeaderedTabbedLayout } from '../../../layouts/HeaderedTabbedLayout'
+import tabOptions from './tabOptions.json'
+import { CippDataTable } from '../../../components/CippTable/CippDataTable'
+import { CippHead } from '../../../components/CippComponents/CippHead'
+import { ApiGetCall } from '../../../api/ApiCall'
+import standardsData from '../../../data/standards.json'
+import { createDriftManagementActions } from './driftManagementActions'
+import { useSettings } from '../../../hooks/use-settings'
+import { CippAutoComplete } from '../../../components/CippComponents/CippAutocomplete'
+import { useEffect } from 'react'
const PoliciesDeployedPage = () => {
- const userSettingsDefaults = useSettings();
- const router = useRouter();
- const { templateId } = router.query;
- const tenantFilter = router.query.tenantFilter || userSettingsDefaults.tenantFilter;
- const currentTenant = userSettingsDefaults.currentTenant;
+ const userSettingsDefaults = useSettings()
+ const router = useRouter()
+ const { templateId } = router.query
+ const tenantFilter = router.query.tenantFilter || userSettingsDefaults.tenantFilter
+ const currentTenant = userSettingsDefaults.currentTenant
// API call to get standards template data
const standardsApi = ApiGetCall({
- url: "/api/listStandardTemplates",
- queryKey: "ListStandardsTemplates-Drift",
- });
+ url: '/api/listStandardTemplates',
+ queryKey: 'ListStandardsTemplates-Drift',
+ })
// API call to get standards comparison data
const comparisonApi = ApiGetCall({
- url: "/api/ListStandardsCompare",
+ url: '/api/ListStandardsCompare',
data: {
TemplateId: templateId,
TenantFilter: tenantFilter,
@@ -44,72 +44,70 @@ const PoliciesDeployedPage = () => {
},
queryKey: `StandardsCompare-${templateId}-${tenantFilter}`,
enabled: !!templateId && !!tenantFilter,
- });
+ })
// API call to get drift data for deviation statuses
const driftApi = ApiGetCall({
- url: "/api/listTenantDrift",
+ url: '/api/listTenantDrift',
data: {
tenantFilter: tenantFilter,
standardsId: templateId,
},
queryKey: `TenantDrift-${templateId}-${tenantFilter}`,
enabled: !!templateId && !!tenantFilter,
- });
+ })
// API call to get all Intune templates for displayName lookup
const intuneTemplatesApi = ApiGetCall({
- url: "/api/ListIntuneTemplates",
- queryKey: "ListIntuneTemplates",
- });
+ url: '/api/ListIntuneTemplates',
+ queryKey: 'ListIntuneTemplates',
+ })
// API call to get all CA templates for displayName lookup
const caTemplatesApi = ApiGetCall({
- url: "/api/ListCATemplates",
- queryKey: "ListCATemplates",
- });
+ url: '/api/ListCATemplates',
+ queryKey: 'ListCATemplates',
+ })
// Find the current template from standards data
- const currentTemplate = (standardsApi.data || []).find(
- (template) => template.GUID === templateId
- );
- const templateStandards = currentTemplate?.standards || {};
- const comparisonData = comparisonApi.data?.[0] || {};
+ const currentTemplate = (standardsApi.data || []).find((template) => template.GUID === templateId)
+ const templateStandards = currentTemplate?.standards || {}
+ const comparisonData = comparisonApi.data?.[0] || {}
// Helper function to get status from comparison data with deviation status
const getStatus = (standardKey, templateValue = null, templateType = null) => {
- const comparisonKey = `standards.${standardKey}`;
- const comparisonItem = comparisonData[comparisonKey];
- const value = comparisonItem?.Value;
+ const comparisonKey = `standards.${standardKey}`
+ const comparisonItem = comparisonData[comparisonKey]
+ const value = comparisonItem?.Value
// If value is true, it's deployed and compliant
if (value === true) {
- return "Deployed";
+ return 'Deployed'
}
// Check if ExpectedValue and CurrentValue match (like drift.js does)
if (comparisonItem?.ExpectedValue && comparisonItem?.CurrentValue) {
try {
- const expectedStr = JSON.stringify(comparisonItem.ExpectedValue);
- const currentStr = JSON.stringify(comparisonItem.CurrentValue);
+ const expectedStr = JSON.stringify(comparisonItem.ExpectedValue)
+ const currentStr = JSON.stringify(comparisonItem.CurrentValue)
if (expectedStr === currentStr) {
- return "Deployed";
+ return 'Deployed'
}
} catch (e) {
- console.error("Error comparing values:", e);
+ console.error('Error comparing values:', e)
}
}
// If value is explicitly false, it means not deployed (not a deviation)
if (value === false) {
- return "Not Deployed";
+ return 'Not Deployed'
}
// If value is null/undefined, check drift data for deviation status
- const driftData = Array.isArray(driftApi.data) ? driftApi.data : [];
+ const driftData = Array.isArray(driftApi.data) ? driftApi.data : []
// For templates, we need to match against the full template path
- let searchKeys = [standardKey, `standards.${standardKey}`];
+ let searchKeys = [standardKey, `standards.${standardKey}`]
// Add template-specific search keys
if (templateValue && templateType) {
@@ -117,7 +115,7 @@ const PoliciesDeployedPage = () => {
`standards.${templateType}.${templateValue}`,
`${templateType}.${templateValue}`,
templateValue
- );
+ )
}
const deviation = driftData.find((item) =>
@@ -128,26 +126,26 @@ const PoliciesDeployedPage = () => {
item.standardName?.includes(key) ||
item.policyName?.includes(key)
)
- );
+ )
if (deviation && deviation.Status) {
- return `Deviation - ${deviation.Status}`;
+ return `Deviation - ${deviation.Status}`
}
// Only return "Deviation - New" if we have comparison data but value is null
if (comparisonItem) {
- return "Deviation - New";
+ return 'Deviation - New'
}
- return "Not Configured";
- };
+ return 'Not Configured'
+ }
// Helper function to get display name from drift data
const getDisplayNameFromDrift = (standardKey, templateValue = null, templateType = null) => {
- const driftData = Array.isArray(driftApi.data) ? driftApi.data : [];
+ const driftData = Array.isArray(driftApi.data) ? driftApi.data : []
// For templates, we need to match against the full template path
- let searchKeys = [standardKey, `standards.${standardKey}`];
+ let searchKeys = [standardKey, `standards.${standardKey}`]
// Add template-specific search keys
if (templateValue && templateType) {
@@ -155,7 +153,7 @@ const PoliciesDeployedPage = () => {
`standards.${templateType}.${templateValue}`,
`${templateType}.${templateValue}`,
templateValue
- );
+ )
}
const deviation = driftData.find((item) =>
@@ -166,285 +164,285 @@ const PoliciesDeployedPage = () => {
item.standardName?.includes(key) ||
item.policyName?.includes(key)
)
- );
+ )
// If found in drift data, return the display name
if (deviation?.standardDisplayName) {
- return deviation.standardDisplayName;
+ return deviation.standardDisplayName
}
// If not found in drift data and this is an Intune template, look it up in the Intune templates API
- if (templateType === "IntuneTemplate" && templateValue && intuneTemplatesApi.data) {
- const template = intuneTemplatesApi.data.find((t) => t.GUID === templateValue);
+ if (templateType === 'IntuneTemplate' && templateValue && intuneTemplatesApi.data) {
+ const template = intuneTemplatesApi.data.find((t) => t.GUID === templateValue)
if (template?.Displayname) {
- return template.Displayname;
+ return template.Displayname
}
}
// If not found in drift data and this is a CA template, look it up in the CA templates API
- if (templateType === "ConditionalAccessTemplate" && templateValue && caTemplatesApi.data) {
- const template = caTemplatesApi.data.find((t) => t.GUID === templateValue);
+ if (templateType === 'ConditionalAccessTemplate' && templateValue && caTemplatesApi.data) {
+ const template = caTemplatesApi.data.find((t) => t.GUID === templateValue)
if (template?.displayName) {
- return template.displayName;
+ return template.displayName
}
}
- return null;
- };
+ return null
+ }
// Helper function to get last refresh date
const getLastRefresh = (standardKey) => {
- const comparisonKey = `standards.${standardKey}`;
- const lastRefresh = comparisonData[comparisonKey]?.LastRefresh;
- return lastRefresh ? new Date(lastRefresh).toLocaleDateString() : "N/A";
- };
+ const comparisonKey = `standards.${standardKey}`
+ const lastRefresh = comparisonData[comparisonKey]?.LastRefresh
+ return lastRefresh ? new Date(lastRefresh).toLocaleDateString() : 'N/A'
+ }
// Helper function to get standard name from standards.json
const getStandardName = (standardKey) => {
- const standardName = `standards.${standardKey}`;
- const standard = standardsData.find((s) => s.name === standardName);
- return standard?.label || standardKey.replace(/([A-Z])/g, " $1").trim();
- };
+ const standardName = `standards.${standardKey}`
+ const standard = standardsData.find((s) => s.name === standardName)
+ return standard?.label || standardKey.replace(/([A-Z])/g, ' $1').trim()
+ }
// Helper function to get template label from standards API data
const getTemplateLabel = (templateValue, templateType) => {
- if (!templateValue || !currentTemplate) return "Unknown Template";
+ if (!templateValue || !currentTemplate) return 'Unknown Template'
// Search through all templates in the current template data
- const allTemplates = currentTemplate.standards || {};
+ const allTemplates = currentTemplate.standards || {}
// Look for the template in the specific type array
if (allTemplates[templateType] && Array.isArray(allTemplates[templateType])) {
const template = allTemplates[templateType].find(
(t) => t.TemplateList?.value === templateValue
- );
+ )
if (template?.TemplateList?.label) {
- return template.TemplateList.label;
+ return template.TemplateList.label
}
}
// If not found in the specific type, search through all template types
for (const [key, templates] of Object.entries(allTemplates)) {
if (Array.isArray(templates)) {
- const template = templates.find((t) => t.TemplateList?.value === templateValue);
+ const template = templates.find((t) => t.TemplateList?.value === templateValue)
if (template?.TemplateList?.label) {
- return template.TemplateList.label;
+ return template.TemplateList.label
}
}
}
- return "Unknown Template";
- };
+ return 'Unknown Template'
+ }
// Process Security Standards (everything NOT IntuneTemplates or ConditionalAccessTemplates)
const deployedStandards = Object.entries(templateStandards)
- .filter(([key]) => key !== "IntuneTemplate" && key !== "ConditionalAccessTemplate")
+ .filter(([key]) => key !== 'IntuneTemplate' && key !== 'ConditionalAccessTemplate')
.map(([key, value], index) => ({
id: index + 1,
name: getStandardName(key),
- category: "Security Standard",
+ category: 'Security Standard',
status: getStatus(key),
lastModified: getLastRefresh(key),
standardKey: key,
- }));
+ }))
// Process Intune Templates
- const intunePolices = [];
- (templateStandards.IntuneTemplate || []).forEach((template, index) => {
- console.log("Processing IntuneTemplate in policies-deployed:", template);
+ const intunePolices = []
+ ;(templateStandards.IntuneTemplate || []).forEach((template, index) => {
+ console.log('Processing IntuneTemplate in policies-deployed:', template)
// Check if this template has TemplateList-Tags (try both property formats)
- const templateListTags = template["TemplateList-Tags"] || template.TemplateListTags;
+ const templateListTags = template['TemplateList-Tags'] || template.TemplateListTags
// Check if this template has TemplateList-Tags and expand them
if (templateListTags?.value && templateListTags?.addedFields?.templates) {
console.log(
- "Found TemplateList-Tags for IntuneTemplate in policies-deployed:",
+ 'Found TemplateList-Tags for IntuneTemplate in policies-deployed:',
templateListTags
- );
- console.log("Templates to expand:", templateListTags.addedFields.templates);
+ )
+ console.log('Templates to expand:', templateListTags.addedFields.templates)
// Expand TemplateList-Tags into multiple template items
templateListTags.addedFields.templates.forEach((expandedTemplate, expandedIndex) => {
- console.log("Expanding IntuneTemplate in policies-deployed:", expandedTemplate);
- const standardKey = `IntuneTemplate.${expandedTemplate.GUID}`;
+ console.log('Expanding IntuneTemplate in policies-deployed:', expandedTemplate)
+ const standardKey = `IntuneTemplate.${expandedTemplate.GUID}`
const driftDisplayName = getDisplayNameFromDrift(
standardKey,
expandedTemplate.GUID,
- "IntuneTemplate"
- );
- const packageTagName = templateListTags.value;
+ 'IntuneTemplate'
+ )
+ const packageTagName = templateListTags.value
const templateName =
- expandedTemplate.displayName || expandedTemplate.name || "Unknown Template";
+ expandedTemplate.displayName || expandedTemplate.name || 'Unknown Template'
intunePolices.push({
id: intunePolices.length + 1,
name: `${driftDisplayName || templateName} (via ${packageTagName})`,
- category: "Intune Template",
- platform: "Multi-Platform",
- status: getStatus(standardKey, expandedTemplate.GUID, "IntuneTemplate"),
+ category: 'Intune Template',
+ platform: 'Multi-Platform',
+ status: getStatus(standardKey, expandedTemplate.GUID, 'IntuneTemplate'),
lastModified: getLastRefresh(standardKey),
- assignedGroups: template.AssignTo || "N/A",
+ assignedGroups: template.AssignTo || 'N/A',
templateValue: expandedTemplate.GUID,
- });
- });
+ })
+ })
} else {
// Regular TemplateList processing
- const templateGuid = template.TemplateList?.value;
- const standardKey = `IntuneTemplate.${templateGuid}`;
- const driftDisplayName = getDisplayNameFromDrift(standardKey, templateGuid, "IntuneTemplate");
+ const templateGuid = template.TemplateList?.value
+ const standardKey = `IntuneTemplate.${templateGuid}`
+ const driftDisplayName = getDisplayNameFromDrift(standardKey, templateGuid, 'IntuneTemplate')
// Try multiple fallbacks for the name
- let templateName = driftDisplayName;
+ let templateName = driftDisplayName
if (!templateName) {
- const templateLabel = getTemplateLabel(templateGuid, "IntuneTemplate");
- if (templateLabel !== "Unknown Template") {
- templateName = `Intune - ${templateLabel}`;
+ const templateLabel = getTemplateLabel(templateGuid, 'IntuneTemplate')
+ if (templateLabel !== 'Unknown Template') {
+ templateName = `Intune - ${templateLabel}`
}
}
// If still no name, try looking up directly in intuneTemplatesApi by GUID
if (!templateName && templateGuid && intuneTemplatesApi.data) {
- const intuneTemplate = intuneTemplatesApi.data.find((t) => t.GUID === templateGuid);
+ const intuneTemplate = intuneTemplatesApi.data.find((t) => t.GUID === templateGuid)
if (intuneTemplate?.Displayname) {
- templateName = intuneTemplate.Displayname;
+ templateName = intuneTemplate.Displayname
}
}
// Final fallback
if (!templateName) {
- templateName = `Intune - ${templateGuid || "Unknown Template"}`;
+ templateName = `Intune - ${templateGuid || 'Unknown Template'}`
}
intunePolices.push({
id: intunePolices.length + 1,
name: templateName,
- category: "Intune Template",
- platform: "Multi-Platform",
- status: getStatus(standardKey, templateGuid, "IntuneTemplate"),
+ category: 'Intune Template',
+ platform: 'Multi-Platform',
+ status: getStatus(standardKey, templateGuid, 'IntuneTemplate'),
lastModified: getLastRefresh(standardKey),
- assignedGroups: template.AssignTo || "N/A",
+ assignedGroups: template.AssignTo || 'N/A',
templateValue: templateGuid,
- });
+ })
}
- });
+ })
// Add any templates from comparison data that weren't in template standards (e.g., from tags)
// Check for IntuneTemplate entries in comparison data
Object.keys(comparisonData).forEach((key) => {
- if (key.startsWith("standards.IntuneTemplate.")) {
- const guid = key.replace("standards.IntuneTemplate.", "");
+ if (key.startsWith('standards.IntuneTemplate.')) {
+ const guid = key.replace('standards.IntuneTemplate.', '')
// Check if this GUID is already in our list
- const alreadyExists = intunePolices.some((p) => p.templateValue === guid);
+ const alreadyExists = intunePolices.some((p) => p.templateValue === guid)
if (!alreadyExists && comparisonData[key]?.Value === true) {
- const standardKey = `IntuneTemplate.${guid}`;
- const driftDisplayName = getDisplayNameFromDrift(standardKey, guid, "IntuneTemplate");
+ const standardKey = `IntuneTemplate.${guid}`
+ const driftDisplayName = getDisplayNameFromDrift(standardKey, guid, 'IntuneTemplate')
intunePolices.push({
id: intunePolices.length + 1,
name: driftDisplayName || `Intune - ${guid}`,
- category: "Intune Template",
- platform: "Multi-Platform",
- status: getStatus(standardKey, guid, "IntuneTemplate"),
+ category: 'Intune Template',
+ platform: 'Multi-Platform',
+ status: getStatus(standardKey, guid, 'IntuneTemplate'),
lastModified: getLastRefresh(standardKey),
- assignedGroups: "N/A",
+ assignedGroups: 'N/A',
templateValue: guid,
- });
+ })
}
}
- });
+ })
// Process Conditional Access Templates
- const conditionalAccessPolicies = [];
- (templateStandards.ConditionalAccessTemplate || []).forEach((template, index) => {
- console.log("Processing ConditionalAccessTemplate in policies-deployed:", template);
+ const conditionalAccessPolicies = []
+ ;(templateStandards.ConditionalAccessTemplate || []).forEach((template, index) => {
+ console.log('Processing ConditionalAccessTemplate in policies-deployed:', template)
// Check if this template has TemplateList-Tags (try both property formats)
- const templateListTags = template["TemplateList-Tags"] || template.TemplateListTags;
+ const templateListTags = template['TemplateList-Tags'] || template.TemplateListTags
// Check if this template has TemplateList-Tags and expand them
if (templateListTags?.value && templateListTags?.addedFields?.templates) {
console.log(
- "Found TemplateList-Tags for ConditionalAccessTemplate in policies-deployed:",
+ 'Found TemplateList-Tags for ConditionalAccessTemplate in policies-deployed:',
templateListTags
- );
- console.log("Templates to expand:", templateListTags.addedFields.templates);
+ )
+ console.log('Templates to expand:', templateListTags.addedFields.templates)
// Expand TemplateList-Tags into multiple template items
templateListTags.addedFields.templates.forEach((expandedTemplate, expandedIndex) => {
- console.log("Expanding ConditionalAccessTemplate in policies-deployed:", expandedTemplate);
- const standardKey = `ConditionalAccessTemplate.${expandedTemplate.GUID}`;
+ console.log('Expanding ConditionalAccessTemplate in policies-deployed:', expandedTemplate)
+ const standardKey = `ConditionalAccessTemplate.${expandedTemplate.GUID}`
const driftDisplayName = getDisplayNameFromDrift(
standardKey,
expandedTemplate.GUID,
- "ConditionalAccessTemplate"
- );
- const packageTagName = templateListTags.value;
+ 'ConditionalAccessTemplate'
+ )
+ const packageTagName = templateListTags.value
const templateName =
- expandedTemplate.displayName || expandedTemplate.name || "Unknown Template";
+ expandedTemplate.displayName || expandedTemplate.name || 'Unknown Template'
conditionalAccessPolicies.push({
id: conditionalAccessPolicies.length + 1,
name: `${driftDisplayName || templateName} (via ${packageTagName})`,
- state: template.state || "Unknown",
- conditions: "Conditional Access Policy",
- controls: "Access Control",
+ state: template.state || 'Unknown',
+ conditions: 'Conditional Access Policy',
+ controls: 'Access Control',
lastModified: getLastRefresh(standardKey),
- status: getStatus(standardKey, expandedTemplate.GUID, "ConditionalAccessTemplate"),
+ status: getStatus(standardKey, expandedTemplate.GUID, 'ConditionalAccessTemplate'),
templateValue: expandedTemplate.GUID,
- });
- });
+ })
+ })
} else {
// Regular TemplateList processing
- const standardKey = `ConditionalAccessTemplate.${template.TemplateList?.value}`;
+ const standardKey = `ConditionalAccessTemplate.${template.TemplateList?.value}`
const driftDisplayName = getDisplayNameFromDrift(
standardKey,
template.TemplateList?.value,
- "ConditionalAccessTemplate"
- );
+ 'ConditionalAccessTemplate'
+ )
const templateLabel = getTemplateLabel(
template.TemplateList?.value,
- "ConditionalAccessTemplate"
- );
+ 'ConditionalAccessTemplate'
+ )
conditionalAccessPolicies.push({
id: conditionalAccessPolicies.length + 1,
name: driftDisplayName || `Conditional Access - ${templateLabel}`,
- state: template.state || "Unknown",
- conditions: "Conditional Access Policy",
- controls: "Access Control",
+ state: template.state || 'Unknown',
+ conditions: 'Conditional Access Policy',
+ controls: 'Access Control',
lastModified: getLastRefresh(standardKey),
- status: getStatus(standardKey, template.TemplateList?.value, "ConditionalAccessTemplate"),
+ status: getStatus(standardKey, template.TemplateList?.value, 'ConditionalAccessTemplate'),
templateValue: template.TemplateList?.value,
- });
+ })
}
- });
+ })
// Add any CA templates from comparison data that weren't in template standards
Object.keys(comparisonData).forEach((key) => {
- if (key.startsWith("standards.ConditionalAccessTemplate.")) {
- const guid = key.replace("standards.ConditionalAccessTemplate.", "");
+ if (key.startsWith('standards.ConditionalAccessTemplate.')) {
+ const guid = key.replace('standards.ConditionalAccessTemplate.', '')
// Check if this GUID is already in our list
- const alreadyExists = conditionalAccessPolicies.some((p) => p.templateValue === guid);
+ const alreadyExists = conditionalAccessPolicies.some((p) => p.templateValue === guid)
if (!alreadyExists && comparisonData[key]?.Value === true) {
- const standardKey = `ConditionalAccessTemplate.${guid}`;
+ const standardKey = `ConditionalAccessTemplate.${guid}`
const driftDisplayName = getDisplayNameFromDrift(
standardKey,
guid,
- "ConditionalAccessTemplate"
- );
+ 'ConditionalAccessTemplate'
+ )
conditionalAccessPolicies.push({
id: conditionalAccessPolicies.length + 1,
name: driftDisplayName || `Conditional Access - ${guid}`,
- state: "Unknown",
- conditions: "Conditional Access Policy",
- controls: "Access Control",
+ state: 'Unknown',
+ conditions: 'Conditional Access Policy',
+ controls: 'Access Control',
lastModified: getLastRefresh(standardKey),
- status: getStatus(standardKey, guid, "ConditionalAccessTemplate"),
+ status: getStatus(standardKey, guid, 'ConditionalAccessTemplate'),
templateValue: guid,
- });
+ })
}
}
- });
+ })
// Simple filter for all templates (no type filtering)
const templateOptions = standardsApi.data
@@ -456,35 +454,41 @@ const PoliciesDeployedPage = () => {
`Template ${template.GUID}`,
value: template.GUID,
}))
- : [];
+ : []
// Find currently selected template
const selectedTemplateOption =
templateId && templateOptions.length
? templateOptions.find((option) => option.value === templateId) || null
- : null;
+ : null
// Effect to refetch APIs when templateId changes (needed for shallow routing)
useEffect(() => {
if (templateId) {
- comparisonApi.refetch();
- driftApi.refetch();
+ comparisonApi.refetch()
+ driftApi.refetch()
}
- }, [templateId]);
+ }, [templateId])
const actions = createDriftManagementActions({
templateId,
- templateType: currentTemplate?.type || "classic",
+ templateType: currentTemplate?.type || 'classic',
showEditTemplate: true,
onRefresh: () => {
- standardsApi.refetch();
- comparisonApi.refetch();
- driftApi.refetch();
+ standardsApi.refetch()
+ comparisonApi.refetch()
+ driftApi.refetch()
},
currentTenant,
- });
- const title = "View Deployed Policies";
- const subtitle = [];
+ templateTenants: Array.isArray(currentTemplate?.tenantFilter)
+ ? currentTemplate.tenantFilter
+ : [],
+ excludedTenants: Array.isArray(currentTemplate?.excludedTenants)
+ ? currentTemplate.excludedTenants
+ : [],
+ })
+ const title = 'View Deployed Policies'
+ const subtitle = []
return (
{
{/* Filters Section */}
-
+
{
defaultValue={selectedTemplateOption}
value={selectedTemplateOption}
onChange={(selectedTemplate) => {
- const query = { ...router.query };
+ const query = { ...router.query }
if (selectedTemplate && selectedTemplate.value) {
- query.templateId = selectedTemplate.value;
+ query.templateId = selectedTemplate.value
} else {
- delete query.templateId;
+ delete query.templateId
}
router.replace(
{
@@ -521,7 +525,7 @@ const PoliciesDeployedPage = () => {
},
undefined,
{ shallow: true }
- );
+ )
}}
sx={{ width: 300 }}
placeholder="Select template..."
@@ -542,7 +546,7 @@ const PoliciesDeployedPage = () => {
{
title="Intune Templates"
data={intunePolices}
simpleColumns={[
- "name",
- "category",
- "platform",
- "status",
- "lastModified",
- "assignedGroups",
+ 'name',
+ 'category',
+ 'platform',
+ 'status',
+ 'lastModified',
+ 'assignedGroups',
]}
noCard={true}
isFetching={
@@ -594,12 +598,12 @@ const PoliciesDeployedPage = () => {
title="Conditional Access Templates"
data={conditionalAccessPolicies}
simpleColumns={[
- "name",
- "state",
- "status",
- "conditions",
- "controls",
- "lastModified",
+ 'name',
+ 'state',
+ 'status',
+ 'conditions',
+ 'controls',
+ 'lastModified',
]}
noCard={true}
isFetching={
@@ -611,9 +615,9 @@ const PoliciesDeployedPage = () => {
- );
-};
+ )
+}
-PoliciesDeployedPage.getLayout = (page) => {page};
+PoliciesDeployedPage.getLayout = (page) => {page}
-export default PoliciesDeployedPage;
+export default PoliciesDeployedPage
diff --git a/src/pages/tenant/standards/templates/index.js b/src/pages/tenant/standards/templates/index.js
index b23752c50d9b..e6b82787f7db 100644
--- a/src/pages/tenant/standards/templates/index.js
+++ b/src/pages/tenant/standards/templates/index.js
@@ -1,152 +1,151 @@
-import { Alert, Button } from "@mui/material";
-import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { Layout as DashboardLayout } from "../../../../layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative.
-import { TabbedLayout } from "../../../../layouts/TabbedLayout";
-import Link from "next/link";
-import { CopyAll, Delete, PlayArrow, AddBox, Edit, GitHub, ContentCopy } from "@mui/icons-material";
-import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall";
-import { Grid } from "@mui/system";
-import { CippApiResults } from "../../../../components/CippComponents/CippApiResults";
-import { EyeIcon } from "@heroicons/react/24/outline";
-import tabOptions from "../tabOptions.json";
-import { useSettings } from "../../../../hooks/use-settings.js";
-import { CippPolicyImportDrawer } from "../../../../components/CippComponents/CippPolicyImportDrawer.jsx";
-import { PermissionButton } from "../../../../utils/permissions.js";
+import { Alert, Button } from '@mui/material'
+import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { Layout as DashboardLayout } from '../../../../layouts/index.js' // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative.
+import { TabbedLayout } from '../../../../layouts/TabbedLayout'
+import Link from 'next/link'
+import { CopyAll, Delete, PlayArrow, AddBox, Edit, GitHub, ContentCopy } from '@mui/icons-material'
+import { ApiGetCall, ApiPostCall } from '../../../../api/ApiCall'
+import { Grid } from '@mui/system'
+import { CippApiResults } from '../../../../components/CippComponents/CippApiResults'
+import { EyeIcon } from '@heroicons/react/24/outline'
+import tabOptions from '../tabOptions.json'
+import { CippPolicyImportDrawer } from '../../../../components/CippComponents/CippPolicyImportDrawer.jsx'
+import { PermissionButton } from '../../../../utils/permissions.js'
+import { CippFormTemplateTenantSelector } from '../../../../components/CippComponents/CippFormTemplateTenantSelector.jsx'
const Page = () => {
- const oldStandards = ApiGetCall({ url: "/api/ListStandards", queryKey: "ListStandards-legacy" });
+ const oldStandards = ApiGetCall({ url: '/api/ListStandards', queryKey: 'ListStandards-legacy' })
const integrations = ApiGetCall({
- url: "/api/ListExtensionsConfig",
- queryKey: "Integrations",
+ url: '/api/ListExtensionsConfig',
+ queryKey: 'Integrations',
refetchOnMount: false,
refetchOnReconnect: false,
- });
+ })
- const currentTenant = useSettings().currentTenant;
- const pageTitle = "Templates";
- const cardButtonPermissions = ["Tenant.Standards.ReadWrite"];
+ const pageTitle = 'Templates'
+ const cardButtonPermissions = ['Tenant.Standards.ReadWrite']
const actions = [
{
- label: "View Tenant Report",
- link: "/tenant/manage/applied-standards/?templateId=[GUID]",
+ label: 'View Tenant Report',
+ link: '/tenant/manage/applied-standards/?templateId=[GUID]',
icon: ,
- color: "info",
- target: "_self",
+ color: 'info',
+ target: '_self',
},
{
- label: "Edit Template",
+ label: 'Edit Template',
//when using a link it must always be the full path /identity/administration/users/[id] for example.
- link: "/tenant/standards/templates/template?id=[GUID]&type=[type]",
+ link: '/tenant/standards/templates/template?id=[GUID]&type=[type]',
icon: ,
- color: "success",
- target: "_self",
+ color: 'success',
+ target: '_self',
},
{
- label: "Clone & Edit Template",
- link: "/tenant/standards/templates/template?id=[GUID]&clone=true&type=[type]",
+ label: 'Clone & Edit Template',
+ link: '/tenant/standards/templates/template?id=[GUID]&clone=true&type=[type]',
icon: ,
- color: "success",
- target: "_self",
+ color: 'success',
+ target: '_self',
},
{
- label: "Create Drift Clone",
- type: "POST",
- url: "/api/ExecDriftClone",
+ label: 'Create Drift Clone',
+ type: 'POST',
+ url: '/api/ExecDriftClone',
icon: ,
- color: "warning",
+ color: 'warning',
data: {
- id: "GUID",
+ id: 'GUID',
},
confirmText:
- "Are you sure you want to create a drift clone of [templateName]? This will create a new drift template based on this template.",
+ 'Are you sure you want to create a drift clone of [templateName]? This will create a new drift template based on this template.',
multiPost: false,
},
{
- label: `Run Template Now (${currentTenant || "Currently Selected Tenant"})`,
- type: "GET",
- url: "/api/ExecStandardsRun",
+ label: 'Run Template Now',
+ type: 'GET',
+ url: '/api/ExecStandardsRun',
icon: ,
data: {
- TemplateId: "GUID",
+ TemplateId: 'GUID',
},
- confirmText: "Are you sure you want to force a run of this template?",
+ allowResubmit: true,
+ customDataformatter: (row, action, formData) => ({
+ TemplateId: row.GUID,
+ tenantFilter: formData.tenantFilter?.value ?? formData.tenantFilter,
+ }),
+ children: ({ formHook, row }) => (
+
+ ),
+ confirmText: 'Are you sure you want to force a run of this template?',
multiPost: false,
},
{
- label: "Run Template Now (All Tenants in Template)",
- type: "GET",
- url: "/api/ExecStandardsRun",
- icon: ,
- data: {
- TemplateId: "GUID",
- tenantFilter: "allTenants",
- },
- confirmText: "Are you sure you want to force a run of this template?",
- multiPost: false,
- },
- {
- label: "Save to GitHub",
- type: "POST",
- url: "/api/ExecCommunityRepo",
+ label: 'Save to GitHub',
+ type: 'POST',
+ url: '/api/ExecCommunityRepo',
icon: ,
data: {
- Action: "UploadTemplate",
- GUID: "GUID",
+ Action: 'UploadTemplate',
+ GUID: 'GUID',
},
fields: [
{
- label: "Repository",
- name: "FullName",
- type: "select",
+ label: 'Repository',
+ name: 'FullName',
+ type: 'select',
api: {
- url: "/api/ListCommunityRepos",
+ url: '/api/ListCommunityRepos',
data: {
WriteAccess: true,
},
- queryKey: "CommunityRepos-Write",
- dataKey: "Results",
- valueField: "FullName",
- labelField: "FullName",
+ queryKey: 'CommunityRepos-Write',
+ dataKey: 'Results',
+ valueField: 'FullName',
+ labelField: 'FullName',
},
multiple: false,
creatable: false,
required: true,
validators: {
- required: { value: true, message: "This field is required" },
+ required: { value: true, message: 'This field is required' },
},
},
{
- label: "Commit Message",
- placeholder: "Enter a commit message for adding this file to GitHub",
- name: "Message",
- type: "textField",
+ label: 'Commit Message',
+ placeholder: 'Enter a commit message for adding this file to GitHub',
+ name: 'Message',
+ type: 'textField',
multiline: true,
required: true,
rows: 4,
},
],
- confirmText: "Are you sure you want to save this template to the selected repository?",
+ confirmText: 'Are you sure you want to save this template to the selected repository?',
condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
},
{
- label: "Delete Template",
- type: "POST",
- url: "/api/RemoveStandardTemplate",
+ label: 'Delete Template',
+ type: 'POST',
+ url: '/api/RemoveStandardTemplate',
icon: ,
data: {
- ID: "GUID",
+ ID: 'GUID',
},
- confirmText: "Are you sure you want to delete [templateName]?",
+ confirmText: 'Are you sure you want to delete [templateName]?',
multiPost: false,
},
- ];
- const conversionApi = ApiPostCall({ relatedQueryKeys: "listStandardTemplates" });
+ ]
+ const conversionApi = ApiPostCall({ relatedQueryKeys: 'listStandardTemplates' })
const handleConversion = () => {
conversionApi.mutate({
- url: "/api/execStandardConvert",
+ url: '/api/execStandardConvert',
data: {},
- });
- };
+ })
+ }
const tableFilter = (
{oldStandards.isSuccess && oldStandards.data.length !== 0 && (
@@ -154,7 +153,7 @@ const Page = () => {
You have legacy standards available. Press the button to convert these standards to
@@ -163,7 +162,7 @@ const Page = () => {
they are correct and re-enable the schedule.
- handleConversion()} variant={"contained"}>
+ handleConversion()} variant={'contained'}>
Convert Legacy Standards
@@ -175,7 +174,7 @@ const Page = () => {
)}
- );
+ )
return (
{
actions={actions}
tableFilter={tableFilter}
simpleColumns={[
- "templateName",
- "type",
- "tenantFilter",
- "excludedTenants",
- "updatedAt",
- "updatedBy",
- "runManually",
- "standards",
+ 'templateName',
+ 'type',
+ 'tenantFilter',
+ 'excludedTenants',
+ 'updatedAt',
+ 'updatedBy',
+ 'runManually',
+ 'standards',
]}
queryKey="listStandardTemplates"
/>
- );
-};
+ )
+}
Page.getLayout = (page) => (
{page}
-);
+)
-export default Page;
+export default Page
diff --git a/src/pages/tenant/standards/templates/template.jsx b/src/pages/tenant/standards/templates/template.jsx
index 3890212fdbd8..630fdee6f2ce 100644
--- a/src/pages/tenant/standards/templates/template.jsx
+++ b/src/pages/tenant/standards/templates/template.jsx
@@ -1,205 +1,205 @@
-import { Box, Button, Container, Stack, Typography, SvgIcon, Skeleton } from "@mui/material";
-import { Grid } from "@mui/system";
-import { Layout as DashboardLayout } from "../../../../layouts/index.js";
-import { useForm, useWatch } from "react-hook-form";
-import { useRouter } from "next/router";
-import { Add, SaveRounded } from "@mui/icons-material";
-import { useEffect, useState, useCallback, useMemo, useRef, lazy, Suspense } from "react";
-import standards from "../../../../data/standards";
-import CippStandardAccordion from "../../../../components/CippStandards/CippStandardAccordion";
+import { Box, Button, Container, Stack, Typography, SvgIcon, Skeleton } from '@mui/material'
+import { Grid } from '@mui/system'
+import { Layout as DashboardLayout } from '../../../../layouts/index.js'
+import { useForm, useWatch } from 'react-hook-form'
+import { useRouter } from 'next/router'
+import { Add, SaveRounded } from '@mui/icons-material'
+import { useEffect, useState, useCallback, useMemo, useRef, lazy, Suspense } from 'react'
+import standards from '../../../../data/standards'
+import CippStandardAccordion from '../../../../components/CippStandards/CippStandardAccordion'
// Lazy load the dialog to improve initial page load performance
const CippStandardDialog = lazy(
- () => import("../../../../components/CippStandards/CippStandardDialog"),
-);
-import CippStandardsSideBar from "../../../../components/CippStandards/CippStandardsSideBar";
-import { ArrowLeftIcon } from "@mui/x-date-pickers";
-import { useDialog } from "../../../../hooks/use-dialog";
-import { ApiGetCall } from "../../../../api/ApiCall";
-import _ from "lodash";
-import { createDriftManagementActions } from "../../manage/driftManagementActions";
-import { ActionsMenu } from "../../../../components/actions-menu";
-import { useSettings } from "../../../../hooks/use-settings";
-import { CippHead } from "../../../../components/CippComponents/CippHead";
+ () => import('../../../../components/CippStandards/CippStandardDialog')
+)
+import CippStandardsSideBar from '../../../../components/CippStandards/CippStandardsSideBar'
+import { ArrowLeftIcon } from '@mui/x-date-pickers'
+import { useDialog } from '../../../../hooks/use-dialog'
+import { ApiGetCall } from '../../../../api/ApiCall'
+import _ from 'lodash'
+import { createDriftManagementActions } from '../../manage/driftManagementActions'
+import { ActionsMenu } from '../../../../components/actions-menu'
+import { useSettings } from '../../../../hooks/use-settings'
+import { CippHead } from '../../../../components/CippComponents/CippHead'
const Page = () => {
- const router = useRouter();
- const [editMode, setEditMode] = useState(false);
- const formControl = useForm({ mode: "onBlur" });
- const { formState } = formControl;
- const [dialogOpen, setDialogOpen] = useState(false);
- const [expanded, setExpanded] = useState(null);
- const [searchQuery, setSearchQuery] = useState("");
- const [selectedStandards, setSelectedStandards] = useState({});
- const [updatedAt, setUpdatedAt] = useState(false);
- const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);
- const [currentStep, setCurrentStep] = useState(0);
- const [hasDriftConflict, setHasDriftConflict] = useState(false);
- const initialStandardsRef = useRef({});
-
- const currentTenant = useSettings().currentTenant;
+ const router = useRouter()
+ const [editMode, setEditMode] = useState(false)
+ const formControl = useForm({ mode: 'onBlur' })
+ const { formState } = formControl
+ const [dialogOpen, setDialogOpen] = useState(false)
+ const [expanded, setExpanded] = useState(null)
+ const [searchQuery, setSearchQuery] = useState('')
+ const [selectedStandards, setSelectedStandards] = useState({})
+ const [updatedAt, setUpdatedAt] = useState(false)
+ const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false)
+ const [currentStep, setCurrentStep] = useState(0)
+ const [hasDriftConflict, setHasDriftConflict] = useState(false)
+ const initialStandardsRef = useRef({})
+
+ const currentTenant = useSettings().currentTenant
// Check if this is drift mode
- const isDriftMode = router.query.type === "drift";
+ const isDriftMode = router.query.type === 'drift'
// Set drift mode flag in form when in drift mode
useEffect(() => {
if (isDriftMode) {
- formControl.setValue("isDriftTemplate", true);
+ formControl.setValue('isDriftTemplate', true)
}
- }, [isDriftMode, formControl]);
+ }, [isDriftMode, formControl])
// Watch form values to check valid configuration
- const watchForm = useWatch({ control: formControl.control });
+ const watchForm = useWatch({ control: formControl.control })
const existingTemplate = ApiGetCall({
url: `/api/listStandardTemplates`,
data: { id: router.query.id },
queryKey: `listStandardTemplates-${router.query.id}`,
waiting: editMode,
- });
+ })
// Check if the template configuration is valid and update currentStep
useEffect(() => {
const stepsStatus = {
- step1: !!_.get(watchForm, "templateName"),
- step2: _.get(watchForm, "tenantFilter", []).length > 0,
+ step1: !!_.get(watchForm, 'templateName'),
+ step2: _.get(watchForm, 'tenantFilter', []).length > 0,
step3: Object.keys(selectedStandards).length > 0,
step4:
- _.get(watchForm, "standards") &&
+ _.get(watchForm, 'standards') &&
Object.keys(selectedStandards).length > 0 &&
Object.keys(selectedStandards).every((standardName) => {
- const standardValues = _.get(watchForm, standardName, {});
+ const standardValues = _.get(watchForm, standardName, {})
// Always require an action value which should be an array with at least one element
- const actionValue = _.get(standardValues, "action");
- return actionValue && (!Array.isArray(actionValue) || actionValue.length > 0);
+ const actionValue = _.get(standardValues, 'action')
+ return actionValue && (!Array.isArray(actionValue) || actionValue.length > 0)
}),
- };
+ }
- const completedSteps = Object.values(stepsStatus).filter(Boolean).length;
- setCurrentStep(completedSteps);
- }, [selectedStandards, watchForm, isDriftMode]);
+ const completedSteps = Object.values(stepsStatus).filter(Boolean).length
+ setCurrentStep(completedSteps)
+ }, [selectedStandards, watchForm, isDriftMode])
// Handle route change events
const handleRouteChange = useCallback(
(url) => {
if (hasUnsavedChanges) {
const confirmLeave = window.confirm(
- "You have unsaved changes. Are you sure you want to leave this page?",
- );
+ 'You have unsaved changes. Are you sure you want to leave this page?'
+ )
if (!confirmLeave) {
- router.events.emit("routeChangeError");
- throw "Route change was aborted";
+ router.events.emit('routeChangeError')
+ throw 'Route change was aborted'
}
}
},
- [hasUnsavedChanges, router],
- );
+ [hasUnsavedChanges, router]
+ )
// Handle browser back/forward navigation or tab close
useEffect(() => {
const handleBeforeUnload = (e) => {
if (hasUnsavedChanges) {
- e.preventDefault();
- e.returnValue = "You have unsaved changes. Are you sure you want to leave this page?";
- return e.returnValue;
+ e.preventDefault()
+ e.returnValue = 'You have unsaved changes. Are you sure you want to leave this page?'
+ return e.returnValue
}
- };
+ }
// Add event listeners
- window.addEventListener("beforeunload", handleBeforeUnload);
- router.events.on("routeChangeStart", handleRouteChange);
+ window.addEventListener('beforeunload', handleBeforeUnload)
+ router.events.on('routeChangeStart', handleRouteChange)
// Remove event listeners on cleanup
return () => {
- window.removeEventListener("beforeunload", handleBeforeUnload);
- router.events.off("routeChangeStart", handleRouteChange);
- };
- }, [hasUnsavedChanges, handleRouteChange, router.events]);
+ window.removeEventListener('beforeunload', handleBeforeUnload)
+ router.events.off('routeChangeStart', handleRouteChange)
+ }
+ }, [hasUnsavedChanges, handleRouteChange, router.events])
// Track form changes
useEffect(() => {
// Compare the current form values with the initial values to check for real changes
- const currentValues = formControl.getValues();
- const initialValues = initialStandardsRef.current;
+ const currentValues = formControl.getValues()
+ const initialValues = initialStandardsRef.current
if (
formState.isDirty ||
JSON.stringify(selectedStandards) !== JSON.stringify(initialStandardsRef.current)
) {
- setHasUnsavedChanges(true);
+ setHasUnsavedChanges(true)
} else {
- setHasUnsavedChanges(false);
+ setHasUnsavedChanges(false)
}
- }, [formState.isDirty, selectedStandards, formControl]);
+ }, [formState.isDirty, selectedStandards, formControl])
useEffect(() => {
if (router.query.id) {
- setEditMode(true);
+ setEditMode(true)
}
if (existingTemplate.isSuccess) {
//formControl.reset(existingTemplate.data?.[0]);
- const apiData = existingTemplate.data?.[0];
+ const apiData = existingTemplate.data?.[0]
Object.keys(apiData.standards).forEach((key) => {
if (Array.isArray(apiData.standards[key])) {
apiData.standards[key] = apiData.standards[key].filter(
- (value) => value !== null && value !== undefined,
- );
+ (value) => value !== null && value !== undefined
+ )
}
- });
+ })
- formControl.reset(apiData);
+ formControl.reset(apiData)
if (router.query.clone) {
- formControl.setValue("templateName", `${apiData.templateName} (Clone)`);
- formControl.setValue("GUID", "");
+ formControl.setValue('templateName', `${apiData.templateName} (Clone)`)
+ formControl.setValue('GUID', '')
}
//set the updated at date and user
setUpdatedAt({
date: apiData?.updatedAt,
user: apiData?.updatedBy,
- });
+ })
// Transform standards from the API to match the format for selectedStandards
- const standardsFromApi = apiData?.standards;
- const transformedStandards = {};
+ const standardsFromApi = apiData?.standards
+ const transformedStandards = {}
Object.keys(standardsFromApi).forEach((key) => {
if (Array.isArray(standardsFromApi[key])) {
standardsFromApi[key].forEach((_, index) => {
- transformedStandards[`standards.${key}[${index}]`] = true;
- });
+ transformedStandards[`standards.${key}[${index}]`] = true
+ })
} else {
- transformedStandards[`standards.${key}`] = true;
+ transformedStandards[`standards.${key}`] = true
}
- });
+ })
- setSelectedStandards(transformedStandards);
+ setSelectedStandards(transformedStandards)
// Store initial state for change detection
- initialStandardsRef.current = { ...transformedStandards };
- setHasUnsavedChanges(false);
+ initialStandardsRef.current = { ...transformedStandards }
+ setHasUnsavedChanges(false)
}
- }, [existingTemplate.isSuccess, router]);
+ }, [existingTemplate.isSuccess, router])
// Memoize categories to avoid unnecessary recalculations
const categories = useMemo(() => {
return standards.reduce((acc, standard) => {
- const { cat } = standard;
+ const { cat } = standard
if (!acc[cat]) {
- acc[cat] = [];
+ acc[cat] = []
}
- acc[cat].push(standard);
- return acc;
- }, {});
- }, []);
+ acc[cat].push(standard)
+ return acc
+ }, {})
+ }, [])
const handleOpenDialog = useCallback(() => {
- setDialogOpen(true);
- }, []);
+ setDialogOpen(true)
+ }, [])
const handleCloseDialog = useCallback(() => {
- setDialogOpen(false);
- setSearchQuery("");
- }, []);
+ setDialogOpen(false)
+ setSearchQuery('')
+ }, [])
const filterStandards = (standardsList) =>
standardsList.filter(
@@ -211,149 +211,157 @@ const Page = () => {
(standard.appliesToTest &&
standard.appliesToTest.some((testId) =>
testId.toLowerCase().includes(searchQuery.toLowerCase())
- )),
- );
+ ))
+ )
const handleToggleStandard = (standardName) => {
setSelectedStandards((prev) => ({
...prev,
[standardName]: !prev[standardName],
- }));
- };
+ }))
+ }
const handleAddMultipleStandard = (standardName) => {
//if the standardname contains an array qualifier,e.g standardName[0], strip that away.
- const arrayPattern = /(.*)\[(\d+)\]$/;
- const match = standardName.match(arrayPattern);
+ const arrayPattern = /(.*)\[(\d+)\]$/
+ const match = standardName.match(arrayPattern)
if (match) {
- standardName = match[1];
+ standardName = match[1]
}
setSelectedStandards((prev) => {
- const existingInstances = Object.keys(prev).filter((name) => name.startsWith(standardName));
- const newIndex = existingInstances.length;
+ const existingInstances = Object.keys(prev).filter((name) => name.startsWith(standardName))
+ const newIndex = existingInstances.length
return {
...prev,
[`${standardName}[${newIndex}]`]: true,
- };
- });
- };
+ }
+ })
+ }
const handleRemoveStandard = (standardName) => {
- const arrayPattern = /(.*)\[(\d+)\]$/;
- const match = standardName.match(arrayPattern);
+ const arrayPattern = /(.*)\[(\d+)\]$/
+ const match = standardName.match(arrayPattern)
if (match) {
- const baseName = match[1];
- const removedIndex = parseInt(match[2]);
+ const baseName = match[1]
+ const removedIndex = parseInt(match[2])
// Remove the item from the form array
- const currentArray = formControl.getValues(baseName) || [];
- const updatedArray = currentArray.filter((_, i) => i !== removedIndex);
- formControl.setValue(baseName, updatedArray);
+ const currentArray = formControl.getValues(baseName) || []
+ const updatedArray = currentArray.filter((_, i) => i !== removedIndex)
+ formControl.setValue(baseName, updatedArray)
// Re-index selectedStandards to keep indices contiguous
- const escapedBaseName = baseName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
- const reindexPattern = new RegExp(`^${escapedBaseName}\\[(\\d+)\\]$`);
+ const escapedBaseName = baseName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
+ const reindexPattern = new RegExp(`^${escapedBaseName}\\[(\\d+)\\]$`)
setSelectedStandards((prev) => {
- const newSelected = {};
+ const newSelected = {}
Object.keys(prev).forEach((key) => {
- const keyMatch = key.match(reindexPattern);
+ const keyMatch = key.match(reindexPattern)
if (keyMatch) {
- const idx = parseInt(keyMatch[1]);
+ const idx = parseInt(keyMatch[1])
if (idx < removedIndex) {
- newSelected[key] = prev[key];
+ newSelected[key] = prev[key]
} else if (idx > removedIndex) {
// Shift higher indices down by 1
- newSelected[`${baseName}[${idx - 1}]`] = prev[key];
+ newSelected[`${baseName}[${idx - 1}]`] = prev[key]
}
// Skip the removed index
} else {
- newSelected[key] = prev[key];
+ newSelected[key] = prev[key]
}
- });
- return newSelected;
- });
+ })
+ return newSelected
+ })
} else {
setSelectedStandards((prev) => {
- const newSelected = { ...prev };
- delete newSelected[standardName];
- return newSelected;
- });
- formControl.unregister(standardName);
+ const newSelected = { ...prev }
+ delete newSelected[standardName]
+ return newSelected
+ })
+ formControl.unregister(standardName)
}
- };
+ }
const handleAccordionToggle = (standardName) => {
- setExpanded((prev) => (prev === standardName ? null : standardName));
- };
+ setExpanded((prev) => (prev === standardName ? null : standardName))
+ }
- const createDialog = useDialog();
+ const createDialog = useDialog()
// Save action that will open the create dialog
const handleSave = () => {
- createDialog.handleOpen();
+ createDialog.handleOpen()
// Will be set to false after successful save in the dialog component
- };
+ }
// Determine if save button should be disabled based on configuration
const isSaveDisabled = isDriftMode
- ? !_.get(watchForm, "tenantFilter") ||
- !_.get(watchForm, "tenantFilter").length ||
+ ? !_.get(watchForm, 'tenantFilter') ||
+ !_.get(watchForm, 'tenantFilter').length ||
currentStep < 4 ||
hasDriftConflict // For drift mode, require all steps and no drift conflicts
- : !_.get(watchForm, "tenantFilter") ||
- !_.get(watchForm, "tenantFilter").length ||
- currentStep < 4;
+ : !_.get(watchForm, 'tenantFilter') ||
+ !_.get(watchForm, 'tenantFilter').length ||
+ currentStep < 4
// Create drift management actions (excluding refresh)
const driftActions = useMemo(() => {
- if (!editMode || !router.query.id) return [];
+ if (!editMode || !router.query.id) return []
const allActions = createDriftManagementActions({
templateId: router.query.id,
- onRefresh: () => {}, // Empty function since we're filtering out refresh
+ onRefresh: () => {},
currentTenant: currentTenant,
- });
+ templateTenants: Array.isArray(watchForm?.tenantFilter) ? watchForm.tenantFilter : [],
+ excludedTenants: Array.isArray(watchForm?.excludedTenants) ? watchForm.excludedTenants : [],
+ })
// Filter out the refresh action
- return allActions.filter((action) => action.label !== "Refresh Data");
- }, [editMode, router.query.id, currentTenant]);
+ return allActions.filter((action) => action.label !== 'Refresh Data')
+ }, [
+ editMode,
+ router.query.id,
+ currentTenant,
+ watchForm?.tenantFilter,
+ watchForm?.excludedTenants,
+ ])
- const actions = [];
+ const actions = []
const steps = [
- "Set a name for the Template",
- "Assigned Template to Tenants",
- "Added Standards to Template",
- "Configured all Standards",
- ];
+ 'Set a name for the Template',
+ 'Assigned Template to Tenants',
+ 'Added Standards to Template',
+ 'Configured all Standards',
+ ]
const handleSafeNavigation = (url) => {
if (hasUnsavedChanges) {
const confirmLeave = window.confirm(
- "You have unsaved changes. Are you sure you want to leave this page?",
- );
+ 'You have unsaved changes. Are you sure you want to leave this page?'
+ )
if (confirmLeave) {
- router.push(url);
+ router.push(url)
}
} else {
- router.push(url);
+ router.push(url)
}
- };
+ }
return (
-
+
@@ -368,11 +376,11 @@ const Page = () => {
{editMode
? isDriftMode
- ? "Edit Drift Template"
- : "Edit Standards Template"
+ ? 'Edit Drift Template'
+ : 'Edit Standards Template'
: isDriftMode
- ? "Add Drift Template"
- : "Add Standards Template"}
+ ? 'Add Drift Template'
+ : 'Add Standards Template'}
{
-
-
+
+
{/* Left Column for Accordions */}
-
+
{
onDriftConflictChange={setHasDriftConflict}
onSaveSuccess={() => {
// Reset unsaved changes flag
- setHasUnsavedChanges(false);
+ setHasUnsavedChanges(false)
// Update reference for future change detection
- initialStandardsRef.current = { ...selectedStandards };
+ initialStandardsRef.current = { ...selectedStandards }
}}
/>
-
+
{/* Show accordions based on selectedStandards (which is populated by API when editing) */}
{existingTemplate.isLoading ? (
@@ -466,9 +474,9 @@ const Page = () => {
)}
- );
-};
+ )
+}
-Page.getLayout = (page) => {page};
+Page.getLayout = (page) => {page}
-export default Page;
+export default Page
From 1cb6a11cf22c446b952976f5200f5a3f3df689f5 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 11 May 2026 22:54:17 -0400
Subject: [PATCH 157/181] fix: enhance standard name retrieval logic for better
matching
---
src/pages/tenant/standards/alignment/index.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/pages/tenant/standards/alignment/index.js b/src/pages/tenant/standards/alignment/index.js
index 2d58b8b8af04..47745c6bc456 100644
--- a/src/pages/tenant/standards/alignment/index.js
+++ b/src/pages/tenant/standards/alignment/index.js
@@ -117,7 +117,10 @@ const Page = () => {
if (!standardKey) return
const standardInfo = getStandardInfo(row.standardId)
- const standardName = standardInfo?.label ?? row.standardName ?? standardKey
+ const hasExactMatch = standardsData.find((s) => s.name === row.standardId)
+ const standardName = hasExactMatch
+ ? (standardInfo?.label ?? row.standardName ?? standardKey)
+ : (row.standardName ?? standardInfo?.label ?? standardKey)
if (!groupedStandards.has(standardKey)) {
groupedStandards.set(standardKey, {
From 6cd8c632cc9273a5fd95b82dba4a99f81b442b59 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 11 May 2026 23:07:54 -0400
Subject: [PATCH 158/181] chore: linting
---
src/pages/tenant/standards/alignment/index.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/pages/tenant/standards/alignment/index.js b/src/pages/tenant/standards/alignment/index.js
index 47745c6bc456..60c05489bc24 100644
--- a/src/pages/tenant/standards/alignment/index.js
+++ b/src/pages/tenant/standards/alignment/index.js
@@ -797,7 +797,10 @@ const Page = () => {
onChange={(event, newFilter) => {
if (newFilter !== null) setByStandardTenantFilter(newFilter)
}}
- sx={{ alignSelf: { xs: 'flex-start', sm: 'center' }, '& .MuiToggleButton-root': { py: 0.25, px: 1, fontSize: '0.75rem' } }}
+ sx={{
+ alignSelf: { xs: 'flex-start', sm: 'center' },
+ '& .MuiToggleButton-root': { py: 0.25, px: 1, fontSize: '0.75rem' },
+ }}
>
All ({tenants.length})
Compliant ({compliantTenants.length})
From 4f2d4993fb2efb983bea8a38de5d527e5d87c369 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Mon, 11 May 2026 23:57:17 -0400
Subject: [PATCH 159/181] feat: enhance intune template details display
---
.../CippComponents/CippTranslations.jsx | 3 +
.../endpoint/MEM/list-templates/index.js | 261 ++++++++++++------
src/utils/get-cipp-formatting.js | 18 +-
3 files changed, 196 insertions(+), 86 deletions(-)
diff --git a/src/components/CippComponents/CippTranslations.jsx b/src/components/CippComponents/CippTranslations.jsx
index 8eb5ada15b07..d00d3f6d7f38 100644
--- a/src/components/CippComponents/CippTranslations.jsx
+++ b/src/components/CippComponents/CippTranslations.jsx
@@ -28,6 +28,9 @@ export const CippTranslations = {
ApplicationID: "Application ID",
ApplicationSecret: "Application Secret",
GUID: "GUID",
+ cippLink: "CIPP Link",
+ isDrift: "Drift Template",
+ usedInTemplates: "Used In Templates",
portal_m365: "M365",
portal_exchange: "Exchange",
portal_entra: "Entra",
diff --git a/src/pages/endpoint/MEM/list-templates/index.js b/src/pages/endpoint/MEM/list-templates/index.js
index fcfc8aa81e5a..567315975d23 100644
--- a/src/pages/endpoint/MEM/list-templates/index.js
+++ b/src/pages/endpoint/MEM/list-templates/index.js
@@ -1,161 +1,255 @@
-import { Layout as DashboardLayout } from "../../../../layouts/index.js";
-import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { PencilIcon, TrashIcon } from "@heroicons/react/24/outline";
-import { Edit, GitHub, LocalOffer, LocalOfferOutlined, CopyAll } from "@mui/icons-material";
-import CippJsonView from "../../../../components/CippFormPages/CippJSONView";
-import { ApiGetCall } from "../../../../api/ApiCall";
-import { CippPolicyImportDrawer } from "../../../../components/CippComponents/CippPolicyImportDrawer.jsx";
-import { PermissionButton } from "../../../../utils/permissions.js";
+import { Layout as DashboardLayout } from '../../../../layouts/index.js'
+import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'
+import { Edit, GitHub, LocalOffer, LocalOfferOutlined, CopyAll } from '@mui/icons-material'
+import CippJsonView from '../../../../components/CippFormPages/CippJSONView'
+import { ApiGetCall } from '../../../../api/ApiCall'
+import { CippPolicyImportDrawer } from '../../../../components/CippComponents/CippPolicyImportDrawer.jsx'
+import { PermissionButton } from '../../../../utils/permissions.js'
+import {
+ Box,
+ Chip,
+ Link,
+ Stack,
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableRow,
+ Tooltip,
+ Typography,
+} from '@mui/material'
+import NextLink from 'next/link'
const Page = () => {
- const pageTitle = "Available Endpoint Manager Templates";
- const cardButtonPermissions = ["Endpoint.MEM.ReadWrite"];
+ const pageTitle = 'Available Endpoint Manager Templates'
+ const cardButtonPermissions = ['Endpoint.MEM.ReadWrite']
const integrations = ApiGetCall({
- url: "/api/ListExtensionsConfig",
- queryKey: "Integrations",
+ url: '/api/ListExtensionsConfig',
+ queryKey: 'Integrations',
refetchOnMount: false,
refetchOnReconnect: false,
- });
+ })
const actions = [
{
- label: "Edit Template",
+ label: 'Edit Template',
link: `/endpoint/MEM/list-templates/edit?id=[GUID]`,
icon: ,
- color: "info",
+ color: 'info',
condition: (row) => row.isSynced === false,
},
{
- label: "Edit Template Name and Description",
- type: "POST",
- url: "/api/ExecEditTemplate",
+ label: 'Edit Template Name and Description',
+ type: 'POST',
+ url: '/api/ExecEditTemplate',
fields: [
{
- type: "textField",
- name: "displayName",
- label: "Display Name",
+ type: 'textField',
+ name: 'displayName',
+ label: 'Display Name',
},
{
- type: "textField",
- name: "description",
- label: "Description",
+ type: 'textField',
+ name: 'description',
+ label: 'Description',
},
],
- data: { GUID: "GUID", Type: "!IntuneTemplate" },
+ data: { GUID: 'GUID', Type: '!IntuneTemplate' },
defaultvalues: (row) => ({
displayName: row.displayName,
description: row.description,
}),
confirmText:
- "Enter the new name and description for the template. Warning: This will disconnect the template from a template library if applied.",
+ 'Enter the new name and description for the template. Warning: This will disconnect the template from a template library if applied.',
multiPost: false,
icon: ,
- color: "info",
+ color: 'info',
},
{
- label: "Clone Template",
- type: "POST",
- url: "/api/ExecCloneTemplate",
- data: { GUID: "GUID", Type: "!IntuneTemplate" },
+ label: 'Clone Template',
+ type: 'POST',
+ url: '/api/ExecCloneTemplate',
+ data: { GUID: 'GUID', Type: '!IntuneTemplate' },
confirmText:
- "Are you sure you want to clone [displayName]? Cloned template are no longer synced with a template library.",
+ 'Are you sure you want to clone [displayName]? Cloned template are no longer synced with a template library.',
multiPost: false,
icon: ,
- color: "info",
+ color: 'info',
},
{
- label: "Add to package",
- type: "POST",
- url: "/api/ExecSetPackageTag",
- data: { GUID: "GUID" },
+ label: 'Add to package',
+ type: 'POST',
+ url: '/api/ExecSetPackageTag',
+ data: { GUID: 'GUID' },
fields: [
{
- type: "textField",
- name: "Package",
- label: "Package Name",
+ type: 'textField',
+ name: 'Package',
+ label: 'Package Name',
required: true,
validators: {
- required: { value: true, message: "Package name is required" },
+ required: { value: true, message: 'Package name is required' },
},
},
],
- confirmText: "Enter the package name to assign to the selected template(s).",
+ confirmText: 'Enter the package name to assign to the selected template(s).',
multiPost: true,
icon: ,
- color: "info",
+ color: 'info',
},
{
- label: "Remove from package",
- type: "POST",
- url: "/api/ExecSetPackageTag",
- data: { GUID: "GUID", Remove: true },
- confirmText: "Are you sure you want to remove the selected template(s) from their package?",
+ label: 'Remove from package',
+ type: 'POST',
+ url: '/api/ExecSetPackageTag',
+ data: { GUID: 'GUID', Remove: true },
+ confirmText: 'Are you sure you want to remove the selected template(s) from their package?',
multiPost: true,
icon: ,
- color: "warning",
+ color: 'warning',
},
{
- label: "Save to GitHub",
- type: "POST",
- url: "/api/ExecCommunityRepo",
+ label: 'Save to GitHub',
+ type: 'POST',
+ url: '/api/ExecCommunityRepo',
icon: ,
data: {
- Action: "UploadTemplate",
- GUID: "GUID",
+ Action: 'UploadTemplate',
+ GUID: 'GUID',
},
fields: [
{
- label: "Repository",
- name: "FullName",
- type: "select",
+ label: 'Repository',
+ name: 'FullName',
+ type: 'select',
api: {
- url: "/api/ListCommunityRepos",
+ url: '/api/ListCommunityRepos',
data: {
WriteAccess: true,
},
- queryKey: "CommunityRepos-Write",
- dataKey: "Results",
- valueField: "FullName",
- labelField: "FullName",
+ queryKey: 'CommunityRepos-Write',
+ dataKey: 'Results',
+ valueField: 'FullName',
+ labelField: 'FullName',
},
multiple: false,
creatable: false,
required: true,
validators: {
- required: { value: true, message: "This field is required" },
+ required: { value: true, message: 'This field is required' },
},
},
{
- label: "Commit Message",
- placeholder: "Enter a commit message for adding this file to GitHub",
- name: "Message",
- type: "textField",
+ label: 'Commit Message',
+ placeholder: 'Enter a commit message for adding this file to GitHub',
+ name: 'Message',
+ type: 'textField',
multiline: true,
required: true,
rows: 4,
},
],
- confirmText: "Are you sure you want to save this template to the selected repository?",
+ confirmText: 'Are you sure you want to save this template to the selected repository?',
condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled,
},
{
- label: "Delete Template",
- type: "POST",
- url: "/api/RemoveIntuneTemplate",
- data: { ID: "GUID" },
- confirmText: "Do you want to delete the template?",
+ label: 'Delete Template',
+ type: 'POST',
+ url: '/api/RemoveIntuneTemplate',
+ data: { ID: 'GUID' },
+ confirmText: 'Do you want to delete the template?',
multiPost: false,
icon: ,
- color: "danger",
+ color: 'danger',
},
- ];
+ ]
const offCanvas = {
- children: (row) => ,
- size: "lg",
- };
+ children: (row) => (
+
+ {Array.isArray(row.usedInTemplates) && row.usedInTemplates.length > 0 && (
+
+
+ Used in Standards Templates
+
+
+
+
+ Template Name
+ Included In
+
+
+
+ {row.usedInTemplates.map((u, i) => (
+
+
+
+ {u.templateName ?? u.templateId}
+
+
+
+ {u.matchType === 'package' ? (
+
+ }
+ />
+
+ ) : (
+
+
+
+ )}
+
+
+ ))}
+
+
+
+ )}
+
+
+ ),
+ size: 'lg',
+ }
- const simpleColumns = ["displayName", "isSynced", "package", "description", "Type"];
+ const simpleColumns = [
+ 'displayName',
+ 'isSynced',
+ 'package',
+ 'description',
+ 'Type',
+ 'usedInTemplates',
+ ]
+
+ const filterList = [
+ {
+ filterName: 'Synced Templates',
+ value: [{ id: 'isSynced', value: 'Yes' }],
+ type: 'column',
+ },
+ {
+ filterName: 'Custom Templates',
+ value: [{ id: 'isSynced', value: 'No' }],
+ type: 'column',
+ },
+ ]
return (
<>
@@ -166,6 +260,7 @@ const Page = () => {
actions={actions}
offCanvas={offCanvas}
simpleColumns={simpleColumns}
+ filters={filterList}
queryKey="ListIntuneTemplates-table"
cardButton={
{
}
/>
>
- );
-};
+ )
+}
-Page.getLayout = (page) => {page};
-export default Page;
+Page.getLayout = (page) => {page}
+export default Page
diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js
index 9680ecaca029..5580ab4b5de0 100644
--- a/src/utils/get-cipp-formatting.js
+++ b/src/utils/get-cipp-formatting.js
@@ -11,6 +11,7 @@ import {
BarChart,
} from '@mui/icons-material'
import { Chip, Link, SvgIcon, Tooltip } from '@mui/material'
+import NextLink from 'next/link'
import { alpha } from '@mui/material/styles'
import { Box } from '@mui/system'
import { CippCopyToClipBoard } from '../components/CippComponents/CippCopyToClipboard'
@@ -273,7 +274,8 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr
}
if (cellName === 'currentDeviationsCount') {
- if (data === undefined || data === null) return isText ? 'N/A' :
+ if (data === undefined || data === null)
+ return isText ? 'N/A' :
const count = Number(data)
const color = count > 0 ? 'warning' : 'success'
const label = count > 0 ? `${count} Deviation${count !== 1 ? 's' : ''}` : 'None'
@@ -998,8 +1000,7 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr
// into human-readable form (e.g. "1 hour 23 minutes 30 seconds") across all CIPP tables.
// The try/catch below handles same-suffixed fields that are not actually ISO 8601.
// Add explicit entries below for fields that don't follow the *Duration naming convention.
- const durationArray = [
- ]
+ const durationArray = []
if (durationArray.includes(cellName) || cellName.endsWith('Duration')) {
isoDuration.setLocales(
{
@@ -1020,6 +1021,17 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr
}
}
+ // Internal CIPP navigation links
+ if ((cellName === 'cippLink') && typeof data === 'string') {
+ return isText ? (
+ data
+ ) : (
+
+ View
+
+ )
+ }
+
//if string starts with http, return a link
if (typeof data === 'string' && data.toLowerCase().startsWith('http')) {
return isText ? (
From 0a70010e2185488a67f91f8e508f67f14f0708df Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 12 May 2026 00:07:31 -0400
Subject: [PATCH 160/181] fix: update translation keys and adjust template
usage references
---
.../CippComponents/CippTranslations.jsx | 130 +++++++++---------
.../endpoint/MEM/list-templates/index.js | 18 +--
2 files changed, 72 insertions(+), 76 deletions(-)
diff --git a/src/components/CippComponents/CippTranslations.jsx b/src/components/CippComponents/CippTranslations.jsx
index d00d3f6d7f38..5975edd0b13a 100644
--- a/src/components/CippComponents/CippTranslations.jsx
+++ b/src/components/CippComponents/CippTranslations.jsx
@@ -1,66 +1,66 @@
export const CippTranslations = {
- userPrincipalName: "User Principal Name",
- displayName: "Display Name",
- mail: "Mail",
- mobilePhone: "Mobile Phone",
- officePhone: "Office Phone",
- jobTitle: "Job Title",
- department: "Department",
- surName: "Surname",
- city: "City",
- tenant: "Tenant",
- tenants: "Tenants",
- tenantFilter: "Tenant",
- showTenantInformation: "Show Tenant Information",
- refreshTenantList: "Refresh tenant list",
- tenantId: "Tenant ID",
- id: "ID",
- customerId: "Customer ID",
- street: "Street",
- technicalNotificationMails: "Technical Notification Mails",
- onPremisesSyncEnabled: "On Premises Sync Enabled",
- onPremisesLastSyncDateTime: "On Premises Last Sync Date Time",
- onPremisesLastPasswordSyncDateTime: "On Premises Last Password Sync Date Time",
- postalCode: "Postal Code",
- deleteTenant: "Delete Tenant",
- ScorePercentage: "Score",
- TenantID: "Tenant ID",
- ApplicationID: "Application ID",
- ApplicationSecret: "Application Secret",
- GUID: "GUID",
- cippLink: "CIPP Link",
- isDrift: "Drift Template",
- usedInTemplates: "Used In Templates",
- portal_m365: "M365",
- portal_exchange: "Exchange",
- portal_entra: "Entra",
- portal_teams: "Teams",
- portal_azure: "Azure",
- portal_intune: "Intune",
- portal_security: "Security",
- portal_compliance: "Compliance",
- portal_sharepoint: "SharePoint",
- portal_platform: "Power Platform",
- portal_bi: "Power BI",
- "@odata.type": "Type",
- roleDefinitionId: "GDAP Role",
- FromIP: "From IP",
- ToIP: "To IP",
- "info.logoUrl": "Logo",
- "commitmentTerm.renewalConfiguration.renewalDate": "Renewal Date",
- storageUsedInBytes: "Storage Used",
- prohibitSendReceiveQuotaInBytes: "Quota",
- ClientId: "Client ID",
- html_url: "URL",
- sendtoIntegration: "Send Notifications to Integration",
- includeTenantId: "Include Tenant ID in Notifications",
- logsToInclude: "Logs to Include in notifications",
- assignmentFilterManagementType: "Filter Type",
- microsoftSupport: "Microsoft Support",
- syndicatePartner: "Syndicate Partner",
- breadthPartner: "Breadth Partner",
- breadthPartnerDelegatedAdmin: "Breadth Partner (Delegated)",
- resellerPartnerDelegatedAdmin: "Direct Reseller",
- valueAddedResellerPartnerDelegatedAdmin: "Indirect Reseller",
- unknownFutureValue: "Unknown",
-};
+ userPrincipalName: 'User Principal Name',
+ displayName: 'Display Name',
+ mail: 'Mail',
+ mobilePhone: 'Mobile Phone',
+ officePhone: 'Office Phone',
+ jobTitle: 'Job Title',
+ department: 'Department',
+ surName: 'Surname',
+ city: 'City',
+ tenant: 'Tenant',
+ tenants: 'Tenants',
+ tenantFilter: 'Tenant',
+ showTenantInformation: 'Show Tenant Information',
+ refreshTenantList: 'Refresh tenant list',
+ tenantId: 'Tenant ID',
+ id: 'ID',
+ customerId: 'Customer ID',
+ street: 'Street',
+ technicalNotificationMails: 'Technical Notification Mails',
+ onPremisesSyncEnabled: 'On Premises Sync Enabled',
+ onPremisesLastSyncDateTime: 'On Premises Last Sync Date Time',
+ onPremisesLastPasswordSyncDateTime: 'On Premises Last Password Sync Date Time',
+ postalCode: 'Postal Code',
+ deleteTenant: 'Delete Tenant',
+ ScorePercentage: 'Score',
+ TenantID: 'Tenant ID',
+ ApplicationID: 'Application ID',
+ ApplicationSecret: 'Application Secret',
+ GUID: 'GUID',
+ cippLink: 'CIPP Link',
+ isDrift: 'Drift Template',
+ usage: 'Usage',
+ portal_m365: 'M365',
+ portal_exchange: 'Exchange',
+ portal_entra: 'Entra',
+ portal_teams: 'Teams',
+ portal_azure: 'Azure',
+ portal_intune: 'Intune',
+ portal_security: 'Security',
+ portal_compliance: 'Compliance',
+ portal_sharepoint: 'SharePoint',
+ portal_platform: 'Power Platform',
+ portal_bi: 'Power BI',
+ '@odata.type': 'Type',
+ roleDefinitionId: 'GDAP Role',
+ FromIP: 'From IP',
+ ToIP: 'To IP',
+ 'info.logoUrl': 'Logo',
+ 'commitmentTerm.renewalConfiguration.renewalDate': 'Renewal Date',
+ storageUsedInBytes: 'Storage Used',
+ prohibitSendReceiveQuotaInBytes: 'Quota',
+ ClientId: 'Client ID',
+ html_url: 'URL',
+ sendtoIntegration: 'Send Notifications to Integration',
+ includeTenantId: 'Include Tenant ID in Notifications',
+ logsToInclude: 'Logs to Include in notifications',
+ assignmentFilterManagementType: 'Filter Type',
+ microsoftSupport: 'Microsoft Support',
+ syndicatePartner: 'Syndicate Partner',
+ breadthPartner: 'Breadth Partner',
+ breadthPartnerDelegatedAdmin: 'Breadth Partner (Delegated)',
+ resellerPartnerDelegatedAdmin: 'Direct Reseller',
+ valueAddedResellerPartnerDelegatedAdmin: 'Indirect Reseller',
+ unknownFutureValue: 'Unknown',
+}
diff --git a/src/pages/endpoint/MEM/list-templates/index.js b/src/pages/endpoint/MEM/list-templates/index.js
index 567315975d23..c1c81670d8b7 100644
--- a/src/pages/endpoint/MEM/list-templates/index.js
+++ b/src/pages/endpoint/MEM/list-templates/index.js
@@ -167,7 +167,7 @@ const Page = () => {
const offCanvas = {
children: (row) => (
- {Array.isArray(row.usedInTemplates) && row.usedInTemplates.length > 0 && (
+ {Array.isArray(row.usage) && row.usage.length > 0 && (
{
- {row.usedInTemplates.map((u, i) => (
+ {row.usage.map((u, i) => (
{
/>
) : (
-
+
)}
@@ -229,14 +232,7 @@ const Page = () => {
size: 'lg',
}
- const simpleColumns = [
- 'displayName',
- 'isSynced',
- 'package',
- 'description',
- 'Type',
- 'usedInTemplates',
- ]
+ const simpleColumns = ['displayName', 'isSynced', 'package', 'description', 'Type', 'usage']
const filterList = [
{
From 63c85df03c93f0172b357ccd3be0536f075210da Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Tue, 12 May 2026 16:03:50 +0200
Subject: [PATCH 161/181] OneDrive Sharing disable
---
.../CippCards/CippRemediationCard.jsx | 1 +
.../CippOffboardingDefaultSettings.jsx | 10 +++++++
.../CippComponents/CippUserActions.jsx | 27 +++++++++++++++++++
.../CippWizard/CippWizardOffboarding.jsx | 8 +++++-
4 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/src/components/CippCards/CippRemediationCard.jsx b/src/components/CippCards/CippRemediationCard.jsx
index d864719f80e1..5641ff7e4588 100644
--- a/src/components/CippCards/CippRemediationCard.jsx
+++ b/src/components/CippCards/CippRemediationCard.jsx
@@ -60,6 +60,7 @@ export default function CippRemediationCard(props) {
Disconnect all current sessions
Remove all MFA methods for the user
Disable all inbox rules for the user
+ Disable OneDrive sharing
{
/>
),
},
+ {
+ label: "Disable OneDrive Sharing Links",
+ value: (
+
+ ),
+ },
]}
/>
>
diff --git a/src/components/CippComponents/CippUserActions.jsx b/src/components/CippComponents/CippUserActions.jsx
index a434d7925fb3..d071dc6791ed 100644
--- a/src/components/CippComponents/CippUserActions.jsx
+++ b/src/components/CippComponents/CippUserActions.jsx
@@ -20,6 +20,7 @@ import {
Shortcut,
EditAttributes,
CloudSync,
+ Share,
} from '@mui/icons-material'
import { getCippLicenseTranslation } from '../../utils/get-cipp-license-translation'
import { useSettings } from '../../hooks/use-settings.js'
@@ -654,6 +655,32 @@ export const useCippUserActions = () => {
multiPost: false,
condition: () => canWriteUser,
},
+ {
+ label: 'Set OneDrive External Sharing',
+ type: 'POST',
+ icon: ,
+ url: '/api/ExecSetOneDriveSharing',
+ data: { UPN: 'userPrincipalName' },
+ fields: [
+ {
+ type: 'autoComplete',
+ name: 'SharingCapability',
+ label: 'Sharing Level',
+ multiple: false,
+ creatable: false,
+ validators: { required: 'Please select a sharing level' },
+ options: [
+ { label: 'Disabled - No external sharing allowed', value: 'Disabled' },
+ { label: 'External User Sharing Only - Guests must sign in', value: 'ExternalUserSharingOnly' },
+ { label: 'External User and Guest Sharing - Anyone links allowed', value: 'ExternalUserAndGuestSharing' },
+ { label: 'Existing External User Sharing Only - Existing guests only', value: 'ExistingExternalUserSharingOnly' },
+ ],
+ },
+ ],
+ confirmText: 'Select the sharing level for [userPrincipalName]\'s OneDrive:',
+ multiPost: false,
+ condition: () => canWriteUser,
+ },
{
label: 'Add OneDrive Shortcut',
type: 'POST',
diff --git a/src/components/CippWizard/CippWizardOffboarding.jsx b/src/components/CippWizard/CippWizardOffboarding.jsx
index d1a651e5c3a5..18ba59b564df 100644
--- a/src/components/CippWizard/CippWizardOffboarding.jsx
+++ b/src/components/CippWizard/CippWizardOffboarding.jsx
@@ -205,6 +205,13 @@ export const CippWizardOffboarding = (props) => {
formControl={formControl}
disabled={!!deleteUser}
/>
+
{
},
}}
/>
-
Email Forwarding
From 6c55bc422c0e8d89c66dbd4de14b595babfd188f Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Tue, 12 May 2026 16:03:54 +0200
Subject: [PATCH 162/181] OneDrive Sharing disable
---
.../CippCards/CippRemediationCard.jsx | 28 +-
.../CippOffboardingDefaultSettings.jsx | 420 +++++++++---------
.../CippComponents/CippUserActions.jsx | 17 +-
.../CippWizard/CippWizardOffboarding.jsx | 3 +-
4 files changed, 239 insertions(+), 229 deletions(-)
diff --git a/src/components/CippCards/CippRemediationCard.jsx b/src/components/CippCards/CippRemediationCard.jsx
index 5641ff7e4588..4546311a60fa 100644
--- a/src/components/CippCards/CippRemediationCard.jsx
+++ b/src/components/CippCards/CippRemediationCard.jsx
@@ -1,13 +1,13 @@
-import { Button, Typography, List, ListItem, SvgIcon } from "@mui/material";
-import CippButtonCard from "./CippButtonCard"; // Adjust the import path as needed
-import { CippApiDialog } from "../CippComponents/CippApiDialog";
-import { useDialog } from "../../hooks/use-dialog";
-import { Sync } from "@mui/icons-material";
-import { ShieldCheckIcon } from "@heroicons/react/24/outline";
+import { Button, Typography, List, ListItem, SvgIcon } from '@mui/material'
+import CippButtonCard from './CippButtonCard' // Adjust the import path as needed
+import { CippApiDialog } from '../CippComponents/CippApiDialog'
+import { useDialog } from '../../hooks/use-dialog'
+import { Sync } from '@mui/icons-material'
+import { ShieldCheckIcon } from '@heroicons/react/24/outline'
export default function CippRemediationCard(props) {
- const { userPrincipalName, isFetching, userId, tenantFilter, restartProcess } = props;
- const createDialog = useDialog();
+ const { userPrincipalName, isFetching, userId, tenantFilter, restartProcess } = props
+ const createDialog = useDialog()
return (
- );
+ )
}
diff --git a/src/components/CippComponents/CippOffboardingDefaultSettings.jsx b/src/components/CippComponents/CippOffboardingDefaultSettings.jsx
index 2e406a2d9763..5b6189ad2a7c 100644
--- a/src/components/CippComponents/CippOffboardingDefaultSettings.jsx
+++ b/src/components/CippComponents/CippOffboardingDefaultSettings.jsx
@@ -1,41 +1,41 @@
-import { CippPropertyListCard } from "../../components/CippCards/CippPropertyListCard";
-import CippFormComponent from "../../components/CippComponents/CippFormComponent";
-import { Typography, Box } from "@mui/material";
+import { CippPropertyListCard } from '../../components/CippCards/CippPropertyListCard'
+import CippFormComponent from '../../components/CippComponents/CippFormComponent'
+import { Typography, Box } from '@mui/material'
export const CippOffboardingDefaultSettings = (props) => {
- const { formControl, defaultsSource = null, title = "Offboarding Default Settings" } = props;
-
+ const { formControl, defaultsSource = null, title = 'Offboarding Default Settings' } = props
+
const getSourceIndicator = () => {
// Only show the indicator if defaultsSource is explicitly provided (for wizard, not tenant config)
- if (!defaultsSource || defaultsSource === null) return null;
-
- let sourceText = "";
- let color = "text.secondary";
-
+ if (!defaultsSource || defaultsSource === null) return null
+
+ let sourceText = ''
+ let color = 'text.secondary'
+
switch (defaultsSource) {
- case "tenant":
- sourceText = "Using Tenant Defaults";
- color = "primary.main";
- break;
- case "user":
- sourceText = "Using User Defaults";
- color = "info.main";
- break;
- case "none":
+ case 'tenant':
+ sourceText = 'Using Tenant Defaults'
+ color = 'primary.main'
+ break
+ case 'user':
+ sourceText = 'Using User Defaults'
+ color = 'info.main'
+ break
+ case 'none':
default:
- sourceText = "Using Default Settings";
- color = "text.secondary";
- break;
+ sourceText = 'Using Default Settings'
+ color = 'text.secondary'
+ break
}
-
+
return (
-
+
{sourceText}
- );
- };
+ )
+ }
return (
<>
@@ -45,188 +45,188 @@ export const CippOffboardingDefaultSettings = (props) => {
showDivider={false}
title={title}
propertyItems={[
- {
- label: "Convert to Shared Mailbox",
- value: (
-
- ),
- },
- {
- label: "Remove from all groups",
- value: (
-
- ),
- },
- {
- label: "Hide from Global Address List",
- value: (
-
- ),
- },
- {
- label: "Remove Licenses",
- value: (
-
- ),
- },
- {
- label: "Cancel all calendar invites",
- value: (
-
- ),
- },
- {
- label: "Revoke all sessions",
- value: (
-
- ),
- },
- {
- label: "Remove users mailbox permissions",
- value: (
-
- ),
- },
- {
- label: "Remove users calendar permissions",
- value: (
-
- ),
- },
- {
- label: "Remove all Rules",
- value: (
-
- ),
- },
- {
- label: "Reset Password",
- value: (
-
- ),
- },
- {
- label: "Keep copy of forwarded mail in source mailbox",
- value: (
-
- ),
- },
- {
- label: "Delete user",
- value: (
-
- ),
- },
- {
- label: "Remove all Mobile Devices",
- value: (
-
- ),
- },
- {
- label: "Disable Sign in",
- value: (
-
- ),
- },
- {
- label: "Remove all MFA Devices",
- value: (
-
- ),
- },
- {
- label: "Remove Teams Phone DID",
- value: (
-
- ),
- },
- {
- label: "Clear Immutable ID",
- value: (
-
- ),
- },
- {
- label: "Disable OneDrive Sharing Links",
- value: (
-
- ),
- },
- ]}
- />
+ {
+ label: 'Convert to Shared Mailbox',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Remove from all groups',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Hide from Global Address List',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Remove Licenses',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Cancel all calendar invites',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Revoke all sessions',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Remove users mailbox permissions',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Remove users calendar permissions',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Remove all Rules',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Reset Password',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Keep copy of forwarded mail in source mailbox',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Delete user',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Remove all Mobile Devices',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Disable Sign in',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Remove all MFA Devices',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Remove Teams Phone DID',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Clear Immutable ID',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Disable OneDrive Sharing Links',
+ value: (
+
+ ),
+ },
+ ]}
+ />
>
- );
-};
+ )
+}
diff --git a/src/components/CippComponents/CippUserActions.jsx b/src/components/CippComponents/CippUserActions.jsx
index d071dc6791ed..c1af17ab13e6 100644
--- a/src/components/CippComponents/CippUserActions.jsx
+++ b/src/components/CippComponents/CippUserActions.jsx
@@ -671,13 +671,22 @@ export const useCippUserActions = () => {
validators: { required: 'Please select a sharing level' },
options: [
{ label: 'Disabled - No external sharing allowed', value: 'Disabled' },
- { label: 'External User Sharing Only - Guests must sign in', value: 'ExternalUserSharingOnly' },
- { label: 'External User and Guest Sharing - Anyone links allowed', value: 'ExternalUserAndGuestSharing' },
- { label: 'Existing External User Sharing Only - Existing guests only', value: 'ExistingExternalUserSharingOnly' },
+ {
+ label: 'External User Sharing Only - Guests must sign in',
+ value: 'ExternalUserSharingOnly',
+ },
+ {
+ label: 'External User and Guest Sharing - Anyone links allowed',
+ value: 'ExternalUserAndGuestSharing',
+ },
+ {
+ label: 'Existing External User Sharing Only - Existing guests only',
+ value: 'ExistingExternalUserSharingOnly',
+ },
],
},
],
- confirmText: 'Select the sharing level for [userPrincipalName]\'s OneDrive:',
+ confirmText: "Select the sharing level for [userPrincipalName]'s OneDrive:",
multiPost: false,
condition: () => canWriteUser,
},
diff --git a/src/components/CippWizard/CippWizardOffboarding.jsx b/src/components/CippWizard/CippWizardOffboarding.jsx
index 18ba59b564df..990cb9d35b11 100644
--- a/src/components/CippWizard/CippWizardOffboarding.jsx
+++ b/src/components/CippWizard/CippWizardOffboarding.jsx
@@ -290,7 +290,8 @@ export const CippWizardOffboarding = (props) => {
/>
{deleteUser && (
- When a user is deleted, their OneDrive is retained for 30 days by default unless otherwise configured.
+ When a user is deleted, their OneDrive is retained for 30 days by default unless
+ otherwise configured.
)}
Date: Tue, 12 May 2026 16:32:20 +0200
Subject: [PATCH 163/181] Add AlertUserReportPhising
---
src/data/alerts.json | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/data/alerts.json b/src/data/alerts.json
index 041719bf5ca9..9bce965852ab 100644
--- a/src/data/alerts.json
+++ b/src/data/alerts.json
@@ -602,5 +602,20 @@
"label": "Alert on new Check phishing extension detections",
"recommendedRunInterval": "30m",
"description": "Monitors for new phishing site detections reported by the Check browser extension. Alerts when a user visits a page that the extension flags as a potential credential phishing or AiTM attack. Requires the Check browser extension to be deployed to users."
+ },
+ {
+ "name": "UserReportedPhishing",
+ "label": "Alert on emails reported by users via Outlook Report Phishing",
+ "recommendedRunInterval": "4h",
+ "requiresInput": true,
+ "multipleInput": true,
+ "inputs": [
+ {
+ "inputType": "number",
+ "inputLabel": "Hours to look back (default: 24)",
+ "inputName": "HoursBack"
+ }
+ ],
+ "description": "Monitors for emails reported by users through Outlook's built-in Report Phishing feature. Alerts when new user-reported email threat submissions are found in Microsoft Defender. Requires ThreatSubmission.ReadWrite.All permission."
}
]
From d00ebb77ca928c0fe06f5f728a78a459b76dd911 Mon Sep 17 00:00:00 2001
From: John Duprey
Date: Tue, 12 May 2026 11:32:16 -0400
Subject: [PATCH 164/181] chore: bump version to 10.4.5
---
package.json | 2 +-
public/version.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/package.json b/package.json
index 76b7d2a5f018..673c2c56b5cd 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "cipp",
- "version": "10.4.4",
+ "version": "10.4.5",
"author": "CIPP Contributors",
"homepage": "https://cipp.app/",
"bugs": {
diff --git a/public/version.json b/public/version.json
index 0ac81ba1b0ba..a09d0fcf2ccd 100644
--- a/public/version.json
+++ b/public/version.json
@@ -1,3 +1,3 @@
{
- "version": "10.4.4"
+ "version": "10.4.5"
}
From 19c48eabf7ff5779f683b6edf33ca24d9c76dae0 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 13 May 2026 04:19:28 +0800
Subject: [PATCH 165/181] auth options
---
.../ForcedSsoMigrationDialog.jsx | 129 ++++++++++
.../CippComponents/SsoMigrationDialog.jsx | 137 +++++++++++
.../CippApiClientManagement.jsx | 61 ++++-
.../CippSettings/CippContainerManagement.jsx | 223 ++++++++++++++++++
.../CippSettings/CippSSOSettings.jsx | 202 ++++++++++++++++
.../CippSettings/CippUserManagement.jsx | 221 +++++++++++++++++
src/layouts/TabbedLayout.jsx | 25 +-
src/layouts/index.js | 4 +
.../cipp/advanced/super-admin/cipp-users.js | 33 +++
.../cipp/advanced/super-admin/container.js | 26 ++
src/pages/cipp/advanced/super-admin/sso.js | 26 ++
.../cipp/advanced/super-admin/tabOptions.json | 12 +
12 files changed, 1088 insertions(+), 11 deletions(-)
create mode 100644 src/components/CippComponents/ForcedSsoMigrationDialog.jsx
create mode 100644 src/components/CippComponents/SsoMigrationDialog.jsx
create mode 100644 src/components/CippSettings/CippContainerManagement.jsx
create mode 100644 src/components/CippSettings/CippSSOSettings.jsx
create mode 100644 src/components/CippSettings/CippUserManagement.jsx
create mode 100644 src/pages/cipp/advanced/super-admin/cipp-users.js
create mode 100644 src/pages/cipp/advanced/super-admin/container.js
create mode 100644 src/pages/cipp/advanced/super-admin/sso.js
diff --git a/src/components/CippComponents/ForcedSsoMigrationDialog.jsx b/src/components/CippComponents/ForcedSsoMigrationDialog.jsx
new file mode 100644
index 000000000000..abc303fe1797
--- /dev/null
+++ b/src/components/CippComponents/ForcedSsoMigrationDialog.jsx
@@ -0,0 +1,129 @@
+import { useCallback, useState } from 'react'
+import {
+ Alert,
+ Box,
+ CircularProgress,
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogTitle,
+ FormControlLabel,
+ Switch,
+ Typography,
+ Button,
+} from '@mui/material'
+import { ApiGetCall, ApiPostCall } from '../../api/ApiCall'
+
+export const ForcedSsoMigrationDialog = () => {
+ const [multiTenant, setMultiTenant] = useState(false)
+ const [submitted, setSubmitted] = useState(false)
+
+ const currentRole = ApiGetCall({
+ url: '/api/me',
+ queryKey: 'authmecipp',
+ })
+
+ const ssoSetup = ApiPostCall({
+ relatedQueryKeys: 'authmecipp',
+ })
+
+ const permissions = currentRole.data?.permissions || []
+ const forceSsoMigration = currentRole.data?.forceSsoMigration
+ const hasPermission = permissions.includes('CIPP.AppSettings.ReadWrite')
+
+ const open = !!(currentRole.isSuccess && hasPermission && forceSsoMigration?.status === 'pending')
+
+ const result = ssoSetup.data?.data?.Results ?? ssoSetup.data?.Results
+ const isSuccess = result?.severity === 'success'
+ const isError = ssoSetup.isError || result?.severity === 'failed'
+
+ const handleMigrate = useCallback(() => {
+ setSubmitted(true)
+ ssoSetup.mutate({
+ url: '/api/ExecSSOSetup',
+ data: {
+ Action: 'Migrate',
+ multiTenant,
+ },
+ })
+ }, [multiTenant, ssoSetup])
+
+ return (
+
+ )
+}
diff --git a/src/components/CippComponents/SsoMigrationDialog.jsx b/src/components/CippComponents/SsoMigrationDialog.jsx
new file mode 100644
index 000000000000..fe184c40cd72
--- /dev/null
+++ b/src/components/CippComponents/SsoMigrationDialog.jsx
@@ -0,0 +1,137 @@
+import { useCallback, useEffect, useState } from 'react'
+import {
+ Alert,
+ Button,
+ CircularProgress,
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogTitle,
+ FormControlLabel,
+ Switch,
+ Typography,
+} from '@mui/material'
+import { ApiGetCall, ApiPostCall } from '../../api/ApiCall'
+
+const DISMISS_KEY = 'cipp_sso_migration_dismissed'
+
+export const SsoMigrationDialog = () => {
+ const [open, setOpen] = useState(false)
+ const [multiTenant, setMultiTenant] = useState(false)
+ const [submitted, setSubmitted] = useState(false)
+
+ const currentRole = ApiGetCall({
+ url: '/api/me',
+ queryKey: 'authmecipp',
+ })
+
+ const ssoSetup = ApiPostCall({
+ relatedQueryKeys: 'authmecipp',
+ })
+
+ const permissions = currentRole.data?.permissions || []
+ const ssoMigration = currentRole.data?.ssoMigration
+ const hasPermission = permissions.includes('CIPP.AppSettings.ReadWrite')
+
+ useEffect(() => {
+ if (!currentRole.isSuccess || !hasPermission || !ssoMigration) return
+ if (ssoMigration.status !== 'none') return
+
+ const dismissed = localStorage.getItem(DISMISS_KEY)
+ if (dismissed === 'true') return
+
+ setOpen(true)
+ }, [currentRole.isSuccess, hasPermission, ssoMigration])
+
+ const handleApprove = useCallback(() => {
+ setSubmitted(true)
+ ssoSetup.mutate({
+ url: '/api/ExecSSOSetup',
+ data: {
+ Action: 'Create',
+ multiTenant,
+ },
+ })
+ }, [multiTenant, ssoSetup])
+
+ const handleDismiss = useCallback(() => {
+ localStorage.setItem(DISMISS_KEY, 'true')
+ setOpen(false)
+ }, [])
+
+ const handleClose = useCallback(() => {
+ setOpen(false)
+ }, [])
+
+ const result = ssoSetup.data?.data?.Results ?? ssoSetup.data?.Results
+ const isSuccess = result?.severity === 'success'
+ const isError = ssoSetup.isError || result?.severity === 'failed'
+
+ return (
+
+ )
+}
diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx
index 3dab6bf2bf1b..a9a2d2960ef1 100644
--- a/src/components/CippIntegrations/CippApiClientManagement.jsx
+++ b/src/components/CippIntegrations/CippApiClientManagement.jsx
@@ -1,6 +1,7 @@
import { Button, Stack, SvgIcon, Menu, MenuItem, ListItemText, Alert } from "@mui/material";
-import { useState } from "react";
+import { useState, useEffect, useMemo } from "react";
import isEqual from "lodash/isEqual";
+import { useRouter } from "next/router";
import { useForm } from "react-hook-form";
import { ApiGetCall, ApiGetCallWithPagination, ApiPostCall } from "../../api/ApiCall";
import { CippDataTable } from "../CippTable/CippDataTable";
@@ -19,6 +20,7 @@ import { CippCopyToClipBoard } from "../CippComponents/CippCopyToClipboard";
import { Box } from "@mui/system";
const CippApiClientManagement = () => {
+ const router = useRouter();
const [openAddClientDialog, setOpenAddClientDialog] = useState(false);
const [openAddExistingAppDialog, setOpenAddExistingAppDialog] = useState(false);
const [addClientRetryPayload, setAddClientRetryPayload] = useState(null);
@@ -45,6 +47,46 @@ const CippApiClientManagement = () => {
queryKey: "ApiClients",
});
+ const hasUnsavedChanges = useMemo(() => {
+ if (!azureConfig.isSuccess || !apiClients.isSuccess) return false;
+ return !isEqual(
+ (apiClients.data?.pages?.[0]?.Results || [])
+ .filter((c) => c.Enabled)
+ .map((c) => c.ClientId)
+ .sort(),
+ (azureConfig.data?.Results?.ClientIDs || []).sort()
+ );
+ }, [azureConfig.isSuccess, azureConfig.data, apiClients.isSuccess, apiClients.data]);
+
+ useEffect(() => {
+ const handleBeforeUnload = (e) => {
+ if (hasUnsavedChanges) {
+ e.preventDefault();
+ e.returnValue = "";
+ }
+ };
+
+ const handleRouteChange = (url) => {
+ if (
+ hasUnsavedChanges &&
+ !window.confirm(
+ "You have unsaved API client changes. Are you sure you want to leave this page?"
+ )
+ ) {
+ router.events.emit("routeChangeError");
+ throw "Route change aborted due to unsaved changes.";
+ }
+ };
+
+ window.addEventListener("beforeunload", handleBeforeUnload);
+ router.events.on("routeChangeStart", handleRouteChange);
+
+ return () => {
+ window.removeEventListener("beforeunload", handleBeforeUnload);
+ router.events.off("routeChangeStart", handleRouteChange);
+ };
+ }, [hasUnsavedChanges, router.events]);
+
const handleMenuOpen = (event) => {
setMenuAnchorEl(event.currentTarget);
};
@@ -54,11 +96,18 @@ const CippApiClientManagement = () => {
};
const handleSaveToAzure = () => {
+ handleMenuClose();
+ if (
+ !window.confirm(
+ "Saving to Azure will restart the CIPP instance. Changes may take up to 60 seconds to reflect. Do you want to continue?"
+ )
+ ) {
+ return;
+ }
postCall.mutate({
url: `/api/ExecApiClient?action=SaveToAzure`,
data: {},
});
- handleMenuClose();
};
const getRetryPayload = (result) => {
@@ -284,13 +333,7 @@ const CippApiClientManagement = () => {
/>
{azureConfig.isSuccess && apiClients.isSuccess && (
<>
- {!isEqual(
- (apiClients.data?.pages?.[0]?.Results || [])
- .filter((c) => c.Enabled)
- .map((c) => c.ClientId)
- .sort(),
- (azureConfig.data?.Results?.ClientIDs || []).sort()
- ) && (
+ {hasUnsavedChanges && (
You have unsaved changes. Click Actions > Save Azure Configuration to update
diff --git a/src/components/CippSettings/CippContainerManagement.jsx b/src/components/CippSettings/CippContainerManagement.jsx
new file mode 100644
index 000000000000..526051233c70
--- /dev/null
+++ b/src/components/CippSettings/CippContainerManagement.jsx
@@ -0,0 +1,223 @@
+import { useEffect } from "react";
+import {
+ Alert,
+ Button,
+ CardActions,
+ CardContent,
+ Chip,
+ Divider,
+ Skeleton,
+ Stack,
+ Typography,
+} from "@mui/material";
+import { Grid } from "@mui/system";
+import { useForm } from "react-hook-form";
+import CippFormComponent from "../CippComponents/CippFormComponent";
+import CippButtonCard from "../CippCards/CippButtonCard";
+import { ApiGetCall, ApiPostCall } from "../../api/ApiCall";
+import { CippApiResults } from "../CippComponents/CippApiResults";
+
+const channelLabels = {
+ latest: { label: "Latest (Stable)", color: "success" },
+ dev: { label: "Dev", color: "warning" },
+ nightly: { label: "Nightly", color: "info" },
+ unknown: { label: "Unknown", color: "default" },
+};
+
+export const CippContainerManagement = () => {
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: { Channel: null },
+ });
+
+ const containerStatus = ApiGetCall({
+ url: "/api/ExecContainerManagement",
+ data: { Action: "Status" },
+ queryKey: "containerStatus",
+ });
+
+ const containerAction = ApiPostCall({
+ relatedQueryKeys: ["containerStatus"],
+ });
+
+ const data = containerStatus.data?.Results;
+ const channelInfo = channelLabels[data?.CurrentChannel] ?? channelLabels.unknown;
+
+ const channelOptions = (data?.ValidChannels ?? ["latest", "dev", "nightly"]).map((c) => ({
+ label: channelLabels[c]?.label ?? c,
+ value: c,
+ }));
+
+ useEffect(() => {
+ if (containerStatus.isSuccess && data?.CurrentChannel) {
+ const current = channelOptions.find((o) => o.value === data.CurrentChannel);
+ if (current) {
+ formControl.reset({ Channel: current });
+ }
+ }
+ }, [containerStatus.isSuccess, data?.CurrentChannel]);
+
+ const handleUpdateChannel = () => {
+ const selected = formControl.getValues("Channel");
+ const channel = selected?.value ?? selected;
+ containerAction.mutate({
+ url: "/api/ExecContainerManagement",
+ data: { Action: "UpdateChannel", Channel: channel },
+ });
+ };
+
+ const handleRestart = () => {
+ containerAction.mutate({
+ url: "/api/ExecContainerManagement",
+ data: { Action: "Restart" },
+ });
+ };
+
+ return (
+
+
+
+ {containerStatus.isLoading ? (
+
+
+
+
+ ) : (
+
+ {data?.ConfiguredChannel && data.ConfiguredChannel !== data.CurrentChannel && (
+
+ A channel change is pending. Running: {data.CurrentChannel},
+ configured: {data.ConfiguredChannel}. Restart the container to
+ apply.
+
+ )}
+
+
+
+ Running Channel
+
+
+
+
+
+
+
+
+ Image Tag
+
+
+
+
+ {data?.ImageTag ?? "unknown"}
+
+
+
+
+
+ App Version
+
+
+
+
+ {data?.CurrentVersion ?? "unknown"}
+
+
+
+
+
+ Commit SHA
+
+
+
+
+ {data?.CommitSha ?? "unknown"}
+
+
+
+ {data?.CurrentImage && data.CurrentImage !== "unknown" && (
+ <>
+
+
+ Container Image
+
+
+
+
+ {data.CurrentImage}
+
+
+ >
+ )}
+
+ {data?.SiteName && (
+ <>
+
+
+ App Service
+
+
+
+ {data.SiteName}
+
+ >
+ )}
+
+
+ )}
+
+
+
+
+
+
+
+ Changing the release channel updates the container image tag. The new image will be
+ pulled on the next container restart. Switching to "Dev" or
+ "Nightly" may include unstable or untested changes.
+
+
+
+
+
+
+
+ {containerAction.isPending ? "Updating..." : "Update Channel"}
+
+
+
+
+
+
+
+ Restart the application container. This will cause a brief downtime while the container
+ restarts. If you changed the release channel, this will pull the new image.
+
+
+
+
+ Restart Container
+
+
+
+
+ );
+};
+
+export default CippContainerManagement;
diff --git a/src/components/CippSettings/CippSSOSettings.jsx b/src/components/CippSettings/CippSSOSettings.jsx
new file mode 100644
index 000000000000..e22cd1ab6edf
--- /dev/null
+++ b/src/components/CippSettings/CippSSOSettings.jsx
@@ -0,0 +1,202 @@
+import { useEffect, useState } from "react";
+import {
+ Alert,
+ Button,
+ CardActions,
+ CardContent,
+ CardHeader,
+ Chip,
+ Divider,
+ Skeleton,
+ Stack,
+ Typography,
+} from "@mui/material";
+import { useForm } from "react-hook-form";
+import { Grid } from "@mui/system";
+import CippFormComponent from "../CippComponents/CippFormComponent";
+import CippButtonCard from "../CippCards/CippButtonCard";
+import { ApiGetCall, ApiPostCall } from "../../api/ApiCall";
+import { CippApiResults } from "../CippComponents/CippApiResults";
+
+const statusLabels = {
+ none: { label: "Not Configured", color: "default" },
+ app_created: { label: "App Created", color: "info" },
+ appid_stored: { label: "App ID Stored", color: "info" },
+ secrets_stored: { label: "Secrets Stored", color: "success" },
+ complete: { label: "Complete", color: "success" },
+ error: { label: "Error", color: "error" },
+};
+
+export const CippSSOSettings = () => {
+ const [showCreate, setShowCreate] = useState(false);
+
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: { multiTenant: false },
+ });
+
+ const ssoStatus = ApiGetCall({
+ url: "/api/ExecSSOSetup",
+ data: { Action: "Status" },
+ queryKey: "SSOStatus",
+ });
+
+ const ssoAction = ApiPostCall({
+ relatedQueryKeys: ["SSOStatus", "authmecipp"],
+ });
+
+ useEffect(() => {
+ if (ssoStatus.isSuccess && ssoStatus.data?.Results) {
+ const data = ssoStatus.data.Results;
+ formControl.reset({ multiTenant: data.multiTenant ?? false });
+ setShowCreate(!data.configured);
+ }
+ }, [ssoStatus.isSuccess, ssoStatus.data]);
+
+ const handleUpdate = () => {
+ if (
+ !window.confirm(
+ "Updating SSO settings will restart the CIPP instance. Changes may take up to 60 seconds to reflect. Do you want to continue?"
+ )
+ ) {
+ return;
+ }
+ ssoAction.mutate({
+ url: "/api/ExecSSOSetup",
+ data: {
+ Action: "Update",
+ multiTenant: formControl.getValues("multiTenant"),
+ },
+ });
+ };
+
+ const handleCreate = () => {
+ ssoAction.mutate({
+ url: "/api/ExecSSOSetup",
+ data: {
+ Action: "Create",
+ multiTenant: formControl.getValues("multiTenant"),
+ },
+ });
+ };
+
+ const handleRotateSecret = () => {
+ ssoAction.mutate({
+ url: "/api/ExecSSOSetup",
+ data: { Action: "RotateSecret" },
+ });
+ };
+
+ const data = ssoStatus.data?.Results;
+ const statusInfo = statusLabels[data?.status] ?? statusLabels.none;
+
+ return (
+
+
+ {ssoStatus.isLoading ? (
+
+
+
+
+ ) : (
+
+
+
+
+ Status
+
+
+
+
+
+
+ {data?.appId && (
+ <>
+
+
+ App ID
+
+
+
+
+ {data.appId}
+
+
+ >
+ )}
+
+ {data?.createdAt && (
+ <>
+
+
+ Created
+
+
+
+
+ {new Date(data.createdAt).toLocaleString()}
+
+
+ >
+ )}
+
+ {data?.lastError && (
+ <>
+
+
+ {data.lastError}
+
+
+ >
+ )}
+
+
+
+
+
+
+
+
+ )}
+
+ {!ssoStatus.isLoading && (
+
+
+ {showCreate ? (
+
+ Create SSO App
+
+ ) : (
+ <>
+
+ Rotate Secret
+
+
+ Save Changes
+
+ >
+ )}
+
+
+ )}
+
+ );
+};
diff --git a/src/components/CippSettings/CippUserManagement.jsx b/src/components/CippSettings/CippUserManagement.jsx
new file mode 100644
index 000000000000..ab4be74c1b2b
--- /dev/null
+++ b/src/components/CippSettings/CippUserManagement.jsx
@@ -0,0 +1,221 @@
+import React, { useState } from "react";
+import {
+ Alert,
+ Box,
+ Button,
+ CardActions,
+ CardContent,
+ Chip,
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogTitle,
+ Divider,
+ Stack,
+ SvgIcon,
+ Typography,
+} from "@mui/material";
+import { Grid } from "@mui/system";
+import { useForm } from "react-hook-form";
+import { TrashIcon, PlusIcon, PencilIcon } from "@heroicons/react/24/outline";
+import { CippDataTable } from "../CippTable/CippDataTable";
+import CippFormComponent from "../CippComponents/CippFormComponent";
+import { CippApiResults } from "../CippComponents/CippApiResults";
+import { ApiGetCall, ApiPostCall } from "../../api/ApiCall";
+
+export const CippUserManagement = () => {
+ const [dialogOpen, setDialogOpen] = useState(false);
+ const [editingUser, setEditingUser] = useState(null);
+
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: { UPN: "", Roles: [] },
+ });
+
+ const rolesQuery = ApiGetCall({
+ url: "/api/ListCustomRole",
+ queryKey: "customRoleList",
+ });
+
+ const userAction = ApiPostCall({
+ relatedQueryKeys: ["cippUsersList"],
+ });
+
+ const allRoles = Array.isArray(rolesQuery.data) ? rolesQuery.data : [];
+ const roleOptions = allRoles.map((r) => ({
+ label: `${r.RoleName} (${r.Type})`,
+ value: r.RoleName,
+ }));
+
+ const openAddDialog = () => {
+ setEditingUser(null);
+ formControl.reset({ UPN: "", Roles: [] });
+ setDialogOpen(true);
+ };
+
+ const openEditDialog = (row) => {
+ setEditingUser(row);
+ const currentRoles = (row.Roles ?? []).map((r) => {
+ const match = roleOptions.find((opt) => opt.value === r);
+ return match ?? { label: r, value: r };
+ });
+ formControl.reset({ UPN: row.UPN, Roles: currentRoles });
+ setDialogOpen(true);
+ };
+
+ const handleSaveUser = (data) => {
+ const roles = Array.isArray(data.Roles) ? data.Roles.map((r) => r.value ?? r) : [data.Roles];
+ userAction.mutate(
+ {
+ url: "/api/ExecCIPPUsers",
+ data: {
+ Action: "AddUpdate",
+ UPN: data.UPN,
+ Roles: roles,
+ },
+ },
+ {
+ onSuccess: () => {
+ formControl.reset({ UPN: "", Roles: [] });
+ setEditingUser(null);
+ setDialogOpen(false);
+ },
+ }
+ );
+ };
+
+ const actions = [
+ {
+ label: "Edit Roles",
+ icon: (
+
+
+
+ ),
+ noConfirm: true,
+ customFunction: (row) => openEditDialog(row),
+ },
+ {
+ label: "Delete User",
+ icon: (
+
+
+
+ ),
+ confirmText: "Are you sure you want to remove this user's access to CIPP?",
+ url: "/api/ExecCIPPUsers",
+ type: "POST",
+ data: {
+ Action: "Delete",
+ UPN: "UPN",
+ },
+ relatedQueryKeys: ["cippUsersList"],
+ },
+ ];
+
+ const offCanvas = {
+ children: (row) => (
+
+
+
+ Email / UPN
+
+ {row.UPN}
+
+
+
+
+ Assigned Roles
+
+
+ {(row.Roles ?? []).map((role, idx) => (
+
+ ))}
+
+
+
+ ),
+ };
+
+ return (
+
+
+
+
+ }
+ onClick={openAddDialog}
+ >
+ Add User
+
+ }
+ api={{
+ url: "/api/ListCIPPUsers",
+ dataKey: "Users",
+ }}
+ queryKey="cippUsersList"
+ simpleColumns={["UPN", "Roles"]}
+ offCanvas={offCanvas}
+ />
+
+
+
+
+
+ );
+};
+
+export default CippUserManagement;
diff --git a/src/layouts/TabbedLayout.jsx b/src/layouts/TabbedLayout.jsx
index a085b528b45c..031f363c4dac 100644
--- a/src/layouts/TabbedLayout.jsx
+++ b/src/layouts/TabbedLayout.jsx
@@ -1,6 +1,8 @@
+import { useMemo } from 'react'
import { usePathname, useRouter } from 'next/navigation'
import { Box, Divider, Stack, Tab, Tabs } from '@mui/material'
import { useSearchParams } from 'next/navigation'
+import { ApiGetCall } from '../api/ApiCall'
export const TabbedLayout = (props) => {
const { tabOptions, children } = props
@@ -8,6 +10,25 @@ export const TabbedLayout = (props) => {
const pathname = usePathname()
const searchParams = useSearchParams()
+ const featureFlags = ApiGetCall({
+ url: '/api/ListFeatureFlags',
+ queryKey: 'featureFlags',
+ staleTime: 600000,
+ })
+
+ const visibleTabs = useMemo(() => {
+ if (!featureFlags.isSuccess || !Array.isArray(featureFlags.data)) return tabOptions
+
+ const disabledPages = featureFlags.data
+ .filter((flag) => flag.Enabled === false || flag.enabled === false)
+ .flatMap((flag) => flag.Pages || flag.pages || [])
+ .filter((page) => typeof page === 'string')
+
+ if (disabledPages.length === 0) return tabOptions
+
+ return tabOptions.filter((option) => !disabledPages.includes(option.path))
+ }, [tabOptions, featureFlags.isSuccess, featureFlags.data])
+
const handleTabsChange = (event, value) => {
// Preserve existing query parameters when changing tabs
const currentParams = new URLSearchParams(searchParams.toString())
@@ -16,7 +37,7 @@ export const TabbedLayout = (props) => {
router.push(newPath)
}
- const currentTab = tabOptions.find((option) => option.path === pathname)
+ const currentTab = visibleTabs.find((option) => option.path === pathname)
return (
{
},
}}
>
- {tabOptions.map((option) => (
+ {visibleTabs.map((option) => (
))}
diff --git a/src/layouts/index.js b/src/layouts/index.js
index b741d5bd0ea4..d00dc338a82d 100644
--- a/src/layouts/index.js
+++ b/src/layouts/index.js
@@ -27,6 +27,8 @@ import { CippImageCard } from '../components/CippCards/CippImageCard'
import { useDialog } from '../hooks/use-dialog'
import { nativeMenuItems } from './config'
import { CippBreadcrumbNav } from '../components/CippComponents/CippBreadcrumbNav'
+import { SsoMigrationDialog } from '../components/CippComponents/SsoMigrationDialog'
+import { ForcedSsoMigrationDialog } from '../components/CippComponents/ForcedSsoMigrationDialog'
const OnboardingWizardPage = dynamic(
() => import('../components/CippWizard/OnboardingWizardPage.jsx'),
@@ -335,6 +337,8 @@ export const Layout = (props) => {
+
+
{!setupCompleted && (
diff --git a/src/pages/cipp/advanced/super-admin/cipp-users.js b/src/pages/cipp/advanced/super-admin/cipp-users.js
new file mode 100644
index 000000000000..8fe35569ef16
--- /dev/null
+++ b/src/pages/cipp/advanced/super-admin/cipp-users.js
@@ -0,0 +1,33 @@
+import { TabbedLayout } from "../../../../layouts/TabbedLayout";
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import tabOptions from "./tabOptions";
+import CippPageCard from "../../../../components/CippCards/CippPageCard";
+import { CippUserManagement } from "../../../../components/CippSettings/CippUserManagement";
+import { CardContent, Stack, Alert } from "@mui/material";
+
+const Page = () => {
+ return (
+
+
+
+
+ Manage users who can access CIPP. Add users by their email address (UPN) and assign
+ them built-in or custom roles. Users not in this list will still be able to log in if
+ "Allow All Tenant Users" is enabled, but they will only receive default
+ (authenticated) permissions. Role resolution also considers Entra group mappings
+ configured on the CIPP Roles page.
+
+
+
+
+
+ );
+};
+
+Page.getLayout = (page) => (
+
+ {page}
+
+);
+
+export default Page;
diff --git a/src/pages/cipp/advanced/super-admin/container.js b/src/pages/cipp/advanced/super-admin/container.js
new file mode 100644
index 000000000000..d56595ac546c
--- /dev/null
+++ b/src/pages/cipp/advanced/super-admin/container.js
@@ -0,0 +1,26 @@
+import { Container } from "@mui/material";
+import { Grid } from "@mui/system";
+import { TabbedLayout } from "../../../../layouts/TabbedLayout";
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import tabOptions from "./tabOptions";
+import { CippContainerManagement } from "../../../../components/CippSettings/CippContainerManagement";
+
+const Page = () => {
+ return (
+
+
+
+
+
+
+
+ );
+};
+
+Page.getLayout = (page) => (
+
+ {page}
+
+);
+
+export default Page;
diff --git a/src/pages/cipp/advanced/super-admin/sso.js b/src/pages/cipp/advanced/super-admin/sso.js
new file mode 100644
index 000000000000..fc5b112f3f1c
--- /dev/null
+++ b/src/pages/cipp/advanced/super-admin/sso.js
@@ -0,0 +1,26 @@
+import { Container } from "@mui/material";
+import { Grid } from "@mui/system";
+import { TabbedLayout } from "../../../../layouts/TabbedLayout";
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import tabOptions from "./tabOptions";
+import { CippSSOSettings } from "../../../../components/CippSettings/CippSSOSettings";
+
+const Page = () => {
+ return (
+
+
+
+
+
+
+
+ );
+};
+
+Page.getLayout = (page) => (
+
+ {page}
+
+);
+
+export default Page;
diff --git a/src/pages/cipp/advanced/super-admin/tabOptions.json b/src/pages/cipp/advanced/super-admin/tabOptions.json
index 672df76996c6..fbccb6b73c55 100644
--- a/src/pages/cipp/advanced/super-admin/tabOptions.json
+++ b/src/pages/cipp/advanced/super-admin/tabOptions.json
@@ -22,5 +22,17 @@
{
"label": "SAM App Permissions",
"path": "/cipp/advanced/super-admin/sam-app-permissions"
+ },
+ {
+ "label": "CIPP Users",
+ "path": "/cipp/advanced/super-admin/cipp-users"
+ },
+ {
+ "label": "SSO",
+ "path": "/cipp/advanced/super-admin/sso"
+ },
+ {
+ "label": "Container Management",
+ "path": "/cipp/advanced/super-admin/container"
}
]
From 36071e5403afe1bf5bc8426e49db987ce23a0bb8 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 13 May 2026 14:20:34 +0800
Subject: [PATCH 166/181] Module updates and import changes
---
next.config.js | 1 +
package.json | 20 +-
.../CippCards/CippStandardsDialog.jsx | 10 +-
.../CippAppPermissionBuilder.jsx | 6 +-
.../CippSettings/CippContainerManagement.jsx | 247 ++++++-
.../CippStandards/CippStandardAccordion.jsx | 70 +-
.../CippStandards/CippStandardsSideBar.jsx | 22 +-
src/components/CippTable/CippDataTable.js | 3 +-
.../cipp/advanced/super-admin/container.js | 7 +-
src/pages/cipp/settings/features.js | 1 +
src/pages/tenant/standards/bpa-report/view.js | 6 +-
.../tenant/standards/templates/template.jsx | 20 +-
yarn.lock | 626 +-----------------
13 files changed, 343 insertions(+), 696 deletions(-)
diff --git a/next.config.js b/next.config.js
index 97685f34f91e..f2bc28bcd2bb 100644
--- a/next.config.js
+++ b/next.config.js
@@ -16,6 +16,7 @@ const config = {
'mui-tiptap',
'recharts',
'@react-pdf/renderer',
+ 'lodash',
],
webpackMemoryOptimizations: true,
preloadEntriesOnStart: false,
diff --git a/package.json b/package.json
index 9a98ddfc4b3a..a4402ea681b5 100644
--- a/package.json
+++ b/package.json
@@ -48,28 +48,26 @@
"@tanstack/react-table": "^8.19.2",
"@tiptap/core": "^3.4.1",
"@tiptap/extension-heading": "^3.4.1",
- "@tiptap/extension-image": "^3.20.5",
"@tiptap/extension-table": "^3.19.0",
"@tiptap/pm": "^3.22.3",
"@tiptap/react": "^3.20.5",
"@tiptap/starter-kit": "^3.20.5",
- "@uiw/react-json-view": "^2.0.0-alpha.42",
"@vvo/tzdb": "^6.198.0",
"apexcharts": "5.10.4",
"axios": "1.15.0",
"date-fns": "4.1.0",
"diff": "^8.0.3",
+ "dompurify": "^3.4.2",
"eml-parse-js": "^1.2.0-beta.0",
"export-to-csv": "^1.3.0",
"formik": "2.4.9",
"gray-matter": "4.0.3",
- "i18next": "25.8.18",
"javascript-time-ago": "^2.6.2",
"jspdf": "^4.2.0",
"jspdf-autotable": "^5.0.7",
"leaflet": "^1.9.4",
- "leaflet-defaulticon-compatibility": "^0.1.2",
"leaflet.markercluster": "^1.5.3",
+ "lodash": "^4.18.1",
"lodash.isequal": "4.5.0",
"material-react-table": "^3.0.1",
"monaco-editor": "^0.55.1",
@@ -82,15 +80,12 @@
"react": "19.2.5",
"react-apexcharts": "2.1.0",
"react-beautiful-dnd": "13.1.1",
- "react-copy-to-clipboard": "^5.1.0",
"react-dom": "19.2.5",
"react-dropzone": "15.0.0",
"react-error-boundary": "^6.1.1",
- "react-grid-layout": "^2.2.3",
"react-hook-form": "^7.72.0",
"react-hot-toast": "2.6.0",
"react-html-parser": "^2.0.2",
- "react-i18next": "16.6.5",
"react-leaflet": "5.0.0",
"react-leaflet-markercluster": "^5.0.0-rc.0",
"react-markdown": "10.1.0",
@@ -101,28 +96,23 @@
"react-syntax-highlighter": "^16.1.0",
"react-time-ago": "^7.3.3",
"react-virtuoso": "^4.18.5",
- "react-window": "^2.2.7",
"recharts": "^3.8.1",
"redux": "5.0.1",
- "redux-devtools-extension": "2.13.9",
"redux-persist": "^6.0.0",
- "redux-thunk": "3.1.0",
"rehype-raw": "^7.0.0",
"remark-gfm": "^4.0.0",
+ "remark-parse": "^11.0.0",
"simplebar": "6.3.3",
"simplebar-react": "3.3.2",
"stylis-plugin-rtl": "2.1.1",
- "typescript": "5.9.3",
+ "unified": "^11.0.5",
"yup": "1.7.1"
},
"devDependencies": {
"@svgr/webpack": "8.1.0",
- "@types/react": "^19.2.14",
- "@types/react-dom": "^19.2.3",
"eslint": "^9.39.4",
"eslint-config-next": "^16.2.3",
"eslint-config-prettier": "^10.1.8",
- "prettier": "^3.8.1",
- "prettier-eslint": "^16.4.2"
+ "prettier": "^3.8.1"
}
}
diff --git a/src/components/CippCards/CippStandardsDialog.jsx b/src/components/CippCards/CippStandardsDialog.jsx
index 86de00f07d92..0e006ef43615 100644
--- a/src/components/CippCards/CippStandardsDialog.jsx
+++ b/src/components/CippCards/CippStandardsDialog.jsx
@@ -1,5 +1,5 @@
import React, { useState } from 'react'
-import _ from 'lodash'
+import { get } from 'lodash'
import {
Dialog,
DialogTitle,
@@ -311,7 +311,7 @@ export const CippStandardsDialog = ({ open, onClose, standardsData, currentTenan
{info.addedComponent.map((component, componentIndex) => {
- const value = _.get(templateItem, component.name)
+ const value = get(templateItem, component.name)
let displayValue = 'N/A'
if (value) {
@@ -427,7 +427,7 @@ export const CippStandardsDialog = ({ open, onClose, standardsData, currentTenan
let extractedValue = null
// Try direct access first
- componentValue = _.get(config, component.name)
+ componentValue = get(config, component.name)
// If direct access fails and component name contains dots (nested structure)
if (
@@ -441,7 +441,7 @@ export const CippStandardsDialog = ({ open, onClose, standardsData, currentTenan
if (pathParts[0] === 'standards' && config.standards) {
// Remove 'standards.' prefix and try to find the value in config.standards
const nestedPath = pathParts.slice(1).join('.')
- extractedValue = _.get(config.standards, nestedPath)
+ extractedValue = get(config.standards, nestedPath)
// If still not found, try alternative nested structures
// Some standards have double nesting like: config.standards.StandardName.fieldName
@@ -452,7 +452,7 @@ export const CippStandardsDialog = ({ open, onClose, standardsData, currentTenan
) {
const standardName = pathParts[1]
const fieldPath = pathParts.slice(2).join('.')
- extractedValue = _.get(
+ extractedValue = get(
config.standards,
`${standardName}.${fieldPath}`
)
diff --git a/src/components/CippComponents/CippAppPermissionBuilder.jsx b/src/components/CippComponents/CippAppPermissionBuilder.jsx
index da386b770f91..07d21613fb84 100644
--- a/src/components/CippComponents/CippAppPermissionBuilder.jsx
+++ b/src/components/CippComponents/CippAppPermissionBuilder.jsx
@@ -37,7 +37,7 @@ import {
import { useWatch } from "react-hook-form";
import { CippCardTabPanel } from "./CippCardTabPanel";
import { CippApiResults } from "./CippApiResults";
-import _ from "lodash";
+import { isEqual } from "lodash";
import { CippCodeBlock } from "./CippCodeBlock";
import { CippOffCanvas } from "./CippOffCanvas";
import { FileDropzone } from "../file-dropzone";
@@ -388,7 +388,7 @@ const CippAppPermissionBuilder = ({
});
setExpanded("00000003-0000-0000-c000-000000000000"); // Automatically expand Microsoft Graph
}
- } else if (!_.isEqual(currentPermissions, initialPermissions)) {
+ } else if (!isEqual(currentPermissions, initialPermissions)) {
setSelectedApp([]); // Avoid redundant updates
setNewPermissions(currentPermissions);
setInitialPermissions(currentPermissions);
@@ -398,7 +398,7 @@ const CippAppPermissionBuilder = ({
initialAppIds.includes(sp.appId),
)?.sort((a, b) => a.displayName.localeCompare(b.displayName));
- if (!_.isEqual(selectedApp, newApps)) {
+ if (!isEqual(selectedApp, newApps)) {
setSelectedApp(newApps); // Prevent unnecessary updates
}
diff --git a/src/components/CippSettings/CippContainerManagement.jsx b/src/components/CippSettings/CippContainerManagement.jsx
index 526051233c70..37daf6aa3e45 100644
--- a/src/components/CippSettings/CippContainerManagement.jsx
+++ b/src/components/CippSettings/CippContainerManagement.jsx
@@ -24,24 +24,55 @@ const channelLabels = {
unknown: { label: "Unknown", color: "default" },
};
+const intervalOptions = [
+ { label: "Disabled", value: "0" },
+ { label: "Every hour", value: "1h" },
+ { label: "Every 4 hours", value: "4h" },
+ { label: "Every 12 hours", value: "12h" },
+ { label: "Every day", value: "1d" },
+];
+
+const hourOptions = Array.from({ length: 24 }, (_, i) => ({
+ label: `${i.toString().padStart(2, "0")}:00`,
+ value: String(i),
+}));
+
export const CippContainerManagement = () => {
- const formControl = useForm({
+ const channelForm = useForm({
mode: "onChange",
defaultValues: { Channel: null },
});
+ const updateSettingsForm = useForm({
+ mode: "onChange",
+ defaultValues: { CheckInterval: null, AutoUpdate: false, CheckTime: null },
+ });
+
const containerStatus = ApiGetCall({
url: "/api/ExecContainerManagement",
data: { Action: "Status" },
queryKey: "containerStatus",
});
- const containerAction = ApiPostCall({
+ const channelAction = ApiPostCall({
+ relatedQueryKeys: ["containerStatus"],
+ });
+
+ const restartAction = ApiPostCall({
+ relatedQueryKeys: ["containerStatus"],
+ });
+
+ const updateCheckAction = ApiPostCall({
+ relatedQueryKeys: ["containerStatus"],
+ });
+
+ const updateSettingsAction = ApiPostCall({
relatedQueryKeys: ["containerStatus"],
});
const data = containerStatus.data?.Results;
const channelInfo = channelLabels[data?.CurrentChannel] ?? channelLabels.unknown;
+ const updateSettings = data?.UpdateSettings;
const channelOptions = (data?.ValidChannels ?? ["latest", "dev", "nightly"]).map((c) => ({
label: channelLabels[c]?.label ?? c,
@@ -52,29 +83,75 @@ export const CippContainerManagement = () => {
if (containerStatus.isSuccess && data?.CurrentChannel) {
const current = channelOptions.find((o) => o.value === data.CurrentChannel);
if (current) {
- formControl.reset({ Channel: current });
+ channelForm.reset({ Channel: current });
}
}
}, [containerStatus.isSuccess, data?.CurrentChannel]);
+ useEffect(() => {
+ if (containerStatus.isSuccess && updateSettings) {
+ const interval = intervalOptions.find((o) => o.value === (updateSettings.CheckInterval ?? "0"));
+ const hour = updateSettings.CheckTime != null
+ ? hourOptions.find((o) => o.value === String(updateSettings.CheckTime))
+ : null;
+ updateSettingsForm.reset({
+ CheckInterval: interval ?? intervalOptions[0],
+ AutoUpdate: updateSettings.AutoUpdate ?? false,
+ CheckTime: hour ?? null,
+ });
+ }
+ }, [containerStatus.isSuccess, updateSettings?.CheckInterval, updateSettings?.AutoUpdate, updateSettings?.CheckTime]);
+
const handleUpdateChannel = () => {
- const selected = formControl.getValues("Channel");
+ const selected = channelForm.getValues("Channel");
const channel = selected?.value ?? selected;
- containerAction.mutate({
+ channelAction.mutate({
url: "/api/ExecContainerManagement",
data: { Action: "UpdateChannel", Channel: channel },
});
};
const handleRestart = () => {
- containerAction.mutate({
+ restartAction.mutate({
url: "/api/ExecContainerManagement",
data: { Action: "Restart" },
});
};
+ const handleCheckUpdate = () => {
+ updateCheckAction.mutate({
+ url: "/api/ExecContainerManagement",
+ data: { Action: "CheckUpdate" },
+ });
+ };
+
+ const handleSaveUpdateSettings = () => {
+ const interval = updateSettingsForm.getValues("CheckInterval");
+ const autoUpdate = updateSettingsForm.getValues("AutoUpdate");
+ const checkTime = updateSettingsForm.getValues("CheckTime");
+ updateSettingsAction.mutate({
+ url: "/api/ExecContainerManagement",
+ data: {
+ Action: "SaveUpdateSettings",
+ CheckInterval: interval?.value ?? interval ?? "0",
+ AutoUpdate: autoUpdate ?? false,
+ CheckTime: checkTime?.value ?? checkTime ?? null,
+ },
+ });
+ };
+
+ const truncateDigest = (digest) => {
+ if (!digest) return "—";
+ // Show algo prefix + first 12 hex chars
+ if (digest.startsWith("sha256:")) {
+ return `sha256:${digest.slice(7, 19)}…`;
+ }
+ return digest.length > 20 ? `${digest.slice(0, 20)}…` : digest;
+ };
+
return (
-
+
+
{containerStatus.isLoading ? (
@@ -91,6 +168,11 @@ export const CippContainerManagement = () => {
apply.
)}
+ {updateSettings?.UpdateAvailable && (
+
+ A container update is available. Restart the container to pull the latest image.
+
+ )}
@@ -134,6 +216,25 @@ export const CippContainerManagement = () => {
+ {updateSettings?.RunningDigest && (
+ <>
+
+
+ Container Digest
+
+
+
+
+ {truncateDigest(updateSettings.RunningDigest)}
+
+
+ >
+ )}
+
{data?.CurrentImage && data.CurrentImage !== "unknown" && (
<>
@@ -142,7 +243,10 @@ export const CippContainerManagement = () => {
-
+
{data.CurrentImage}
@@ -166,7 +270,116 @@ export const CippContainerManagement = () => {
)}
+
+
+
+
+
+
+ Configure automatic update checking. CIPP will query the container registry for a new
+ image digest and optionally restart the container to apply the update.
+ NOTE: If the container restarts for any reason the latest image version for your update channel will be pulled regardless
+
+
+
+
+
+
+
+
+
+
+
+
+ {updateSettings?.LastCheck && (
+
+ Last checked: {new Date(updateSettings.LastCheck * 1000).toLocaleString()}
+ {updateSettings.UpdateAvailable ? (
+
+ ) : (
+
+ )}
+
+ )}
+
+ {updateSettings?.RunningDigest && updateSettings?.RemoteDigest && (
+
+
+
+ Running Digest
+
+
+
+
+ {truncateDigest(updateSettings.RunningDigest)}
+
+
+
+
+ Remote Digest
+
+
+
+
+ {truncateDigest(updateSettings.RemoteDigest)}
+
+
+
+ )}
+
+
+
+
+
+
+ {updateCheckAction.isPending ? "Checking..." : "Check Now"}
+
+
+ {updateSettingsAction.isPending ? "Saving..." : "Save Settings"}
+
+
+
+
+
+
@@ -180,43 +393,49 @@ export const CippContainerManagement = () => {
name="Channel"
label="Release Channel"
options={channelOptions}
- formControl={formControl}
+ formControl={channelForm}
creatable={false}
multiple={false}
/>
-
+
- {containerAction.isPending ? "Updating..." : "Update Channel"}
+ {channelAction.isPending ? "Updating..." : "Update Channel"}
+
+
+
Restart the application container. This will cause a brief downtime while the container
restarts. If you changed the release channel, this will pull the new image.
+
+
Restart Container
-
+
+
);
};
diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx
index b42c73d6c5ba..5aed7f6950a8 100644
--- a/src/components/CippStandards/CippStandardAccordion.jsx
+++ b/src/components/CippStandards/CippStandardAccordion.jsx
@@ -32,7 +32,7 @@ import {
import { Grid } from "@mui/system";
import CippFormComponent from "../CippComponents/CippFormComponent";
import { useWatch, useFormState } from "react-hook-form";
-import _ from "lodash";
+import { get, isEqual, cloneDeep } from "lodash";
import Microsoft from "../../icons/iconly/bulk/microsoft";
import Azure from "../../icons/iconly/bulk/azure";
import Exchange from "../../icons/iconly/bulk/exchange";
@@ -168,7 +168,7 @@ const CippStandardAccordion = ({
// ALWAYS require an action for any standard to be considered configured
// The action field should be an array with at least one element
- const actionValue = _.get(values, "action");
+ const actionValue = get(values, "action");
if (!actionValue || (Array.isArray(actionValue) && actionValue.length === 0)) return false;
// Additional checks for required components
@@ -188,7 +188,7 @@ const CippStandardAccordion = ({
// Handle conditional fields
if (component.condition) {
const conditionField = component.condition.field;
- const conditionValue = _.get(values, conditionField);
+ const conditionValue = get(values, conditionField);
const compareType = component.condition.compareType || "is";
const compareValue = component.condition.compareValue;
const propertyName = component.condition.propertyName || "value";
@@ -197,10 +197,10 @@ const CippStandardAccordion = ({
if (propertyName === "value") {
switch (compareType) {
case "is":
- conditionMet = _.isEqual(conditionValue, compareValue);
+ conditionMet = isEqual(conditionValue, compareValue);
break;
case "isNot":
- conditionMet = !_.isEqual(conditionValue, compareValue);
+ conditionMet = !isEqual(conditionValue, compareValue);
break;
default:
conditionMet = false;
@@ -224,7 +224,7 @@ const CippStandardAccordion = ({
if (!isRequired) return true;
// Get field value using lodash's get to properly handle nested properties
- const fieldValue = _.get(values, component.name);
+ const fieldValue = get(values, component.name);
// Check if field has a value based on its type and multiple property
if (component.type === "autoComplete" || component.type === "select") {
@@ -263,10 +263,10 @@ const CippStandardAccordion = ({
// For each standard, get its current values and determine if it's configured
Object.keys(selectedStandards).forEach((standardName) => {
- const currentValues = _.get(watchedValues, standardName);
+ const currentValues = get(watchedValues, standardName);
if (!currentValues) return;
- initial[standardName] = _.cloneDeep(currentValues);
+ initial[standardName] = cloneDeep(currentValues);
const baseStandardName = standardName.split("[")[0];
const standard = providedStandards.find((s) => s.name === baseStandardName);
@@ -305,9 +305,9 @@ const CippStandardAccordion = ({
const updated = { ...prev };
removedKeys.forEach((k) => delete updated[k]);
addedKeys.forEach((k) => {
- const currentValues = _.get(watchedValues, k);
+ const currentValues = get(watchedValues, k);
if (currentValues) {
- updated[k] = _.cloneDeep(currentValues);
+ updated[k] = cloneDeep(currentValues);
}
});
return updated;
@@ -319,7 +319,7 @@ const CippStandardAccordion = ({
addedKeys.forEach((k) => {
const baseStandardName = k.split("[")[0];
const standard = providedStandards.find((s) => s.name === baseStandardName);
- const currentValues = _.get(watchedValues, k);
+ const currentValues = get(watchedValues, k);
if (standard && currentValues) {
updated[k] = isStandardConfigured(k, standard, currentValues);
}
@@ -333,7 +333,7 @@ const CippStandardAccordion = ({
// Save changes for a standard
const handleSave = (standardName, standard, current) => {
// Clone the current values to avoid reference issues
- const newValues = _.cloneDeep(current);
+ const newValues = cloneDeep(current);
// Update saved values
setSavedValues((prev) => ({
@@ -369,11 +369,11 @@ const CippStandardAccordion = ({
// Cancel changes for a standard
const handleCancel = (standardName) => {
// Get the last saved values
- const savedValue = _.get(savedValues, standardName);
+ const savedValue = get(savedValues, standardName);
if (!savedValue) return;
// Set the entire standard's value at once to ensure proper handling of nested objects and arrays
- formControl.setValue(standardName, _.cloneDeep(savedValue));
+ formControl.setValue(standardName, cloneDeep(savedValue));
// Find the original standard definition to get the base standard
const baseStandardName = standardName.split("[")[0];
@@ -454,7 +454,7 @@ const CippStandardAccordion = ({
Array.isArray(standard.appliesToTest) &&
standard.appliesToTest.some((testId) => testId.toLowerCase().includes(searchLower)));
- const isConfigured = _.get(configuredState, standardName);
+ const isConfigured = get(configuredState, standardName);
const matchesFilter =
filter === "all" ||
(filter === "configured" && isConfigured) ||
@@ -616,10 +616,10 @@ const CippStandardAccordion = ({
const isExpanded = expanded === standardName;
const hasAddedComponents =
standard.addedComponent && standard.addedComponent.length > 0;
- const isConfigured = _.get(configuredState, standardName);
+ const isConfigured = get(configuredState, standardName);
const disabledFeatures = standard.disabledFeatures || {};
- let selectedActions = _.get(watchedValues, `${standardName}.action`);
+ let selectedActions = get(watchedValues, `${standardName}.action`);
if (selectedActions && !Array.isArray(selectedActions)) {
selectedActions = [selectedActions];
}
@@ -628,13 +628,13 @@ const CippStandardAccordion = ({
let templateDisplayName = "";
if (standardName.startsWith("standards.IntuneTemplate")) {
// Check for TemplateList selection
- const templateList = _.get(watchedValues, `${standardName}.TemplateList`);
+ const templateList = get(watchedValues, `${standardName}.TemplateList`);
if (templateList && templateList.label) {
templateDisplayName = templateList.label;
}
// Check for TemplateList-Tags selection (takes priority)
- const templateListTags = _.get(watchedValues, `${standardName}.TemplateList-Tags`);
+ const templateListTags = get(watchedValues, `${standardName}.TemplateList-Tags`);
if (templateListTags && templateListTags.label) {
templateDisplayName = templateListTags.label;
}
@@ -642,21 +642,21 @@ const CippStandardAccordion = ({
// For multiple standards, check the first added component
const selectedTemplateName = standard.multiple
- ? _.get(watchedValues, `${standardName}.${standard.addedComponent?.[0]?.name}`)
+ ? get(watchedValues, `${standardName}.${standard.addedComponent?.[0]?.name}`)
: "";
// Build accordion title with template name if available
const accordionTitle = templateDisplayName
? `${standard.label} - ${templateDisplayName}`
- : selectedTemplateName && _.get(selectedTemplateName, "label")
- ? `${standard.label} - ${_.get(selectedTemplateName, "label")}`
+ : selectedTemplateName && get(selectedTemplateName, "label")
+ ? `${standard.label} - ${get(selectedTemplateName, "label")}`
: standard.label;
// Get current values and check if they differ from saved values
- const current = _.get(watchedValues, standardName);
- const saved = _.get(savedValues, standardName) || {};
+ const current = get(watchedValues, standardName);
+ const saved = get(savedValues, standardName) || {};
- const hasUnsaved = !_.isEqual(current, saved);
+ const hasUnsaved = !isEqual(current, saved);
// Check if all required fields are filled
const requiredFieldsFilled = current
@@ -671,7 +671,7 @@ const CippStandardAccordion = ({
// Handle conditional fields
if (component.condition) {
const conditionField = component.condition.field;
- const conditionValue = _.get(current, conditionField);
+ const conditionValue = get(current, conditionField);
const compareType = component.condition.compareType || "is";
const compareValue = component.condition.compareValue;
const propertyName = component.condition.propertyName || "value";
@@ -680,10 +680,10 @@ const CippStandardAccordion = ({
if (propertyName === "value") {
switch (compareType) {
case "is":
- conditionMet = _.isEqual(conditionValue, compareValue);
+ conditionMet = isEqual(conditionValue, compareValue);
break;
case "isNot":
- conditionMet = !_.isEqual(conditionValue, compareValue);
+ conditionMet = !isEqual(conditionValue, compareValue);
break;
default:
conditionMet = false;
@@ -705,7 +705,7 @@ const CippStandardAccordion = ({
}
// Get field value for validation using lodash's get to properly handle nested properties
- const fieldValue = _.get(current, component.name);
+ const fieldValue = get(current, component.name);
// Check if required field has a value based on its type and multiple property
if (component.type === "autoComplete" || component.type === "select") {
@@ -734,12 +734,12 @@ const CippStandardAccordion = ({
);
// Action is always required and must be an array with at least one element
- const actionValue = _.get(current, "action");
+ const actionValue = get(current, "action");
const hasAction =
actionValue && (!Array.isArray(actionValue) || actionValue.length > 0);
// Check if this standard has any validation errors
- const standardErrors = _.get(formErrors, standardName);
+ const standardErrors = get(formErrors, standardName);
const hasValidationErrors = standardErrors && Object.keys(standardErrors).length > 0;
// Allow saving if:
@@ -957,7 +957,7 @@ const CippStandardAccordion = ({
standardName={standardName}
component={component}
formControl={formControl}
- currentValue={_.get(
+ currentValue={get(
watchedValues,
`${standardName}.${component.name}`,
)}
@@ -969,7 +969,7 @@ const CippStandardAccordion = ({
standardName={standardName}
component={component}
formControl={formControl}
- currentValue={_.get(
+ currentValue={get(
watchedValues,
`${standardName}.${component.name}`,
)}
@@ -1023,7 +1023,7 @@ const CippStandardAccordion = ({
standardName={standardName}
component={component}
formControl={formControl}
- currentValue={_.get(
+ currentValue={get(
watchedValues,
`${standardName}.${component.name}`,
)}
@@ -1035,7 +1035,7 @@ const CippStandardAccordion = ({
standardName={standardName}
component={component}
formControl={formControl}
- currentValue={_.get(
+ currentValue={get(
watchedValues,
`${standardName}.${component.name}`,
)}
diff --git a/src/components/CippStandards/CippStandardsSideBar.jsx b/src/components/CippStandards/CippStandardsSideBar.jsx
index f633f9b14ed9..2cab69c42f7e 100644
--- a/src/components/CippStandards/CippStandardsSideBar.jsx
+++ b/src/components/CippStandards/CippStandardsSideBar.jsx
@@ -29,7 +29,7 @@ import CheckIcon from "@heroicons/react/24/outline/CheckIcon";
import CloseIcon from "@mui/icons-material/Close";
import { useWatch } from "react-hook-form";
import { useEffect, useState } from "react";
-import _ from "lodash";
+import { get } from "lodash";
import CippFormComponent from "../CippComponents/CippFormComponent";
import { CippFormTenantSelector } from "../CippComponents/CippFormTenantSelector";
import { CippApiDialog } from "../CippComponents/CippApiDialog";
@@ -241,14 +241,14 @@ const CippStandardsSideBar = ({
useEffect(() => {
const stepsStatus = {
- step1: !!_.get(watchForm, "templateName"),
- step2: _.get(watchForm, "tenantFilter", []).length > 0,
+ step1: !!get(watchForm, "templateName"),
+ step2: get(watchForm, "tenantFilter", []).length > 0,
step3: Object.keys(selectedStandards).length > 0,
step4:
- _.get(watchForm, "standards") &&
+ get(watchForm, "standards") &&
Object.keys(selectedStandards).length > 0 &&
Object.keys(selectedStandards).every((standardName) => {
- const standardValues = _.get(watchForm, `${standardName}`, {});
+ const standardValues = get(watchForm, `${standardName}`, {});
const standard = selectedStandards[standardName];
// Check if this standard requires an action
const hasRequiredComponents =
@@ -258,7 +258,7 @@ const CippStandardsSideBar = ({
);
const actionRequired = standard?.disabledFeatures !== undefined || hasRequiredComponents;
// Always require an action value which should be an array with at least one element
- const actionValue = _.get(standardValues, "action");
+ const actionValue = get(standardValues, "action");
return actionValue && (!Array.isArray(actionValue) || actionValue.length > 0);
}),
};
@@ -269,17 +269,17 @@ const CippStandardsSideBar = ({
// Create a local reference to the stepsStatus from the latest effect run
const stepsStatus = {
- step1: !!_.get(watchForm, "templateName"),
- step2: _.get(watchForm, "tenantFilter", []).length > 0,
+ step1: !!get(watchForm, "templateName"),
+ step2: get(watchForm, "tenantFilter", []).length > 0,
step3: Object.keys(selectedStandards).length > 0,
step4:
- _.get(watchForm, "standards") &&
+ get(watchForm, "standards") &&
Object.keys(selectedStandards).length > 0 &&
Object.keys(selectedStandards).every((standardName) => {
- const standardValues = _.get(watchForm, `${standardName}`, {});
+ const standardValues = get(watchForm, `${standardName}`, {});
const standard = selectedStandards[standardName];
// Always require an action for all standards (must be an array with at least one element)
- const actionValue = _.get(standardValues, "action");
+ const actionValue = get(standardValues, "action");
return actionValue && (!Array.isArray(actionValue) || actionValue.length > 0);
}),
};
diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js
index 253327713912..22c9bfe66ff2 100644
--- a/src/components/CippTable/CippDataTable.js
+++ b/src/components/CippTable/CippDataTable.js
@@ -341,6 +341,7 @@ export const CippDataTable = (props) => {
},
exportEnabled = true,
simpleColumns = [],
+ dataFilter,
actions,
title = 'Report',
simple = false,
@@ -476,7 +477,7 @@ export const CippDataTable = (props) => {
const nestedData = getNestedValue(page, api.dataKey)
return nestedData !== undefined ? nestedData : []
})
- setUsedData(combinedResults)
+ setUsedData(dataFilter ? combinedResults.filter(dataFilter) : combinedResults)
}
}, [
getRequestData.isSuccess,
diff --git a/src/pages/cipp/advanced/super-admin/container.js b/src/pages/cipp/advanced/super-admin/container.js
index d56595ac546c..9fb8a701174b 100644
--- a/src/pages/cipp/advanced/super-admin/container.js
+++ b/src/pages/cipp/advanced/super-admin/container.js
@@ -1,5 +1,4 @@
import { Container } from "@mui/material";
-import { Grid } from "@mui/system";
import { TabbedLayout } from "../../../../layouts/TabbedLayout";
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
import tabOptions from "./tabOptions";
@@ -8,11 +7,7 @@ import { CippContainerManagement } from "../../../../components/CippSettings/Cip
const Page = () => {
return (
-
-
-
-
-
+
);
};
diff --git a/src/pages/cipp/settings/features.js b/src/pages/cipp/settings/features.js
index 15b6fd3a111e..d630e93eb2ba 100644
--- a/src/pages/cipp/settings/features.js
+++ b/src/pages/cipp/settings/features.js
@@ -59,6 +59,7 @@ const Page = () => {
offCanvas={offCanvas}
simpleColumns={simpleColumns}
tenantInTitle={false}
+ dataFilter={(row) => !row.Hidden}
/>
);
};
diff --git a/src/pages/tenant/standards/bpa-report/view.js b/src/pages/tenant/standards/bpa-report/view.js
index f85fb633a3a3..6abd0203b330 100644
--- a/src/pages/tenant/standards/bpa-report/view.js
+++ b/src/pages/tenant/standards/bpa-report/view.js
@@ -10,7 +10,7 @@ import { useEffect, useState } from "react";
import CippButtonCard from "../../../../components/CippCards/CippButtonCard";
import { CippDataTable } from "../../../../components/CippTable/CippDataTable";
import { CippImageCard } from "../../../../components/CippCards/CippImageCard";
-import _ from "lodash";
+import { get } from "lodash";
const Page = () => {
const router = useRouter();
const { id } = router.query;
@@ -52,8 +52,8 @@ const Page = () => {
const tenantData = bpaData?.data?.Data?.find((data) => data.GUID === tenantId);
const cards = frontendFields.map((field) => {
//instead of this, use lodash to get the data for blockData
- const blockData = _.get(tenantData, field.value)
- ? _.get(tenantData, field.value)
+ const blockData = get(tenantData, field.value)
+ ? get(tenantData, field.value)
: undefined;
return {
name: field.name,
diff --git a/src/pages/tenant/standards/templates/template.jsx b/src/pages/tenant/standards/templates/template.jsx
index 630fdee6f2ce..7e442863b3f1 100644
--- a/src/pages/tenant/standards/templates/template.jsx
+++ b/src/pages/tenant/standards/templates/template.jsx
@@ -15,7 +15,7 @@ import CippStandardsSideBar from '../../../../components/CippStandards/CippStand
import { ArrowLeftIcon } from '@mui/x-date-pickers'
import { useDialog } from '../../../../hooks/use-dialog'
import { ApiGetCall } from '../../../../api/ApiCall'
-import _ from 'lodash'
+import { get } from 'lodash'
import { createDriftManagementActions } from '../../manage/driftManagementActions'
import { ActionsMenu } from '../../../../components/actions-menu'
import { useSettings } from '../../../../hooks/use-settings'
@@ -61,16 +61,16 @@ const Page = () => {
// Check if the template configuration is valid and update currentStep
useEffect(() => {
const stepsStatus = {
- step1: !!_.get(watchForm, 'templateName'),
- step2: _.get(watchForm, 'tenantFilter', []).length > 0,
+ step1: !!get(watchForm, 'templateName'),
+ step2: get(watchForm, 'tenantFilter', []).length > 0,
step3: Object.keys(selectedStandards).length > 0,
step4:
- _.get(watchForm, 'standards') &&
+ get(watchForm, 'standards') &&
Object.keys(selectedStandards).length > 0 &&
Object.keys(selectedStandards).every((standardName) => {
- const standardValues = _.get(watchForm, standardName, {})
+ const standardValues = get(watchForm, standardName, {})
// Always require an action value which should be an array with at least one element
- const actionValue = _.get(standardValues, 'action')
+ const actionValue = get(standardValues, 'action')
return actionValue && (!Array.isArray(actionValue) || actionValue.length > 0)
}),
}
@@ -299,12 +299,12 @@ const Page = () => {
// Determine if save button should be disabled based on configuration
const isSaveDisabled = isDriftMode
- ? !_.get(watchForm, 'tenantFilter') ||
- !_.get(watchForm, 'tenantFilter').length ||
+ ? !get(watchForm, 'tenantFilter') ||
+ !get(watchForm, 'tenantFilter').length ||
currentStep < 4 ||
hasDriftConflict // For drift mode, require all steps and no drift conflicts
- : !_.get(watchForm, 'tenantFilter') ||
- !_.get(watchForm, 'tenantFilter').length ||
+ : !get(watchForm, 'tenantFilter') ||
+ !get(watchForm, 'tenantFilter').length ||
currentStep < 4
// Create drift management actions (excluding refresh)
diff --git a/yarn.lock b/yarn.lock
index 847ef311f58e..acfda103a76e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1016,14 +1016,14 @@
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6"
integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==
-"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1":
+"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1":
version "4.9.1"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595"
integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==
dependencies:
eslint-visitor-keys "^3.4.3"
-"@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2", "@eslint-community/regexpp@^4.6.1":
+"@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2":
version "4.12.2"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b"
integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==
@@ -1051,21 +1051,6 @@
dependencies:
"@types/json-schema" "^7.0.15"
-"@eslint/eslintrc@^2.1.4":
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
- integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
- dependencies:
- ajv "^6.12.4"
- debug "^4.3.2"
- espree "^9.6.0"
- globals "^13.19.0"
- ignore "^5.2.0"
- import-fresh "^3.2.1"
- js-yaml "^4.1.0"
- minimatch "^3.1.2"
- strip-json-comments "^3.1.1"
-
"@eslint/eslintrc@^3.3.5":
version "3.3.5"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.5.tgz#c131793cfc1a7b96f24a83e0a8bbd4b881558c60"
@@ -1081,11 +1066,6 @@
minimatch "^3.1.5"
strip-json-comments "^3.1.1"
-"@eslint/js@8.57.1":
- version "8.57.1"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"
- integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
-
"@eslint/js@9.39.4":
version "9.39.4"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.4.tgz#a3f83bfc6fd9bf33a853dfacd0b49b398eb596c1"
@@ -1142,25 +1122,11 @@
"@humanfs/core" "^0.19.1"
"@humanwhocodes/retry" "^0.4.0"
-"@humanwhocodes/config-array@^0.13.0":
- version "0.13.0"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"
- integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
- dependencies:
- "@humanwhocodes/object-schema" "^2.0.3"
- debug "^4.3.1"
- minimatch "^3.0.5"
-
"@humanwhocodes/module-importer@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-"@humanwhocodes/object-schema@^2.0.3":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
- integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
-
"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba"
@@ -1313,13 +1279,6 @@
resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz#a81ffb00e69267cd0a1d626eaedb8a8430b2b2f8"
integrity sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==
-"@jest/schemas@^29.6.3":
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
- integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
- dependencies:
- "@sinclair/typebox" "^0.27.8"
-
"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
version "0.3.13"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
@@ -1722,7 +1681,7 @@
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
-"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+"@nodelib/fs.walk@^1.2.3":
version "1.2.8"
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
@@ -1950,11 +1909,6 @@
resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8"
integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==
-"@sinclair/typebox@^0.27.8":
- version "0.27.10"
- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.10.tgz#beefe675f1853f73676aecc915b2bd2ac98c4fc6"
- integrity sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==
-
"@sinonjs/text-encoding@^0.7.2":
version "0.7.3"
resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz#282046f03e886e352b2d5f5da5eb755e01457f3f"
@@ -2263,11 +2217,6 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.20.5.tgz#c21b2c7405f4aad7b507e36cc3394aba51ea2253"
integrity sha512-4UtpUHg8cRzxWjJUGtni5VnXYbhsO7ygf1H1pr4Rv63XMBg9lfYDeSwByIuVy9biEFP7eGEFnezzb5Zlh1btmQ==
-"@tiptap/extension-image@^3.20.5":
- version "3.20.5"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-3.20.5.tgz#90a80ce694dcda452a296d38f457bfbe72bf940d"
- integrity sha512-qxKupWKhX75Xc9GJ9Uel+KIFL9x6tb8W3RvQM1UolyJX/H7wyBO7sXp9XmKRkHZsDXRgLVbnkYBe+X83o16AIA==
-
"@tiptap/extension-italic@^3.20.5":
version "3.20.5"
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-3.20.5.tgz#c53436f05968b16eda6b8e0efbaebaf3f4587e3b"
@@ -2597,11 +2546,6 @@
resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04"
integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==
-"@types/react-dom@^19.2.3":
- version "19.2.3"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.2.3.tgz#c1e305d15a52a3e508d54dca770d202cb63abf2c"
- integrity sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==
-
"@types/react-redux@^7.1.20":
version "7.1.34"
resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.34.tgz#83613e1957c481521e6776beeac4fd506d11bd0e"
@@ -2617,7 +2561,7 @@
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044"
integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==
-"@types/react@*", "@types/react@^19.2.14":
+"@types/react@*":
version "19.2.14"
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.14.tgz#39604929b5e3957e3a6fa0001dafb17c7af70bad"
integrity sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==
@@ -2669,17 +2613,6 @@
"@typescript-eslint/visitor-keys" "8.57.1"
debug "^4.4.3"
-"@typescript-eslint/parser@^6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
- integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
- dependencies:
- "@typescript-eslint/scope-manager" "6.21.0"
- "@typescript-eslint/types" "6.21.0"
- "@typescript-eslint/typescript-estree" "6.21.0"
- "@typescript-eslint/visitor-keys" "6.21.0"
- debug "^4.3.4"
-
"@typescript-eslint/project-service@8.57.1":
version "8.57.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.57.1.tgz#16af9fe16eedbd7085e4fdc29baa73715c0c55c5"
@@ -2689,14 +2622,6 @@
"@typescript-eslint/types" "^8.57.1"
debug "^4.4.3"
-"@typescript-eslint/scope-manager@6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1"
- integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
- dependencies:
- "@typescript-eslint/types" "6.21.0"
- "@typescript-eslint/visitor-keys" "6.21.0"
-
"@typescript-eslint/scope-manager@8.57.1":
version "8.57.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.57.1.tgz#4524d7e7b420cb501807499684d435ae129aaf35"
@@ -2721,30 +2646,11 @@
debug "^4.4.3"
ts-api-utils "^2.4.0"
-"@typescript-eslint/types@6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
- integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
-
"@typescript-eslint/types@8.57.1", "@typescript-eslint/types@^8.57.1":
version "8.57.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.57.1.tgz#54b27a8a25a7b45b4f978c3f8e00c4c78f11142c"
integrity sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==
-"@typescript-eslint/typescript-estree@6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46"
- integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
- dependencies:
- "@typescript-eslint/types" "6.21.0"
- "@typescript-eslint/visitor-keys" "6.21.0"
- debug "^4.3.4"
- globby "^11.1.0"
- is-glob "^4.0.3"
- minimatch "9.0.3"
- semver "^7.5.4"
- ts-api-utils "^1.0.1"
-
"@typescript-eslint/typescript-estree@8.57.1":
version "8.57.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.1.tgz#a9fd28d4a0ec896aa9a9a7e0cead62ea24f99e76"
@@ -2770,14 +2676,6 @@
"@typescript-eslint/types" "8.57.1"
"@typescript-eslint/typescript-estree" "8.57.1"
-"@typescript-eslint/visitor-keys@6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47"
- integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
- dependencies:
- "@typescript-eslint/types" "6.21.0"
- eslint-visitor-keys "^3.4.1"
-
"@typescript-eslint/visitor-keys@8.57.1":
version "8.57.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.1.tgz#3af4f88118924d3be983d4b8ae84803f11fe4563"
@@ -2786,12 +2684,7 @@
"@typescript-eslint/types" "8.57.1"
eslint-visitor-keys "^5.0.0"
-"@uiw/react-json-view@^2.0.0-alpha.42":
- version "2.0.0-alpha.42"
- resolved "https://registry.yarnpkg.com/@uiw/react-json-view/-/react-json-view-2.0.0-alpha.42.tgz#0830cfa6767debb621c10ff71201c2302605c096"
- integrity sha512-PY7IF+zL3gYaW/FG3th0w6JG2SpkYqh/UZOgKm2XuY/UpCZ5inWlopR+pfRadRz/k/uTaOhsQa9jZnlp8QBJDA==
-
-"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0":
+"@ungap/structured-clone@^1.0.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
@@ -2908,12 +2801,12 @@ acorn-jsx@^5.3.2:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-acorn@^8.15.0, acorn@^8.9.0:
+acorn@^8.15.0:
version "8.16.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a"
integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==
-ajv@^6.12.4, ajv@^6.14.0:
+ajv@^6.14.0:
version "6.14.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a"
integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==
@@ -2923,21 +2816,6 @@ ajv@^6.12.4, ajv@^6.14.0:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
- integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
-
-ansi-regex@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
- integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
- integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==
-
ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
@@ -2945,11 +2823,6 @@ ansi-styles@^4.1.0:
dependencies:
color-convert "^2.0.1"
-ansi-styles@^5.0.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
- integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-
apexcharts@5.10.4:
version "5.10.4"
resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-5.10.4.tgz#79c9a05ab40b069f33873a1859de6cb0882ccf0e"
@@ -2994,11 +2867,6 @@ array-includes@^3.1.6, array-includes@^3.1.8, array-includes@^3.1.9:
is-string "^1.1.1"
math-intrinsics "^1.1.0"
-array-union@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
- integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-
array.prototype.findlast@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904"
@@ -3202,13 +3070,6 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
-brace-expansion@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7"
- integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
- dependencies:
- balanced-match "^1.0.0"
-
brace-expansion@^5.0.2:
version "5.0.4"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336"
@@ -3313,17 +3174,6 @@ ccount@^2.0.0:
resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
-chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
chalk@^4.0.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
@@ -3404,11 +3254,6 @@ commander@^7.2.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-common-tags@^1.8.2:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
- integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==
-
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -3424,13 +3269,6 @@ convert-source-map@^2.0.0:
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
-copy-to-clipboard@^3.3.3:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
- integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==
- dependencies:
- toggle-selection "^1.0.6"
-
core-js-compat@^3.48.0:
version "3.49.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.49.0.tgz#06145447d92f4aaf258a0c44f24b47afaeaffef6"
@@ -3474,7 +3312,7 @@ crelt@^1.0.0:
resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72"
integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==
-cross-spawn@^7.0.2, cross-spawn@^7.0.6:
+cross-spawn@^7.0.6:
version "7.0.6"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
@@ -3720,7 +3558,7 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.3:
+debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.4.0, debug@^4.4.3:
version "4.4.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
@@ -3816,18 +3654,6 @@ diff@^8.0.3:
resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.4.tgz#4f5baf3188b9b2431117b962eb20ba330fadf696"
integrity sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==
-dir-glob@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
- integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
- dependencies:
- path-type "^4.0.0"
-
-dlv@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
- integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
-
doctrine@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
@@ -3835,13 +3661,6 @@ doctrine@^2.1.0:
dependencies:
esutils "^2.0.2"
-doctrine@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
- integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
- dependencies:
- esutils "^2.0.2"
-
dom-helpers@^5.0.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
@@ -3905,6 +3724,13 @@ dompurify@^3.3.1:
optionalDependencies:
"@types/trusted-types" "^2.0.7"
+dompurify@^3.4.2:
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.2.tgz#f0ff81be682c485505097ba8195a058d8f575218"
+ integrity sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA==
+ optionalDependencies:
+ "@types/trusted-types" "^2.0.7"
+
domutils@^1.5.1:
version "1.7.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
@@ -4137,11 +3963,6 @@ escalade@^3.2.0:
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
-escape-string-regexp@^1.0.2:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
-
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
@@ -4282,14 +4103,6 @@ eslint-plugin-react@^7.37.0:
string.prototype.matchall "^4.0.12"
string.prototype.repeat "^1.0.0"
-eslint-scope@^7.1.1, eslint-scope@^7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
- integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
- dependencies:
- esrecurse "^4.3.0"
- estraverse "^5.2.0"
-
eslint-scope@^8.4.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82"
@@ -4298,7 +4111,7 @@ eslint-scope@^8.4.0:
esrecurse "^4.3.0"
estraverse "^5.2.0"
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+eslint-visitor-keys@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
@@ -4313,50 +4126,6 @@ eslint-visitor-keys@^5.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be"
integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==
-eslint@^8.57.1:
- version "8.57.1"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9"
- integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
- dependencies:
- "@eslint-community/eslint-utils" "^4.2.0"
- "@eslint-community/regexpp" "^4.6.1"
- "@eslint/eslintrc" "^2.1.4"
- "@eslint/js" "8.57.1"
- "@humanwhocodes/config-array" "^0.13.0"
- "@humanwhocodes/module-importer" "^1.0.1"
- "@nodelib/fs.walk" "^1.2.8"
- "@ungap/structured-clone" "^1.2.0"
- ajv "^6.12.4"
- chalk "^4.0.0"
- cross-spawn "^7.0.2"
- debug "^4.3.2"
- doctrine "^3.0.0"
- escape-string-regexp "^4.0.0"
- eslint-scope "^7.2.2"
- eslint-visitor-keys "^3.4.3"
- espree "^9.6.1"
- esquery "^1.4.2"
- esutils "^2.0.2"
- fast-deep-equal "^3.1.3"
- file-entry-cache "^6.0.1"
- find-up "^5.0.0"
- glob-parent "^6.0.2"
- globals "^13.19.0"
- graphemer "^1.4.0"
- ignore "^5.2.0"
- imurmurhash "^0.1.4"
- is-glob "^4.0.0"
- is-path-inside "^3.0.3"
- js-yaml "^4.1.0"
- json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.4.1"
- lodash.merge "^4.6.2"
- minimatch "^3.1.2"
- natural-compare "^1.4.0"
- optionator "^0.9.3"
- strip-ansi "^6.0.1"
- text-table "^0.2.0"
-
eslint@^9.39.4:
version "9.39.4"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.4.tgz#855da1b2e2ad66dc5991195f35e262bcec8117b5"
@@ -4406,21 +4175,12 @@ espree@^10.0.1, espree@^10.4.0:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^4.2.1"
-espree@^9.3.1, espree@^9.6.0, espree@^9.6.1:
- version "9.6.1"
- resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
- integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
- dependencies:
- acorn "^8.9.0"
- acorn-jsx "^5.3.2"
- eslint-visitor-keys "^3.4.1"
-
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esquery@^1.4.0, esquery@^1.4.2, esquery@^1.5.0:
+esquery@^1.5.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d"
integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==
@@ -4491,11 +4251,6 @@ fast-diff@1.1.2:
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==
-fast-equals@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7"
- integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==
-
fast-equals@^5.3.3:
version "5.4.0"
resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.4.0.tgz#b60073b8764f27029598447f05773c7534ba7f1e"
@@ -4512,17 +4267,6 @@ fast-glob@3.3.1:
merge2 "^1.3.0"
micromatch "^4.0.4"
-fast-glob@^3.2.9:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
- integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
- dependencies:
- "@nodelib/fs.stat" "^2.0.2"
- "@nodelib/fs.walk" "^1.2.3"
- glob-parent "^5.1.2"
- merge2 "^1.3.0"
- micromatch "^4.0.8"
-
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -4566,13 +4310,6 @@ fflate@^0.8.1:
resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea"
integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==
-file-entry-cache@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
- integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
- dependencies:
- flat-cache "^3.0.4"
-
file-entry-cache@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
@@ -4607,15 +4344,6 @@ find-up@^5.0.0:
locate-path "^6.0.0"
path-exists "^4.0.0"
-flat-cache@^3.0.4:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
- integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
- dependencies:
- flatted "^3.2.9"
- keyv "^4.5.3"
- rimraf "^3.0.2"
-
flat-cache@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
@@ -4686,11 +4414,6 @@ formik@2.4.9:
tiny-warning "^1.0.2"
tslib "^2.0.0"
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-
function-bind@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
@@ -4777,30 +4500,11 @@ glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
-glob@^7.1.3:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
- integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.1.1"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
globals@16.4.0:
version "16.4.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-16.4.0.tgz#574bc7e72993d40cf27cf6c241f324ee77808e51"
integrity sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==
-globals@^13.19.0:
- version "13.24.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
- integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
- dependencies:
- type-fest "^0.20.2"
-
globals@^14.0.0:
version "14.0.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
@@ -4814,18 +4518,6 @@ globalthis@^1.0.4:
define-properties "^1.2.1"
gopd "^1.0.1"
-globby@^11.1.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
- integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
- dependencies:
- array-union "^2.1.0"
- dir-glob "^3.0.1"
- fast-glob "^3.2.9"
- ignore "^5.2.0"
- merge2 "^1.4.1"
- slash "^3.0.0"
-
goober@^2.1.16:
version "2.1.18"
resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.18.tgz#b72d669bd24d552d441638eee26dfd5716ea6442"
@@ -4836,11 +4528,6 @@ gopd@^1.0.1, gopd@^1.2.0:
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
-graphemer@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
- integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
-
gray-matter@4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798"
@@ -4851,13 +4538,6 @@ gray-matter@4.0.3:
section-matter "^1.0.0"
strip-bom-string "^1.0.0"
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==
- dependencies:
- ansi-regex "^2.0.0"
-
has-bigints@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe"
@@ -5039,13 +4719,6 @@ hsl-to-rgb-for-reals@^1.1.0:
resolved "https://registry.yarnpkg.com/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz#e1eb23f6b78016e3722431df68197e6dcdc016d9"
integrity sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==
-html-parse-stringify@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2"
- integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==
- dependencies:
- void-elements "3.1.0"
-
html-tokenize@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/html-tokenize/-/html-tokenize-2.0.1.tgz#c3b2ea6e2837d4f8c06693393e9d2a12c960be5f"
@@ -5092,13 +4765,6 @@ hyphen@^1.6.4:
resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.14.1.tgz#c9fbd5e1af750f00d5034aa37f6ec41f95ffed93"
integrity sha512-kvL8xYl5QMTh+LwohVN72ciOxC0OEV79IPdJSTwEXok9y9QHebXGdFgrED4sWfiax/ODx++CAMk3hMy4XPJPOw==
-i18next@25.8.18:
- version "25.8.18"
- resolved "https://registry.yarnpkg.com/i18next/-/i18next-25.8.18.tgz#51863b65bc42e3525271f2680ebbf7d150ff53cc"
- integrity sha512-lzY5X83BiL5AP77+9DydbrqkQHFN9hUzWGjqjLpPcp5ZOzuu1aSoKaU3xbBLSjWx9dAzW431y+d+aogxOZaKRA==
- dependencies:
- "@babel/runtime" "^7.28.6"
-
ignore@^5.2.0:
version "5.3.2"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
@@ -5132,20 +4798,7 @@ imurmurhash@^0.1.4:
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-indent-string@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
- integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -5349,11 +5002,6 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-is-path-inside@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
- integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
-
is-plain-obj@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
@@ -5567,7 +5215,7 @@ jspdf@^4.2.0:
object.assign "^4.1.4"
object.values "^1.1.6"
-keyv@^4.5.3, keyv@^4.5.4:
+keyv@^4.5.4:
version "4.5.4"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
@@ -5591,11 +5239,6 @@ language-tags@^1.0.9:
dependencies:
language-subtag-registry "^0.3.20"
-leaflet-defaulticon-compatibility@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.2.tgz#f5e1a5841aeab9d1682d17887348855a741b3c2a"
- integrity sha512-IrKagWxkTwzxUkFIumy/Zmo3ksjuAu3zEadtOuJcKzuXaD76Gwvg2Z1mLyx7y52ykOzM8rAH5ChBs4DnfdGa6Q==
-
leaflet.markercluster@^1.5.3:
version "1.5.3"
resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz#9cdb52a4eab92671832e1ef9899669e80efc4056"
@@ -5671,18 +5314,10 @@ lodash@^4.17.21, lodash@^4.17.4:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a"
integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==
-loglevel-colored-level-prefix@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e"
- integrity sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==
- dependencies:
- chalk "^1.1.3"
- loglevel "^1.4.1"
-
-loglevel@^1.4.1:
- version "1.9.2"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08"
- integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==
+lodash@^4.18.1:
+ version "4.18.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c"
+ integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==
longest-streak@^3.0.0:
version "3.1.0"
@@ -5965,7 +5600,7 @@ memoize-one@^6.0.0:
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
-merge2@^1.3.0, merge2@^1.4.1:
+merge2@^1.3.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
@@ -6243,7 +5878,7 @@ micromark@^4.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
-micromatch@^4.0.4, micromatch@^4.0.8:
+micromatch@^4.0.4:
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
@@ -6263,13 +5898,6 @@ mime-types@^2.1.12:
dependencies:
mime-db "1.52.0"
-minimatch@9.0.3:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
minimatch@^10.2.2:
version "10.2.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde"
@@ -6277,7 +5905,7 @@ minimatch@^10.2.2:
dependencies:
brace-expansion "^5.0.2"
-minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@^3.1.5:
+minimatch@^3.1.2, minimatch@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e"
integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==
@@ -6483,13 +6111,6 @@ object.values@^1.1.6, object.values@^1.2.1:
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
-once@^1.3.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
optionator@^0.9.3:
version "0.9.4"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
@@ -6602,11 +6223,6 @@ path-exists@^4.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-
path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@@ -6666,38 +6282,11 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-prettier-eslint@^16.4.2:
- version "16.4.2"
- resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-16.4.2.tgz#d84bff76e0ce4a6ffccacacb2474f7635ca8ac35"
- integrity sha512-vtJAQEkaN8fW5QKl08t7A5KCjlZuDUNeIlr9hgolMS5s3+uzbfRHDwaRnzrdqnY2YpHDmeDS/8zY0MKQHXJtaA==
- dependencies:
- "@typescript-eslint/parser" "^6.21.0"
- common-tags "^1.8.2"
- dlv "^1.1.3"
- eslint "^8.57.1"
- indent-string "^4.0.0"
- lodash.merge "^4.6.2"
- loglevel-colored-level-prefix "^1.0.0"
- prettier "^3.5.3"
- pretty-format "^29.7.0"
- require-relative "^0.8.7"
- tslib "^2.8.1"
- vue-eslint-parser "^9.4.3"
-
-prettier@^3.5.3, prettier@^3.8.1:
+prettier@^3.8.1:
version "3.8.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.1.tgz#edf48977cf991558f4fcbd8a3ba6015ba2a3a173"
integrity sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==
-pretty-format@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
- integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
- dependencies:
- "@jest/schemas" "^29.6.3"
- ansi-styles "^5.0.0"
- react-is "^18.0.0"
-
prismjs@^1.30.0:
version "1.30.0"
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9"
@@ -6708,7 +6297,7 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-prop-types@15.8.1, prop-types@15.x, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
+prop-types@15.8.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -6966,14 +6555,6 @@ react-colorful@^5.6.1:
resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b"
integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==
-react-copy-to-clipboard@^5.1.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.1.tgz#76adb8be03616e99692fcf3f762365ed3fb5ff16"
- integrity sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg==
- dependencies:
- copy-to-clipboard "^3.3.3"
- prop-types "^15.8.1"
-
react-dom@19.2.5:
version "19.2.5"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.5.tgz#b8768b10837d0b8e9ca5b9e2d58dff3d880ea25e"
@@ -6981,14 +6562,6 @@ react-dom@19.2.5:
dependencies:
scheduler "^0.27.0"
-react-draggable@^4.4.6, react-draggable@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.5.0.tgz#0b274ccb6965fcf97ed38fcf7e3cc223bc48cdf5"
- integrity sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==
- dependencies:
- clsx "^2.1.1"
- prop-types "^15.8.1"
-
react-dropzone@15.0.0:
version "15.0.0"
resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-15.0.0.tgz#bd03c7c2b14fe4ea9db1a9c74502b85339f2e505"
@@ -7008,18 +6581,6 @@ react-fast-compare@^2.0.1:
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
-react-grid-layout@^2.2.3:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-2.2.3.tgz#6daf24b8c48448af617238520dd233a9375e2f16"
- integrity sha512-OAEJHBxmfuxQfVtZwRzmsokijGlBgzYIJ7MUlLk/VSa43SaGzu15w5D0P2RDrfX5EvP9POMbL6bFrai/huDzbQ==
- dependencies:
- clsx "^2.1.1"
- fast-equals "^4.0.3"
- prop-types "^15.8.1"
- react-draggable "^4.4.6"
- react-resizable "^3.1.3"
- resize-observer-polyfill "^1.5.1"
-
react-hook-form@^7.72.0:
version "7.72.0"
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.72.0.tgz#995a655b894249fd8798f36383e43f55ed66ae25"
@@ -7040,15 +6601,6 @@ react-html-parser@^2.0.2:
dependencies:
htmlparser2 "^3.9.0"
-react-i18next@16.6.5:
- version "16.6.5"
- resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-16.6.5.tgz#6fd2b0b82ed6988b87e51487d53c28954994d361"
- integrity sha512-bfdJhmyjQCXtU9CLcGMn3a1V5/jTeUX/x29cOhlS1Lolm/epRtm24gnYsltxArsc29ow3klSJEijjfYXc5kxjg==
- dependencies:
- "@babel/runtime" "^7.29.2"
- html-parse-stringify "^3.0.1"
- use-sync-external-store "^1.6.0"
-
react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@@ -7059,11 +6611,6 @@ react-is@^17.0.2:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-react-is@^18.0.0:
- version "18.3.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
- integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
-
react-is@^19.2.3:
version "19.2.4"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.4.tgz#a080758243c572ccd4a63386537654298c99d135"
@@ -7150,14 +6697,6 @@ react-redux@^7.2.0:
prop-types "^15.7.2"
react-is "^17.0.2"
-react-resizable@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.1.3.tgz#b8c3f8aeffb7b0b2c2306bfc7a742462e58125fb"
- integrity sha512-liJBNayhX7qA4tBJiBD321FDhJxgGTJ07uzH5zSORXoE8h7PyEZ8mLqmosST7ppf6C4zUsbd2gzDMmBCfFp9Lw==
- dependencies:
- prop-types "15.x"
- react-draggable "^4.5.0"
-
react-syntax-highlighter@^16.1.0:
version "16.1.1"
resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-16.1.1.tgz#928459855d375f5cfc8e646071e20d541cebcb52"
@@ -7199,11 +6738,6 @@ react-virtuoso@^4.18.5:
resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-4.18.5.tgz#450108e585c7a1124b995c7ea3cf367ed4857631"
integrity sha512-QDyNjyNEuurZG67SOmzYyxEkQYSyGmAMixOI6M15L/Q4CF39EgG+88y6DgZRo0q7rmy0HPx3Fj90I8/tPdnRCQ==
-react-window@^2.2.7:
- version "2.2.7"
- resolved "https://registry.yarnpkg.com/react-window/-/react-window-2.2.7.tgz#7f3d31695d4323701b7e80dfc9bbbe1d4a0c160f"
- integrity sha512-SH5nvfUQwGHYyriDUAOt7wfPsfG9Qxd6OdzQxl5oQ4dsSsUicqQvjV7dR+NqZ4coY0fUn3w1jnC5PwzIUWEg5w==
-
react@19.2.5:
version "19.2.5"
resolved "https://registry.yarnpkg.com/react/-/react-19.2.5.tgz#c888ab8b8ef33e2597fae8bdb2d77edbdb42858b"
@@ -7258,17 +6792,12 @@ recharts@^3.8.1:
use-sync-external-store "^1.2.2"
victory-vendor "^37.0.2"
-redux-devtools-extension@2.13.9:
- version "2.13.9"
- resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7"
- integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==
-
redux-persist@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8"
integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==
-redux-thunk@3.1.0, redux-thunk@^3.1.0:
+redux-thunk@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3"
integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==
@@ -7428,21 +6957,11 @@ require-from-string@^2.0.2:
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
-require-relative@^0.8.7:
- version "0.8.7"
- resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
- integrity sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==
-
reselect@5.1.1, reselect@^5.1.0, reselect@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e"
integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==
-resize-observer-polyfill@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
- integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
-
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -7489,13 +7008,6 @@ rgbcolor@^1.0.1:
resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d"
integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==
-rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
rope-sequence@^1.3.0:
version "1.3.4"
resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425"
@@ -7574,7 +7086,7 @@ semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.6, semver@^7.5.4, semver@^7.7.1, semver@^7.7.3:
+semver@^7.7.1, semver@^7.7.3:
version "7.7.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"
integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
@@ -7725,11 +7237,6 @@ simplebar@6.3.3:
dependencies:
simplebar-core "^1.3.2"
-slash@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
- integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
snake-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
@@ -7876,20 +7383,6 @@ stringify-entities@^4.0.0:
character-entities-html4 "^2.0.0"
character-entities-legacy "^3.0.0"
-strip-ansi@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
strip-bom-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
@@ -7938,11 +7431,6 @@ stylis@4.2.0:
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
- integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==
-
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -7990,11 +7478,6 @@ text-segmentation@^1.0.3:
dependencies:
utrie "^1.0.2"
-text-table@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
- integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
-
through2@~0.4.1:
version "0.4.2"
resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b"
@@ -8043,11 +7526,6 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
-toggle-selection@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
- integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==
-
toposort@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
@@ -8063,11 +7541,6 @@ trough@^2.0.0:
resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f"
integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==
-ts-api-utils@^1.0.1:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
- integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
-
ts-api-utils@^2.4.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1"
@@ -8083,7 +7556,7 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.0, tslib@^2.8.1:
+tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.0:
version "2.8.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
@@ -8095,11 +7568,6 @@ type-check@^0.4.0, type-check@~0.4.0:
dependencies:
prelude-ls "^1.2.1"
-type-fest@^0.20.2:
- version "0.20.2"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
- integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
-
type-fest@^2.19.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
@@ -8160,11 +7628,6 @@ typescript-eslint@^8.46.0:
"@typescript-eslint/typescript-estree" "8.57.1"
"@typescript-eslint/utils" "8.57.1"
-typescript@5.9.3:
- version "5.9.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
- integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
-
uc.micro@^2.0.0, uc.micro@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee"
@@ -8224,7 +7687,7 @@ unicode-trie@^2.0.0:
pako "^0.2.5"
tiny-inflate "^1.0.0"
-unified@^11.0.0:
+unified@^11.0.0, unified@^11.0.5:
version "11.0.5"
resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1"
integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==
@@ -8397,24 +7860,6 @@ vite-compatible-readable-stream@^3.6.1:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
-void-elements@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
- integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==
-
-vue-eslint-parser@^9.4.3:
- version "9.4.3"
- resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz#9b04b22c71401f1e8bca9be7c3e3416a4bde76a8"
- integrity sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==
- dependencies:
- debug "^4.3.4"
- eslint-scope "^7.1.1"
- eslint-visitor-keys "^3.3.0"
- espree "^9.3.1"
- esquery "^1.4.0"
- lodash "^4.17.21"
- semver "^7.3.6"
-
w3c-keyname@^2.2.0:
version "2.2.8"
resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5"
@@ -8490,11 +7935,6 @@ word-wrap@^1.2.5:
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
xtend@~2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
From c0946109c91b31ee9699ba7dbf377a8f299b1a55 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 13 May 2026 16:47:42 +0800
Subject: [PATCH 167/181] Fix bulk mailbox rule changes
---
.../administration/users/user/exchange.jsx | 30 +++++++++++--------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/src/pages/identity/administration/users/user/exchange.jsx b/src/pages/identity/administration/users/user/exchange.jsx
index 1d01f699c5a7..1336a740612d 100644
--- a/src/pages/identity/administration/users/user/exchange.jsx
+++ b/src/pages/identity/administration/users/user/exchange.jsx
@@ -947,13 +947,15 @@ const Page = () => {
icon: ,
url: "/api/ExecSetMailboxRule",
customDataformatter: (row, action, formData) => {
- return {
- ruleId: row?.Identity,
+ const rows = Array.isArray(row) ? row : [row];
+ const result = rows.map((r) => ({
+ ruleId: r?.Identity,
userPrincipalName: graphUserRequest.data?.[0]?.userPrincipalName,
- ruleName: row?.Name,
+ ruleName: r?.Name,
Enable: true,
tenantFilter: userSettingsDefaults.currentTenant,
- };
+ }));
+ return Array.isArray(row) ? result : result[0];
},
condition: (row) => row && !row.Enabled,
confirmText: "Are you sure you want to enable this mailbox rule?",
@@ -965,13 +967,15 @@ const Page = () => {
icon: ,
url: "/api/ExecSetMailboxRule",
customDataformatter: (row, action, formData) => {
- return {
- ruleId: row?.Identity,
+ const rows = Array.isArray(row) ? row : [row];
+ const result = rows.map((r) => ({
+ ruleId: r?.Identity,
userPrincipalName: graphUserRequest.data?.[0]?.userPrincipalName,
- ruleName: row?.Name,
+ ruleName: r?.Name,
Disable: true,
tenantFilter: userSettingsDefaults.currentTenant,
- };
+ }));
+ return Array.isArray(row) ? result : result[0];
},
condition: (row) => row && row.Enabled,
confirmText: "Are you sure you want to disable this mailbox rule?",
@@ -983,12 +987,14 @@ const Page = () => {
icon: ,
url: "/api/ExecRemoveMailboxRule",
customDataformatter: (row, action, formData) => {
- return {
- ruleId: row?.Identity,
- ruleName: row?.Name,
+ const rows = Array.isArray(row) ? row : [row];
+ const result = rows.map((r) => ({
+ ruleId: r?.Identity,
+ ruleName: r?.Name,
userPrincipalName: graphUserRequest.data?.[0]?.userPrincipalName,
tenantFilter: userSettingsDefaults.currentTenant,
- };
+ }));
+ return Array.isArray(row) ? result : result[0];
},
confirmText: "Are you sure you want to remove this mailbox rule?",
multiPost: false,
From 72d8658d5ded1c0f47fddeacb3a384c5cbf0e38d Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 13 May 2026 17:06:41 +0800
Subject: [PATCH 168/181] Add Apps and SP to universal search
---
.../CippCards/CippUniversalSearchV2.jsx | 29 +++++++++++++++++++
src/components/bulk-actions-menu.js | 4 ++-
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/src/components/CippCards/CippUniversalSearchV2.jsx b/src/components/CippCards/CippUniversalSearchV2.jsx
index 28a53f35ef82..070396f0a56e 100644
--- a/src/components/CippCards/CippUniversalSearchV2.jsx
+++ b/src/components/CippCards/CippUniversalSearchV2.jsx
@@ -348,6 +348,16 @@ export const CippUniversalSearchV2 = React.forwardRef(
router.push(
`/identity/administration/groups/group?groupId=${itemData.id}&tenantFilter=${tenantDomain}`,
);
+ } else if (searchType === "Applications") {
+ if (match.Type === "Apps") {
+ router.push(
+ `/tenant/administration/applications/app-registration?appId=${itemData.appId || itemData.id}&tenantFilter=${tenantDomain}`,
+ );
+ } else {
+ router.push(
+ `/tenant/administration/applications/enterprise-app?spId=${itemData.id}&tenantFilter=${tenantDomain}`,
+ );
+ }
} else if (searchType === "Pages") {
router.push(match.path, undefined, { shallow: true });
}
@@ -389,6 +399,11 @@ export const CippUniversalSearchV2 = React.forwardRef(
icon: "Group",
onClick: () => handleTypeChange("Groups"),
},
+ {
+ label: "Applications",
+ icon: "Apps",
+ onClick: () => handleTypeChange("Applications"),
+ },
{
label: "BitLocker",
icon: "FilePresent",
@@ -730,6 +745,20 @@ const Results = ({
)}
>
)}
+ {searchType === "Applications" && (
+ <>
+ {itemData.appId && (
+
+ {highlightMatch(itemData.appId || "")}
+
+ )}
+ {itemData.publisherName && (
+
+ {highlightMatch(itemData.publisherName || "")}
+
+ )}
+ >
+ )}
;
case "Group":
return ;
+ case "Apps":
+ return ;
default:
return null;
}
From ba196dde059e16c53ee182a7d49eff8292073e27 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Wed, 13 May 2026 12:07:00 +0200
Subject: [PATCH 169/181] expand side nav slightly for ux
---
.claude/worktrees/blissful-golick-d405ab | 1 +
src/layouts/side-nav.js | 174 +++++++++++------------
2 files changed, 88 insertions(+), 87 deletions(-)
create mode 160000 .claude/worktrees/blissful-golick-d405ab
diff --git a/.claude/worktrees/blissful-golick-d405ab b/.claude/worktrees/blissful-golick-d405ab
new file mode 160000
index 000000000000..0710355e2ada
--- /dev/null
+++ b/.claude/worktrees/blissful-golick-d405ab
@@ -0,0 +1 @@
+Subproject commit 0710355e2adac37fffe4c7eef48d6f2c3a04993d
diff --git a/src/layouts/side-nav.js b/src/layouts/side-nav.js
index ec43e9fb857f..5b01ee107331 100644
--- a/src/layouts/side-nav.js
+++ b/src/layouts/side-nav.js
@@ -1,64 +1,64 @@
-import { useState, useRef, useEffect } from "react";
-import { usePathname } from "next/navigation";
-import PropTypes from "prop-types";
-import { Box, Divider, Drawer, Stack } from "@mui/material";
-import { SideNavItem } from "./side-nav-item";
-import { SideNavBookmarks } from "./side-nav-bookmarks";
-import { ApiGetCall } from "../api/ApiCall.jsx";
-import { CippSponsor } from "../components/CippComponents/CippSponsor";
-import { useSettings } from "../hooks/use-settings";
-
-const SIDE_NAV_WIDTH = 270;
-const SIDE_NAV_COLLAPSED_WIDTH = 73; // icon size + padding + border right
-const TOP_NAV_HEIGHT = 64;
+import { useState, useRef, useEffect } from 'react'
+import { usePathname } from 'next/navigation'
+import PropTypes from 'prop-types'
+import { Box, Divider, Drawer, Stack } from '@mui/material'
+import { SideNavItem } from './side-nav-item'
+import { SideNavBookmarks } from './side-nav-bookmarks'
+import { ApiGetCall } from '../api/ApiCall.jsx'
+import { CippSponsor } from '../components/CippComponents/CippSponsor'
+import { useSettings } from '../hooks/use-settings'
+
+const SIDE_NAV_WIDTH = 290
+const SIDE_NAV_COLLAPSED_WIDTH = 73 // icon size + padding + border right
+const TOP_NAV_HEIGHT = 64
const isPathPrefix = (pathname, itemPath) => {
- if (!pathname || !itemPath) return false;
- if (pathname === itemPath) return true;
+ if (!pathname || !itemPath) return false
+ if (pathname === itemPath) return true
// Root "/" maps to /dashboardv2 under the hood
- if (itemPath === "/") return pathname.startsWith("/dashboardv2");
- return pathname.startsWith(itemPath + "/") || pathname.startsWith(itemPath + "?");
-};
+ if (itemPath === '/') return pathname.startsWith('/dashboardv2')
+ return pathname.startsWith(itemPath + '/') || pathname.startsWith(itemPath + '?')
+}
const markOpenItems = (items, pathname) => {
return items.map((item) => {
- const checkPath = !!(item.path && pathname);
- const exactMatch = checkPath ? pathname === item.path : false;
- const partialMatch = checkPath ? isPathPrefix(pathname, item.path) : false;
+ const checkPath = !!(item.path && pathname)
+ const exactMatch = checkPath ? pathname === item.path : false
+ const partialMatch = checkPath ? isPathPrefix(pathname, item.path) : false
- let openImmediately = exactMatch;
- let newItems = item.items || [];
+ let openImmediately = exactMatch
+ let newItems = item.items || []
if (newItems.length > 0) {
- newItems = markOpenItems(newItems, pathname);
- const childOpen = newItems.some((child) => child.openImmediately);
- openImmediately = openImmediately || childOpen || exactMatch; // Ensure parent opens if child is open
+ newItems = markOpenItems(newItems, pathname)
+ const childOpen = newItems.some((child) => child.openImmediately)
+ openImmediately = openImmediately || childOpen || exactMatch // Ensure parent opens if child is open
} else {
- openImmediately = openImmediately || partialMatch; // Leaf items open on partial match
+ openImmediately = openImmediately || partialMatch // Leaf items open on partial match
}
return {
...item,
items: newItems,
openImmediately,
- };
- });
-};
+ }
+ })
+}
-const renderItems = ({ collapse = false, depth = 0, items, pathname, category = "" }) =>
+const renderItems = ({ collapse = false, depth = 0, items, pathname, category = '' }) =>
items.reduce(
(acc, item) => reduceChildRoutes({ acc, collapse, depth, item, pathname, category }),
[]
- );
+ )
const reduceChildRoutes = ({ acc, collapse, depth, item, pathname, category }) => {
- const checkPath = !!(item.path && pathname);
- const exactMatch = checkPath && pathname === item.path;
- const partialMatch = checkPath ? isPathPrefix(pathname, item.path) : false;
+ const checkPath = !!(item.path && pathname)
+ const exactMatch = checkPath && pathname === item.path
+ const partialMatch = checkPath ? isPathPrefix(pathname, item.path) : false
- const hasChildren = item.items && item.items.length > 0;
- const isActive = exactMatch || (partialMatch && !hasChildren);
- const currentCategory = depth === 0 && item.type === "header" ? item.title : category;
+ const hasChildren = item.items && item.items.length > 0
+ const isActive = exactMatch || (partialMatch && !hasChildren)
+ const currentCategory = depth === 0 && item.type === 'header' ? item.title : category
if (hasChildren) {
acc.push(
@@ -80,7 +80,7 @@ const reduceChildRoutes = ({ acc, collapse, depth, item, pathname, category }) =
component="ul"
spacing={0.5}
sx={{
- listStyle: "none",
+ listStyle: 'none',
m: 0,
p: 0,
}}
@@ -94,7 +94,7 @@ const reduceChildRoutes = ({ acc, collapse, depth, item, pathname, category }) =
})}
- );
+ )
} else {
acc.push(
- );
+ )
}
- return acc;
-};
+ return acc
+}
export const SideNav = (props) => {
- const { items, onPin, pinned = false } = props;
- const pathname = usePathname();
- const [hovered, setHovered] = useState(false);
- const collapse = !(pinned || hovered);
- const { data: profile } = ApiGetCall({ url: "/api/me", queryKey: "authmecipp" });
- const settings = useSettings();
- const showSidebarBookmarks = settings.bookmarkSidebar !== false;
- const paperRef = useRef(null);
+ const { items, onPin, pinned = false } = props
+ const pathname = usePathname()
+ const [hovered, setHovered] = useState(false)
+ const collapse = !(pinned || hovered)
+ const { data: profile } = ApiGetCall({ url: '/api/me', queryKey: 'authmecipp' })
+ const settings = useSettings()
+ const showSidebarBookmarks = settings.bookmarkSidebar !== false
+ const paperRef = useRef(null)
// Intercept wheel events on the side nav to fully isolate scroll.
// preventDefault stops wheel events from reaching the main content,
// and manual scrollTop has no momentum so it stops instantly when the cursor leaves.
// Uses RAF-based easing to smooth out discrete mouse wheel jumps.
useEffect(() => {
- const el = paperRef.current;
- if (!el) return;
+ const el = paperRef.current
+ if (!el) return
- let targetScrollTop = el.scrollTop;
- let animating = false;
+ let targetScrollTop = el.scrollTop
+ let animating = false
const animate = () => {
- const diff = targetScrollTop - el.scrollTop;
+ const diff = targetScrollTop - el.scrollTop
if (Math.abs(diff) < 0.5) {
- el.scrollTop = targetScrollTop;
- animating = false;
- return;
+ el.scrollTop = targetScrollTop
+ animating = false
+ return
}
- el.scrollTop += diff * 0.25;
- requestAnimationFrame(animate);
- };
+ el.scrollTop += diff * 0.25
+ requestAnimationFrame(animate)
+ }
const handleWheel = (e) => {
- e.preventDefault();
- const maxScroll = el.scrollHeight - el.clientHeight;
- targetScrollTop = Math.max(0, Math.min(maxScroll, targetScrollTop + e.deltaY));
+ e.preventDefault()
+ const maxScroll = el.scrollHeight - el.clientHeight
+ targetScrollTop = Math.max(0, Math.min(maxScroll, targetScrollTop + e.deltaY))
if (!animating) {
- animating = true;
- requestAnimationFrame(animate);
+ animating = true
+ requestAnimationFrame(animate)
}
- };
+ }
- el.addEventListener("wheel", handleWheel, { passive: false });
- return () => el.removeEventListener("wheel", handleWheel);
- }, []);
+ el.addEventListener('wheel', handleWheel, { passive: false })
+ return () => el.removeEventListener('wheel', handleWheel)
+ }, [])
// Preprocess items to mark which should be open
- const processedItems = markOpenItems(items, pathname);
+ const processedItems = markOpenItems(items, pathname)
return (
<>
{profile?.clientPrincipal && profile?.clientPrincipal?.userRoles?.length > 2 && (
@@ -174,13 +174,13 @@ export const SideNav = (props) => {
onMouseEnter: () => setHovered(true),
onMouseLeave: () => setHovered(false),
sx: {
- backgroundColor: "background.default",
+ backgroundColor: 'background.default',
height: `calc(100% - ${TOP_NAV_HEIGHT}px)`,
- overflowX: "hidden",
- overflowY: "auto",
- scrollbarGutter: "stable",
+ overflowX: 'hidden',
+ overflowY: 'auto',
+ scrollbarGutter: 'stable',
top: TOP_NAV_HEIGHT,
- transition: "width 250ms ease-in-out",
+ transition: 'width 250ms ease-in-out',
width: collapse ? SIDE_NAV_COLLAPSED_WIDTH : SIDE_NAV_WIDTH,
zIndex: (theme) => theme.zIndex.appBar - 100,
},
@@ -189,9 +189,9 @@ export const SideNav = (props) => {
@@ -199,7 +199,7 @@ export const SideNav = (props) => {
component="ul"
sx={{
flexGrow: 1,
- listStyle: "none",
+ listStyle: 'none',
m: 0,
p: 0,
}}
@@ -218,24 +218,24 @@ export const SideNav = (props) => {
items: processedItems,
pathname,
})}
- {" "}
+ {' '}
{/* Add this closing tag */}
{profile?.clientPrincipal && (
)}
- {" "}
+ {' '}
{/* Closing tag for the parent Box */}
)}
>
- );
-};
+ )
+}
SideNav.propTypes = {
onPin: PropTypes.func,
pinned: PropTypes.bool,
-};
+}
From 52a4763907144faafc70dfeb439c705679e24dc0 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Wed, 13 May 2026 18:52:11 +0800
Subject: [PATCH 170/181] Nice CA policy editor and template creator/editor
---
.../CippComponents/CippCAPolicyBuilder.jsx | 1121 +++++++++++++++++
.../CippTemplateFieldRenderer.jsx | 46 +-
src/data/conditionalAccessSchema.json | 664 ++++++++++
.../tenant/conditional/list-policies/edit.jsx | 75 ++
.../tenant/conditional/list-policies/index.js | 7 +
.../conditional/list-template/create.jsx | 39 +
.../tenant/conditional/list-template/edit.jsx | 42 +-
.../tenant/conditional/list-template/index.js | 11 +-
8 files changed, 1998 insertions(+), 7 deletions(-)
create mode 100644 src/components/CippComponents/CippCAPolicyBuilder.jsx
create mode 100644 src/data/conditionalAccessSchema.json
create mode 100644 src/pages/tenant/conditional/list-policies/edit.jsx
create mode 100644 src/pages/tenant/conditional/list-template/create.jsx
diff --git a/src/components/CippComponents/CippCAPolicyBuilder.jsx b/src/components/CippComponents/CippCAPolicyBuilder.jsx
new file mode 100644
index 000000000000..c7999edff6c6
--- /dev/null
+++ b/src/components/CippComponents/CippCAPolicyBuilder.jsx
@@ -0,0 +1,1121 @@
+import React, { useMemo, useCallback, useEffect } from "react";
+import {
+ Typography,
+ Divider,
+ Alert,
+ Chip,
+ Accordion,
+ AccordionSummary,
+ AccordionDetails,
+ Stack,
+ Tooltip,
+ IconButton,
+ Paper,
+} from "@mui/material";
+import { Grid } from "@mui/system";
+import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
+import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined";
+import WarningAmberIcon from "@mui/icons-material/WarningAmber";
+import { useWatch } from "react-hook-form";
+import CippFormComponent from "./CippFormComponent";
+import { CippFormCondition } from "./CippFormCondition";
+import caSchema from "../../data/conditionalAccessSchema.json";
+import gdapRoles from "../../data/GDAPRoles.json";
+
+/**
+ * CippCAPolicyBuilder — A schema-driven Conditional Access policy builder.
+ *
+ * Renders structured form sections for every CA policy property, with:
+ * - Enum validation via the Microsoft Graph v1.0 schema
+ * - Friendly labels sourced from the schema's enumLabels
+ * - Licence requirement indicators (P2 for risk fields)
+ * - Grant control constraint validation (block vs other controls)
+ * - Accordion sections matching the Entra admin centre layout
+ *
+ * Props:
+ * formControl — react-hook-form's return from useForm()
+ * existingPolicy — optional JSON to pre-populate fields (edit mode)
+ * disabled — optional boolean to make the form read-only
+ */
+
+// ---------------------------------------------------------------------------
+// Helpers
+// ---------------------------------------------------------------------------
+
+/** Resolve a $ref path like "#/$defs/conditionalAccessUsers" in the schema */
+function resolveRef(ref) {
+ if (!ref) return null;
+ const path = ref.replace("#/", "").split("/");
+ let node = caSchema;
+ for (const segment of path) {
+ node = node?.[segment];
+ }
+ return node ?? null;
+}
+
+/** Convert schema enum + enumLabels into {label, value} options */
+function enumToOptions(schemaProp) {
+ if (!schemaProp) return [];
+ const enumVals = schemaProp.items?.enum ?? schemaProp.enum ?? [];
+ const labels = schemaProp.items?.enumLabels ?? schemaProp.enumLabels ?? {};
+ return enumVals.map((v) => ({
+ label: labels[v] ?? v,
+ value: v,
+ }));
+}
+
+/** Build options from wellKnownValues or wellKnownDirectoryRoles */
+function wellKnownToOptions(values) {
+ if (!values) return [];
+ return Object.entries(values).map(([id, label]) => ({ label: `${label}`, value: id }));
+}
+
+/** Build special-value options from schema metadata */
+function specialValueOptions(schemaProp) {
+ const vals = schemaProp?.specialValues ?? [];
+ const labels = schemaProp?.specialValueLabels ?? {};
+ return vals.map((v) => ({ label: labels[v] ?? v, value: v }));
+}
+
+// ---------------------------------------------------------------------------
+// Sub-section renderers
+// ---------------------------------------------------------------------------
+
+function SectionHeader({ title, description, requiresLicense, icon }) {
+ return (
+
+ {icon}
+ {title}
+ {requiresLicense && (
+
+
+
+ )}
+ {description && (
+
+
+
+
+
+ )}
+
+ );
+}
+
+// ---------------------------------------------------------------------------
+// Users & Groups section
+// ---------------------------------------------------------------------------
+function UsersSection({ formControl, disabled, prefix = "conditions.users" }) {
+ const schemaDef = resolveRef("#/$defs/conditionalAccessUsers");
+ const guestSchema = resolveRef("#/$defs/conditionalAccessGuestsOrExternalUsers");
+ const roleOptions = useMemo(
+ () => gdapRoles.map((r) => ({ label: r.Name, value: r.ObjectId })),
+ []
+ );
+ const specialUserOpts = useMemo(
+ () => specialValueOptions(schemaDef?.properties?.includeUsers),
+ [schemaDef]
+ );
+
+ const guestTypeOpts = useMemo(() => {
+ const prop = guestSchema?.properties?.guestOrExternalUserTypes;
+ const flags = prop?.flagEnum ?? [];
+ const labels = prop?.flagEnumLabels ?? {};
+ return flags
+ .filter((f) => f !== "none")
+ .map((f) => ({ label: labels[f] ?? f, value: f }));
+ }, [guestSchema]);
+
+ return (
+
+ {/* Include users */}
+
+
+
+ {/* Exclude users */}
+
+
+
+ {/* Include groups */}
+
+
+
+ {/* Exclude groups */}
+
+
+
+ {/* Include roles */}
+
+
+
+ {/* Exclude roles */}
+
+
+
+
+ {/* Guest / External User Exclusions */}
+
+
+
+ Exclude Guests or External Users
+
+
+
+
+
+
+ Select one or more external user types to exclude from this policy.
+
+
+
+
+
+
+ Choose whether the exclusion applies to all external tenants or specific ones. Only
+ relevant for external user types (not internal guests).
+
+
+
+
+
+
+ Enter the tenant IDs to scope this exclusion to (e.g. your partner tenant ID for
+ service provider exclusion).
+
+
+
+
+
+ );
+}
+
+// ---------------------------------------------------------------------------
+// Applications section
+// ---------------------------------------------------------------------------
+function ApplicationsSection({ formControl, disabled, prefix = "conditions.applications" }) {
+ const schemaDef = resolveRef("#/$defs/conditionalAccessApplications");
+ const includeAppOpts = useMemo(
+ () => specialValueOptions(schemaDef?.properties?.includeApplications),
+ [schemaDef]
+ );
+ const userActionOpts = useMemo(
+ () => enumToOptions(schemaDef?.properties?.includeUserActions),
+ [schemaDef]
+ );
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+// ---------------------------------------------------------------------------
+// Conditions (client apps, platforms, locations, risk, etc.)
+// ---------------------------------------------------------------------------
+function ConditionsSection({ formControl, disabled }) {
+ const condSchema = resolveRef("#/$defs/conditionalAccessConditionSet");
+ const platformSchema = resolveRef("#/$defs/conditionalAccessPlatforms");
+ const authFlowSchema = resolveRef("#/$defs/conditionalAccessAuthenticationFlows");
+
+ const clientAppOpts = useMemo(
+ () => enumToOptions(condSchema?.properties?.clientAppTypes),
+ [condSchema]
+ );
+ const includePlatOpts = useMemo(
+ () => enumToOptions(platformSchema?.properties?.includePlatforms),
+ [platformSchema]
+ );
+ const excludePlatOpts = useMemo(
+ () => enumToOptions(platformSchema?.properties?.excludePlatforms),
+ [platformSchema]
+ );
+ const signInRiskOpts = useMemo(
+ () => enumToOptions(condSchema?.properties?.signInRiskLevels),
+ [condSchema]
+ );
+ const userRiskOpts = useMemo(
+ () => enumToOptions(condSchema?.properties?.userRiskLevels),
+ [condSchema]
+ );
+ const spRiskOpts = useMemo(
+ () => enumToOptions(condSchema?.properties?.servicePrincipalRiskLevels),
+ [condSchema]
+ );
+ const insiderRiskOpts = useMemo(
+ () => enumToOptions(condSchema?.properties?.insiderRiskLevels),
+ [condSchema]
+ );
+ const authFlowOpts = useMemo(
+ () => enumToOptions(authFlowSchema?.properties?.transferMethods),
+ [authFlowSchema]
+ );
+
+ const locationSchema = resolveRef("#/$defs/conditionalAccessLocations");
+ const includeLocOpts = useMemo(
+ () => specialValueOptions(locationSchema?.properties?.includeLocations),
+ [locationSchema]
+ );
+ const excludeLocOpts = useMemo(
+ () => specialValueOptions(locationSchema?.properties?.excludeLocations),
+ [locationSchema]
+ );
+
+ return (
+
+ {/* Client app types */}
+
+
+
+
+ {/* Platforms */}
+
+
+
+
+
+
+
+ {/* Locations */}
+
+
+
+
+
+
+
+ {/* Device filter */}
+
+
+
+ Device Filter
+
+
+
+
+
+
+
+
+
+
+ {/* Risk levels */}
+
+
+
+
+ Risk Levels
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Insider risk */}
+
+
+
+
+ {/* Auth flows */}
+
+
+
+
+ );
+}
+
+// ---------------------------------------------------------------------------
+// Grant Controls section
+// ---------------------------------------------------------------------------
+function GrantControlsSection({ formControl, disabled }) {
+ const grantSchema = resolveRef("#/$defs/conditionalAccessGrantControls");
+ const operatorOpts = useMemo(
+ () => enumToOptions(grantSchema?.properties?.operator),
+ [grantSchema]
+ );
+ const builtInOpts = useMemo(
+ () => enumToOptions(grantSchema?.properties?.builtInControls),
+ [grantSchema]
+ );
+
+ const authStrengthSchema = resolveRef("#/$defs/authenticationStrengthPolicy");
+ const authStrengthOpts = useMemo(
+ () => wellKnownToOptions(authStrengthSchema?.properties?.id?.wellKnownValues),
+ [authStrengthSchema]
+ );
+
+ const selectedControls = useWatch({
+ control: formControl.control,
+ name: "grantControls.builtInControls",
+ });
+
+ const hasBlock = useMemo(() => {
+ if (!selectedControls) return false;
+ return (Array.isArray(selectedControls) ? selectedControls : [selectedControls]).some(
+ (c) => (c?.value ?? c) === "block"
+ );
+ }, [selectedControls]);
+
+ return (
+
+
+
+
+
+
+ {hasBlock && (
+
+ "Block access" cannot be combined with other grant controls. All other
+ selections will be ignored by Entra ID.
+
+ )}
+
+
+
+
+
+
+
+
+ );
+}
+
+// ---------------------------------------------------------------------------
+// Session Controls section
+// ---------------------------------------------------------------------------
+function SessionControlsSection({ formControl, disabled }) {
+ const casSchema = resolveRef("#/$defs/cloudAppSecuritySessionControl");
+ const casTypeOpts = useMemo(
+ () => enumToOptions(casSchema?.properties?.cloudAppSecurityType),
+ [casSchema]
+ );
+
+ const signinSchema = resolveRef("#/$defs/signInFrequencySessionControl");
+ const freqTypeOpts = useMemo(
+ () => enumToOptions(signinSchema?.properties?.type),
+ [signinSchema]
+ );
+ const freqIntervalOpts = useMemo(
+ () => enumToOptions(signinSchema?.properties?.frequencyInterval),
+ [signinSchema]
+ );
+ const freqAuthTypeOpts = useMemo(
+ () => enumToOptions(signinSchema?.properties?.authenticationType),
+ [signinSchema]
+ );
+
+ const persistSchema = resolveRef("#/$defs/persistentBrowserSessionControl");
+ const persistModeOpts = useMemo(
+ () => enumToOptions(persistSchema?.properties?.mode),
+ [persistSchema]
+ );
+
+ return (
+
+ {/* App enforced restrictions */}
+
+
+ Application Enforced Restrictions
+
+
+ Only Exchange Online and SharePoint Online support this control.
+
+
+
+
+
+
+ {/* Cloud App Security */}
+
+
+ Conditional Access App Control
+
+
+
+
+
+
+
+
+ {/* Sign-in frequency */}
+
+
+ Sign-in Frequency
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Persistent browser */}
+
+
+ Persistent Browser Session
+
+
+
+
+
+
+
+
+ {/* Resilience defaults */}
+
+
+
+
+
+
+ When enabled, Entra ID will not extend existing sessions during outages.
+
+
+
+ );
+}
+
+// ---------------------------------------------------------------------------
+// Main component
+// ---------------------------------------------------------------------------
+const CippCAPolicyBuilder = ({ formControl, existingPolicy, disabled = false }) => {
+ const policySchema = caSchema;
+
+ // Pre-populate form from existing policy when editing
+ useEffect(() => {
+ if (existingPolicy && formControl) {
+ const populate = (obj, prefix = "") => {
+ if (!obj || typeof obj !== "object") return;
+ Object.entries(obj).forEach(([key, value]) => {
+ // Skip read-only / OData / internal / Graph metadata properties
+ if (
+ (key === "id" && !prefix) || // Only skip top-level policy id
+ key === "createdDateTime" ||
+ key === "modifiedDateTime" ||
+ key === "deletedDateTime" ||
+ key === "templateId" ||
+ key === "partialEnablementStrategy" ||
+ key.includes("@odata") || // Catch both @odata.type and includePlatforms@odata.type
+ key.startsWith("#") || // Catch #microsoft.graph.restore etc.
+ key === "GUID" ||
+ key === "source" ||
+ key === "isSynced" ||
+ key === "package"
+ ) {
+ return;
+ }
+ // Skip null, empty arrays, and empty strings — treat as "not set"
+ if (value === null || value === undefined) return;
+ if (Array.isArray(value) && value.length === 0) return;
+ if (typeof value === "string" && value.trim() === "") return;
+
+ const path = prefix ? `${prefix}.${key}` : key;
+
+ // Special handling for authenticationStrength — only extract the policy ID,
+ // not the full expanded object (displayName, description, allowedCombinations, etc.)
+ if (key === "authenticationStrength" && typeof value === "object" && !Array.isArray(value)) {
+ if (value.id) {
+ formControl.setValue(`${path}.id`, value.id);
+ }
+ return;
+ }
+
+ // Special handling for guestOrExternalUserTypes — Graph stores as comma-separated
+ // string but our form uses a multi-select array
+ if (key === "guestOrExternalUserTypes" && typeof value === "string") {
+ const types = value.split(",").filter((t) => t.trim() !== "" && t !== "none");
+ if (types.length > 0) {
+ formControl.setValue(path, types);
+ }
+ return;
+ }
+
+ // Special handling for externalTenants — extract members and set _scope
+ if (key === "externalTenants" && typeof value === "object" && !Array.isArray(value)) {
+ if (value.members && Array.isArray(value.members) && value.members.length > 0) {
+ formControl.setValue(`${path}.members`, value.members);
+ formControl.setValue(`${path}._scope`, { label: "Specific tenants", value: "enumerated" });
+ } else {
+ formControl.setValue(`${path}._scope`, { label: "All external tenants", value: "all" });
+ }
+ return;
+ }
+
+ if (typeof value === "object" && !Array.isArray(value)) {
+ populate(value, path);
+ } else {
+ formControl.setValue(path, value);
+ }
+ });
+ };
+ populate(existingPolicy);
+ }
+ }, [existingPolicy, formControl]);
+
+ // Schema-level validation: extract options for top-level policy state
+ const stateOpts = useMemo(
+ () => enumToOptions(policySchema.properties.state),
+ [policySchema]
+ );
+
+ return (
+
+ {/* Policy basics */}
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Users & Groups */}
+
+ }>
+
+ Users and Groups
+
+
+
+
+
+
+
+ {/* Cloud Apps or Actions */}
+
+ }>
+
+ Cloud Apps or Actions
+
+
+
+
+
+
+
+ {/* Conditions */}
+
+ }>
+
+ Conditions
+
+
+
+
+
+
+
+ {/* Grant Controls */}
+
+ }>
+
+ Grant Controls
+
+
+
+
+
+
+
+ {/* Session Controls */}
+
+ }>
+
+ Session Controls
+
+
+
+
+
+
+
+ );
+};
+
+export default CippCAPolicyBuilder;
+
+/**
+ * Utility: extract a clean CA policy JSON from react-hook-form values.
+ *
+ * Call this in your form's submit handler to strip out { label, value }
+ * wrapper objects from autoComplete fields, remove empty/null branches,
+ * and ensure the JSON is ready to send to AddCAPolicy / AddCATemplate.
+ */
+export function extractCAPolicyJSON(formValues) {
+ const clean = (obj) => {
+ if (obj === null || obj === undefined) return undefined;
+
+ // Unwrap {label,value} from autoComplete
+ if (typeof obj === "object" && "value" in obj && "label" in obj) {
+ return obj.value;
+ }
+
+ if (Array.isArray(obj)) {
+ const arr = obj.map(clean).filter((v) => v !== undefined && v !== null && v !== "");
+ return arr.length > 0 ? arr : undefined;
+ }
+
+ if (typeof obj === "object") {
+ const result = {};
+ let hasContent = false;
+ for (const [key, value] of Object.entries(obj)) {
+ // Strip internal builder fields (e.g. _scope)
+ if (key.startsWith("_")) continue;
+ // Strip OData annotations EXCEPT @odata.type (required by Graph for polymorphic types)
+ if (key === "@odata.type") {
+ result[key] = value;
+ hasContent = true;
+ continue;
+ }
+ if (key.includes("@odata") || key.startsWith("#")) continue;
+
+ const cleaned = clean(value);
+ if (cleaned !== undefined) {
+ result[key] = cleaned;
+ hasContent = true;
+ }
+ }
+ return hasContent ? result : undefined;
+ }
+
+ // Booleans, numbers, non-empty strings pass through
+ if (typeof obj === "string" && obj.trim() === "") return undefined;
+ return obj;
+ };
+
+ const cleaned = clean(formValues) ?? {};
+
+ // Post-process: fix guestsOrExternalUsers structures for Graph API
+ const fixGuestExternalUsers = (guestObj) => {
+ if (!guestObj) return guestObj;
+ // Graph expects guestOrExternalUserTypes as a comma-separated string
+ if (Array.isArray(guestObj.guestOrExternalUserTypes)) {
+ guestObj.guestOrExternalUserTypes = guestObj.guestOrExternalUserTypes.join(",");
+ }
+ // Determine scope from the internal _scope field or from members presence
+ const scope = guestObj.externalTenants?._scope;
+ const hasMembers =
+ guestObj.externalTenants?.members && guestObj.externalTenants.members.length > 0;
+
+ if (guestObj.externalTenants) {
+ // Remove internal _scope field
+ delete guestObj.externalTenants._scope;
+
+ if (scope === "enumerated" || hasMembers) {
+ guestObj.externalTenants["@odata.type"] =
+ "#microsoft.graph.conditionalAccessEnumeratedExternalTenants";
+ guestObj.externalTenants.membershipKind = "enumerated";
+ } else {
+ guestObj.externalTenants = {
+ "@odata.type": "#microsoft.graph.conditionalAccessAllExternalTenants",
+ membershipKind: "all",
+ };
+ }
+ } else if (guestObj.guestOrExternalUserTypes) {
+ // No tenants specified — default to all external tenants
+ guestObj.externalTenants = {
+ "@odata.type": "#microsoft.graph.conditionalAccessAllExternalTenants",
+ membershipKind: "all",
+ };
+ }
+ return guestObj;
+ };
+
+ if (cleaned.conditions?.users?.excludeGuestsOrExternalUsers) {
+ cleaned.conditions.users.excludeGuestsOrExternalUsers = fixGuestExternalUsers(
+ cleaned.conditions.users.excludeGuestsOrExternalUsers
+ );
+ }
+ if (cleaned.conditions?.users?.includeGuestsOrExternalUsers) {
+ cleaned.conditions.users.includeGuestsOrExternalUsers = fixGuestExternalUsers(
+ cleaned.conditions.users.includeGuestsOrExternalUsers
+ );
+ }
+
+ return cleaned;
+}
diff --git a/src/components/CippComponents/CippTemplateFieldRenderer.jsx b/src/components/CippComponents/CippTemplateFieldRenderer.jsx
index 1757e400acda..8ecef26973eb 100644
--- a/src/components/CippComponents/CippTemplateFieldRenderer.jsx
+++ b/src/components/CippComponents/CippTemplateFieldRenderer.jsx
@@ -244,11 +244,43 @@ const CippTemplateFieldRenderer = ({
React.useEffect(() => {
if (templateData && formControl) {
const processedData = parseIntuneRawJson(templateData);
- const formValues = {};
+ // Recursively strip null values, empty arrays, empty strings,
+ // and @odata / Graph metadata keys so they don't create blank
+ // form fields or phantom sections in the builder.
+ const stripEmpty = (obj) => {
+ if (obj === null || obj === undefined) return undefined;
+ if (typeof obj === "string" && obj.trim() === "") return undefined;
+ if (Array.isArray(obj)) {
+ const filtered = obj
+ .map(stripEmpty)
+ .filter((v) => v !== undefined && v !== null);
+ return filtered.length > 0 ? filtered : undefined;
+ }
+ if (typeof obj === "object") {
+ const result = {};
+ let hasContent = false;
+ for (const [k, v] of Object.entries(obj)) {
+ // Drop @odata annotations and Graph metadata
+ if (k.includes("@odata") || k.startsWith("#")) continue;
+ const cleaned = stripEmpty(v);
+ if (cleaned !== undefined) {
+ result[k] = cleaned;
+ hasContent = true;
+ }
+ }
+ return hasContent ? result : undefined;
+ }
+ return obj;
+ };
+
+ const formValues = {};
Object.keys(processedData).forEach((key) => {
if (!isFieldBlacklisted(key)) {
- formValues[key] = processedData[key];
+ const cleaned = stripEmpty(processedData[key]);
+ if (cleaned !== undefined) {
+ formValues[key] = cleaned;
+ }
}
});
formControl.reset(formValues);
@@ -258,6 +290,10 @@ const CippTemplateFieldRenderer = ({
const renderFormField = (key, value, path = "") => {
const fieldPath = path ? `${path}.${key}` : key;
+ // Skip null/undefined values and @odata / metadata keys
+ if (value === null || value === undefined) return null;
+ if (key.includes("@odata") || key.startsWith("#")) return null;
+
if (isFieldBlacklisted(key)) {
return null;
}
@@ -776,12 +812,16 @@ const CippTemplateFieldRenderer = ({
{priorityFields.map(
(fieldName) =>
processedData[fieldName] !== undefined &&
+ processedData[fieldName] !== null &&
renderFormField(fieldName, processedData[fieldName])
)}
{/* Render all other fields except priority fields */}
{Object.entries(processedData)
- .filter(([key]) => !priorityFields.includes(key))
+ .filter(
+ ([key, value]) =>
+ !priorityFields.includes(key) && value !== null && value !== undefined
+ )
.map(([key, value]) => renderFormField(key, value))}
);
diff --git a/src/data/conditionalAccessSchema.json b/src/data/conditionalAccessSchema.json
new file mode 100644
index 000000000000..e6161261854e
--- /dev/null
+++ b/src/data/conditionalAccessSchema.json
@@ -0,0 +1,664 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "microsoft.graph.conditionalAccessPolicy",
+ "title": "Conditional Access Policy",
+ "description": "Schema derived from the Microsoft Graph v1.0 conditionalAccessPolicy resource type. Reference: https://learn.microsoft.com/en-us/graph/api/resources/conditionalaccesspolicy?view=graph-rest-1.0",
+ "type": "object",
+ "required": ["displayName", "state", "conditions"],
+ "properties": {
+ "displayName": {
+ "type": "string",
+ "title": "Display Name",
+ "description": "A display name for the policy.",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "state": {
+ "type": "string",
+ "title": "Policy State",
+ "description": "The state of the policy.",
+ "enum": ["enabled", "disabled", "enabledForReportingButNotEnforced"],
+ "enumLabels": {
+ "enabled": "Enabled",
+ "disabled": "Disabled",
+ "enabledForReportingButNotEnforced": "Report-only"
+ }
+ },
+ "conditions": {
+ "$ref": "#/$defs/conditionalAccessConditionSet"
+ },
+ "grantControls": {
+ "$ref": "#/$defs/conditionalAccessGrantControls"
+ },
+ "sessionControls": {
+ "$ref": "#/$defs/conditionalAccessSessionControls"
+ }
+ },
+ "$defs": {
+ "conditionalAccessConditionSet": {
+ "type": "object",
+ "title": "Conditions",
+ "description": "Rules that must be met for the policy to apply.",
+ "required": ["users", "applications", "clientAppTypes"],
+ "properties": {
+ "users": {
+ "$ref": "#/$defs/conditionalAccessUsers"
+ },
+ "applications": {
+ "$ref": "#/$defs/conditionalAccessApplications"
+ },
+ "clientAppTypes": {
+ "type": "array",
+ "title": "Client App Types",
+ "description": "Client application types included in the policy.",
+ "items": {
+ "type": "string",
+ "enum": ["all", "browser", "mobileAppsAndDesktopClients", "exchangeActiveSync", "easSupported", "other"]
+ },
+ "enumLabels": {
+ "all": "All",
+ "browser": "Browser",
+ "mobileAppsAndDesktopClients": "Mobile apps and desktop clients",
+ "exchangeActiveSync": "Exchange ActiveSync",
+ "easSupported": "EAS supported",
+ "other": "Other clients"
+ }
+ },
+ "platforms": {
+ "$ref": "#/$defs/conditionalAccessPlatforms"
+ },
+ "locations": {
+ "$ref": "#/$defs/conditionalAccessLocations"
+ },
+ "devices": {
+ "$ref": "#/$defs/conditionalAccessDevices"
+ },
+ "clientApplications": {
+ "$ref": "#/$defs/conditionalAccessClientApplications"
+ },
+ "signInRiskLevels": {
+ "type": "array",
+ "title": "Sign-in Risk Levels",
+ "description": "Sign-in risk levels included in the policy. Requires Entra ID P2.",
+ "items": {
+ "type": "string",
+ "enum": ["low", "medium", "high", "hidden", "none"]
+ },
+ "enumLabels": {
+ "low": "Low",
+ "medium": "Medium",
+ "high": "High",
+ "hidden": "Hidden",
+ "none": "No risk"
+ },
+ "requiresLicense": "AAD_PREMIUM_P2"
+ },
+ "userRiskLevels": {
+ "type": "array",
+ "title": "User Risk Levels",
+ "description": "User risk levels included in the policy. Requires Entra ID P2.",
+ "items": {
+ "type": "string",
+ "enum": ["low", "medium", "high", "hidden", "none"]
+ },
+ "enumLabels": {
+ "low": "Low",
+ "medium": "Medium",
+ "high": "High",
+ "hidden": "Hidden",
+ "none": "No risk"
+ },
+ "requiresLicense": "AAD_PREMIUM_P2"
+ },
+ "servicePrincipalRiskLevels": {
+ "type": "array",
+ "title": "Service Principal Risk Levels",
+ "description": "Service principal risk levels included in the policy.",
+ "items": {
+ "type": "string",
+ "enum": ["low", "medium", "high", "none"]
+ },
+ "enumLabels": {
+ "low": "Low",
+ "medium": "Medium",
+ "high": "High",
+ "none": "No risk"
+ }
+ },
+ "insiderRiskLevels": {
+ "type": "string",
+ "title": "Insider Risk Levels",
+ "description": "Insider risk levels included in the policy.",
+ "enum": ["minor", "moderate", "elevated"],
+ "enumLabels": {
+ "minor": "Minor",
+ "moderate": "Moderate",
+ "elevated": "Elevated"
+ }
+ },
+ "authenticationFlows": {
+ "$ref": "#/$defs/conditionalAccessAuthenticationFlows"
+ }
+ }
+ },
+ "conditionalAccessUsers": {
+ "type": "object",
+ "title": "Users and Groups",
+ "description": "Users, groups, and roles included in and excluded from the policy.",
+ "properties": {
+ "includeUsers": {
+ "type": "array",
+ "title": "Include Users",
+ "description": "User IDs in scope, or 'All', 'None', 'GuestsOrExternalUsers'.",
+ "items": { "type": "string" },
+ "specialValues": ["All", "None", "GuestsOrExternalUsers"],
+ "graphLookup": "users"
+ },
+ "excludeUsers": {
+ "type": "array",
+ "title": "Exclude Users",
+ "description": "User IDs excluded from scope.",
+ "items": { "type": "string" },
+ "specialValues": ["GuestsOrExternalUsers"],
+ "graphLookup": "users"
+ },
+ "includeGroups": {
+ "type": "array",
+ "title": "Include Groups",
+ "description": "Group IDs in scope of the policy.",
+ "items": { "type": "string" },
+ "graphLookup": "groups"
+ },
+ "excludeGroups": {
+ "type": "array",
+ "title": "Exclude Groups",
+ "description": "Group IDs excluded from the policy.",
+ "items": { "type": "string" },
+ "graphLookup": "groups"
+ },
+ "includeRoles": {
+ "type": "array",
+ "title": "Include Roles",
+ "description": "Directory role IDs in scope of the policy.",
+ "items": { "type": "string" },
+ "graphLookup": "directoryRoles"
+ },
+ "excludeRoles": {
+ "type": "array",
+ "title": "Exclude Roles",
+ "description": "Directory role IDs excluded from the policy.",
+ "items": { "type": "string" },
+ "graphLookup": "directoryRoles"
+ },
+ "includeGuestsOrExternalUsers": {
+ "$ref": "#/$defs/conditionalAccessGuestsOrExternalUsers"
+ },
+ "excludeGuestsOrExternalUsers": {
+ "$ref": "#/$defs/conditionalAccessGuestsOrExternalUsers"
+ }
+ }
+ },
+ "conditionalAccessGuestsOrExternalUsers": {
+ "type": "object",
+ "title": "Guests or External Users",
+ "description": "Internal guests or external user types.",
+ "properties": {
+ "guestOrExternalUserTypes": {
+ "type": "string",
+ "title": "Guest or External User Types",
+ "description": "Multi-valued flags. Combine with commas.",
+ "flagEnum": ["none", "internalGuest", "b2bCollaborationGuest", "b2bCollaborationMember", "b2bDirectConnectUser", "otherExternalUser", "serviceProvider"],
+ "flagEnumLabels": {
+ "none": "None",
+ "internalGuest": "Internal guest",
+ "b2bCollaborationGuest": "B2B collaboration guest",
+ "b2bCollaborationMember": "B2B collaboration member",
+ "b2bDirectConnectUser": "B2B direct connect user",
+ "otherExternalUser": "Other external user",
+ "serviceProvider": "Service provider"
+ }
+ },
+ "externalTenants": {
+ "$ref": "#/$defs/conditionalAccessExternalTenants"
+ }
+ }
+ },
+ "conditionalAccessExternalTenants": {
+ "type": "object",
+ "title": "External Tenants",
+ "description": "External tenant scope.",
+ "properties": {
+ "@odata.type": {
+ "type": "string",
+ "title": "Membership Kind",
+ "description": "Whether to enumerate or specify all tenants.",
+ "enum": [
+ "#microsoft.graph.conditionalAccessAllExternalTenants",
+ "#microsoft.graph.conditionalAccessEnumeratedExternalTenants"
+ ],
+ "enumLabels": {
+ "#microsoft.graph.conditionalAccessAllExternalTenants": "All external tenants",
+ "#microsoft.graph.conditionalAccessEnumeratedExternalTenants": "Specific tenants"
+ }
+ },
+ "members": {
+ "type": "array",
+ "title": "Tenant IDs",
+ "description": "List of tenant IDs when using enumerated membership.",
+ "items": { "type": "string" },
+ "visibleWhen": {
+ "field": "@odata.type",
+ "value": "#microsoft.graph.conditionalAccessEnumeratedExternalTenants"
+ }
+ }
+ }
+ },
+ "conditionalAccessApplications": {
+ "type": "object",
+ "title": "Cloud Apps or Actions",
+ "description": "Applications and user actions included in and excluded from the policy.",
+ "properties": {
+ "includeApplications": {
+ "type": "array",
+ "title": "Include Applications",
+ "description": "Application client IDs the policy applies to, or 'All', 'Office365', 'MicrosoftAdminPortals'.",
+ "items": { "type": "string" },
+ "specialValues": ["All", "Office365", "MicrosoftAdminPortals"],
+ "specialValueLabels": {
+ "All": "All cloud apps",
+ "Office365": "Office 365",
+ "MicrosoftAdminPortals": "Microsoft Admin Portals"
+ },
+ "graphLookup": "servicePrincipals"
+ },
+ "excludeApplications": {
+ "type": "array",
+ "title": "Exclude Applications",
+ "description": "Application client IDs explicitly excluded.",
+ "items": { "type": "string" },
+ "graphLookup": "servicePrincipals"
+ },
+ "includeUserActions": {
+ "type": "array",
+ "title": "User Actions",
+ "description": "User actions to include instead of cloud apps.",
+ "items": {
+ "type": "string",
+ "enum": ["urn:user:registersecurityinfo", "urn:user:registerdevice"]
+ },
+ "enumLabels": {
+ "urn:user:registersecurityinfo": "Register security information",
+ "urn:user:registerdevice": "Register or join devices"
+ }
+ },
+ "includeAuthenticationContextClassReferences": {
+ "type": "array",
+ "title": "Authentication Context",
+ "description": "Authentication context class references included.",
+ "items": { "type": "string" }
+ },
+ "applicationFilter": {
+ "$ref": "#/$defs/conditionalAccessFilter",
+ "title": "Application Filter",
+ "description": "Dynamic filter rule for applications."
+ }
+ }
+ },
+ "conditionalAccessPlatforms": {
+ "type": "object",
+ "title": "Device Platforms",
+ "description": "Device platforms included in and excluded from the policy.",
+ "properties": {
+ "includePlatforms": {
+ "type": "array",
+ "title": "Include Platforms",
+ "description": "Platforms the policy applies to.",
+ "items": {
+ "type": "string",
+ "enum": ["android", "iOS", "windows", "windowsPhone", "macOS", "linux", "all"]
+ },
+ "enumLabels": {
+ "android": "Android",
+ "iOS": "iOS",
+ "windows": "Windows",
+ "windowsPhone": "Windows Phone",
+ "macOS": "macOS",
+ "linux": "Linux",
+ "all": "All platforms"
+ }
+ },
+ "excludePlatforms": {
+ "type": "array",
+ "title": "Exclude Platforms",
+ "description": "Platforms excluded from the policy.",
+ "items": {
+ "type": "string",
+ "enum": ["android", "iOS", "windows", "windowsPhone", "macOS", "linux"]
+ },
+ "enumLabels": {
+ "android": "Android",
+ "iOS": "iOS",
+ "windows": "Windows",
+ "windowsPhone": "Windows Phone",
+ "macOS": "macOS",
+ "linux": "Linux"
+ }
+ }
+ }
+ },
+ "conditionalAccessLocations": {
+ "type": "object",
+ "title": "Locations",
+ "description": "Locations included in and excluded from the policy.",
+ "properties": {
+ "includeLocations": {
+ "type": "array",
+ "title": "Include Locations",
+ "description": "Named location IDs or 'All', 'AllTrusted'.",
+ "items": { "type": "string" },
+ "specialValues": ["All", "AllTrusted"],
+ "specialValueLabels": {
+ "All": "Any location",
+ "AllTrusted": "All trusted locations"
+ },
+ "graphLookup": "namedLocations"
+ },
+ "excludeLocations": {
+ "type": "array",
+ "title": "Exclude Locations",
+ "description": "Named location IDs excluded.",
+ "items": { "type": "string" },
+ "specialValues": ["AllTrusted"],
+ "specialValueLabels": {
+ "AllTrusted": "All trusted locations"
+ },
+ "graphLookup": "namedLocations"
+ }
+ }
+ },
+ "conditionalAccessDevices": {
+ "type": "object",
+ "title": "Devices",
+ "description": "Device filter for the policy.",
+ "properties": {
+ "deviceFilter": {
+ "$ref": "#/$defs/conditionalAccessFilter",
+ "title": "Device Filter",
+ "description": "Dynamic filter rule for devices using device properties."
+ }
+ }
+ },
+ "conditionalAccessFilter": {
+ "type": "object",
+ "title": "Filter",
+ "description": "Dynamic filter with rule syntax.",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "title": "Filter Mode",
+ "description": "Whether to include or exclude matching items.",
+ "enum": ["include", "exclude"],
+ "enumLabels": {
+ "include": "Include filtered items",
+ "exclude": "Exclude filtered items"
+ }
+ },
+ "rule": {
+ "type": "string",
+ "title": "Filter Rule",
+ "description": "Dynamic membership rule expression. Syntax matches Entra ID dynamic group rules."
+ }
+ },
+ "required": ["mode", "rule"]
+ },
+ "conditionalAccessClientApplications": {
+ "type": "object",
+ "title": "Workload Identities",
+ "description": "Service principals and workload identities included in and excluded from the policy.",
+ "properties": {
+ "includeServicePrincipals": {
+ "type": "array",
+ "title": "Include Service Principals",
+ "description": "Service principal IDs, or 'ServicePrincipalsInMyTenant'.",
+ "items": { "type": "string" },
+ "specialValues": ["ServicePrincipalsInMyTenant"],
+ "specialValueLabels": {
+ "ServicePrincipalsInMyTenant": "All service principals"
+ }
+ },
+ "excludeServicePrincipals": {
+ "type": "array",
+ "title": "Exclude Service Principals",
+ "description": "Service principal IDs excluded.",
+ "items": { "type": "string" }
+ },
+ "servicePrincipalFilter": {
+ "$ref": "#/$defs/conditionalAccessFilter",
+ "title": "Service Principal Filter",
+ "description": "Dynamic filter rule for service principals."
+ }
+ }
+ },
+ "conditionalAccessAuthenticationFlows": {
+ "type": "object",
+ "title": "Authentication Flows",
+ "description": "Authentication flow types in scope.",
+ "properties": {
+ "transferMethods": {
+ "type": "string",
+ "title": "Transfer Methods",
+ "description": "Transfer methods in scope for the policy.",
+ "enum": ["none", "deviceCodeFlow", "authenticationTransfer"],
+ "enumLabels": {
+ "none": "None",
+ "deviceCodeFlow": "Device code flow",
+ "authenticationTransfer": "Authentication transfer"
+ }
+ }
+ }
+ },
+ "conditionalAccessGrantControls": {
+ "type": "object",
+ "title": "Grant Controls",
+ "description": "Grant controls that must be fulfilled to pass the policy.",
+ "properties": {
+ "operator": {
+ "type": "string",
+ "title": "Control Operator",
+ "description": "How multiple controls relate to each other.",
+ "enum": ["AND", "OR"],
+ "enumLabels": {
+ "AND": "Require all selected controls",
+ "OR": "Require one of the selected controls"
+ }
+ },
+ "builtInControls": {
+ "type": "array",
+ "title": "Built-in Controls",
+ "description": "Built-in grant controls required by the policy.",
+ "items": {
+ "type": "string",
+ "enum": ["block", "mfa", "compliantDevice", "domainJoinedDevice", "approvedApplication", "compliantApplication", "passwordChange", "riskRemediation"]
+ },
+ "enumLabels": {
+ "block": "Block access",
+ "mfa": "Require multifactor authentication",
+ "compliantDevice": "Require device to be marked as compliant",
+ "domainJoinedDevice": "Require Microsoft Entra hybrid joined device",
+ "approvedApplication": "Require approved client app",
+ "compliantApplication": "Require app protection policy",
+ "passwordChange": "Require password change",
+ "riskRemediation": "Require risk remediation"
+ },
+ "constraints": {
+ "mutuallyExclusive": [["block"], ["mfa", "compliantDevice", "domainJoinedDevice", "approvedApplication", "compliantApplication", "passwordChange", "riskRemediation"]],
+ "passwordChangeRequires": ["mfa"],
+ "riskRemediationExcludes": ["passwordChange"]
+ }
+ },
+ "customAuthenticationFactors": {
+ "type": "array",
+ "title": "Custom Controls",
+ "description": "Custom control IDs required by the policy.",
+ "items": { "type": "string" }
+ },
+ "termsOfUse": {
+ "type": "array",
+ "title": "Terms of Use",
+ "description": "Terms of use IDs required by the policy.",
+ "items": { "type": "string" }
+ },
+ "authenticationStrength": {
+ "$ref": "#/$defs/authenticationStrengthPolicy"
+ }
+ }
+ },
+ "authenticationStrengthPolicy": {
+ "type": "object",
+ "title": "Authentication Strength",
+ "description": "Authentication strength policy required. Use instead of or alongside builtInControls.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Authentication Strength Policy",
+ "description": "ID of the authentication strength policy.",
+ "graphLookup": "authenticationStrengthPolicies",
+ "wellKnownValues": {
+ "00000000-0000-0000-0000-000000000002": "Multifactor authentication",
+ "00000000-0000-0000-0000-000000000003": "Passwordless MFA",
+ "00000000-0000-0000-0000-000000000004": "Phishing-resistant MFA"
+ }
+ }
+ }
+ },
+ "conditionalAccessSessionControls": {
+ "type": "object",
+ "title": "Session Controls",
+ "description": "Session controls enforced after sign-in.",
+ "properties": {
+ "applicationEnforcedRestrictions": {
+ "$ref": "#/$defs/applicationEnforcedRestrictionsSessionControl"
+ },
+ "cloudAppSecurity": {
+ "$ref": "#/$defs/cloudAppSecuritySessionControl"
+ },
+ "signInFrequency": {
+ "$ref": "#/$defs/signInFrequencySessionControl"
+ },
+ "persistentBrowser": {
+ "$ref": "#/$defs/persistentBrowserSessionControl"
+ },
+ "disableResilienceDefaults": {
+ "type": "boolean",
+ "title": "Disable Resilience Defaults",
+ "description": "When true, Entra ID will not extend existing sessions based on information collected prior to an outage."
+ }
+ }
+ },
+ "applicationEnforcedRestrictionsSessionControl": {
+ "type": "object",
+ "title": "App Enforced Restrictions",
+ "description": "Enforce application restrictions. Only Exchange Online and SharePoint Online support this.",
+ "properties": {
+ "isEnabled": {
+ "type": "boolean",
+ "title": "Enabled",
+ "description": "Whether application enforced restrictions are enabled."
+ }
+ }
+ },
+ "cloudAppSecuritySessionControl": {
+ "type": "object",
+ "title": "Conditional Access App Control",
+ "description": "Apply Defender for Cloud Apps controls.",
+ "properties": {
+ "isEnabled": {
+ "type": "boolean",
+ "title": "Enabled",
+ "description": "Whether cloud app security control is enabled."
+ },
+ "cloudAppSecurityType": {
+ "type": "string",
+ "title": "Control Type",
+ "description": "Type of cloud app security enforcement.",
+ "enum": ["mcasConfigured", "monitorOnly", "blockDownloads"],
+ "enumLabels": {
+ "mcasConfigured": "Use custom policy",
+ "monitorOnly": "Monitor only",
+ "blockDownloads": "Block downloads"
+ }
+ }
+ }
+ },
+ "signInFrequencySessionControl": {
+ "type": "object",
+ "title": "Sign-in Frequency",
+ "description": "Enforce periodic reauthentication.",
+ "properties": {
+ "isEnabled": {
+ "type": "boolean",
+ "title": "Enabled",
+ "description": "Whether sign-in frequency control is enabled."
+ },
+ "value": {
+ "type": "integer",
+ "title": "Frequency Value",
+ "description": "Number of hours or days.",
+ "minimum": 1
+ },
+ "type": {
+ "type": "string",
+ "title": "Frequency Unit",
+ "description": "Unit of the sign-in frequency.",
+ "enum": ["hours", "days"],
+ "enumLabels": {
+ "hours": "Hours",
+ "days": "Days"
+ }
+ },
+ "frequencyInterval": {
+ "type": "string",
+ "title": "Frequency Interval",
+ "description": "Whether frequency is time-based or every sign-in.",
+ "enum": ["timeBased", "everyTime"],
+ "enumLabels": {
+ "timeBased": "Time-based (use value/type above)",
+ "everyTime": "Every time"
+ }
+ },
+ "authenticationType": {
+ "type": "string",
+ "title": "Authentication Type",
+ "description": "Which authentication types this applies to.",
+ "enum": ["primaryAndSecondaryAuthentication", "secondaryAuthentication"],
+ "enumLabels": {
+ "primaryAndSecondaryAuthentication": "Primary and secondary authentication",
+ "secondaryAuthentication": "Secondary authentication only"
+ }
+ }
+ }
+ },
+ "persistentBrowserSessionControl": {
+ "type": "object",
+ "title": "Persistent Browser Session",
+ "description": "Whether to persist cookies after browser close.",
+ "properties": {
+ "isEnabled": {
+ "type": "boolean",
+ "title": "Enabled",
+ "description": "Whether persistent browser session control is enabled."
+ },
+ "mode": {
+ "type": "string",
+ "title": "Mode",
+ "description": "Whether browser sessions should always or never persist.",
+ "enum": ["always", "never"],
+ "enumLabels": {
+ "always": "Always persistent",
+ "never": "Never persistent"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/pages/tenant/conditional/list-policies/edit.jsx b/src/pages/tenant/conditional/list-policies/edit.jsx
new file mode 100644
index 000000000000..156cd39f12b2
--- /dev/null
+++ b/src/pages/tenant/conditional/list-policies/edit.jsx
@@ -0,0 +1,75 @@
+import React, { useEffect, useState } from "react";
+import { Alert, Box } from "@mui/material";
+import { useForm } from "react-hook-form";
+import { useRouter } from "next/router";
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import CippFormPage from "../../../../components/CippFormPages/CippFormPage";
+import CippFormSkeleton from "../../../../components/CippFormPages/CippFormSkeleton";
+import { ApiGetCall } from "../../../../api/ApiCall";
+import CippCAPolicyBuilder, {
+ extractCAPolicyJSON,
+} from "../../../../components/CippComponents/CippCAPolicyBuilder";
+import { useSettings } from "../../../../hooks/use-settings.js";
+
+const EditCAPolicy = () => {
+ const router = useRouter();
+ const { id: policyId } = router.query;
+ const tenantFilter = useSettings()?.currentTenant;
+ const [policyData, setPolicyData] = useState(null);
+
+ const formControl = useForm({ mode: "onChange" });
+
+ // Fetch the current policies for this tenant
+ const policiesQuery = ApiGetCall({
+ url: `/api/ListConditionalAccessPolicies?tenantFilter=${tenantFilter}`,
+ queryKey: `CAPolicies-${tenantFilter}`,
+ enabled: !!policyId && !!tenantFilter,
+ });
+
+ useEffect(() => {
+ if (policiesQuery.isSuccess && policiesQuery.data?.Results) {
+ const match = policiesQuery.data.Results.find((p) => p.id === policyId);
+ if (match?.rawjson) {
+ const parsed = JSON.parse(match.rawjson);
+ setPolicyData(parsed);
+ }
+ }
+ }, [policiesQuery.isSuccess, policiesQuery.data, policyId]);
+
+ const dataFormatter = (values) => {
+ const cleaned = extractCAPolicyJSON(values);
+ return {
+ tenantFilter,
+ PolicyId: policyId,
+ PolicyBody: cleaned,
+ };
+ };
+
+ return (
+
+
+ {policiesQuery.isLoading ? (
+
+ ) : policiesQuery.isError ? (
+ Error loading policies.
+ ) : !policyData ? (
+ Policy not found for ID: {policyId}
+ ) : (
+
+ )}
+
+
+ );
+};
+
+EditCAPolicy.getLayout = (page) => {page};
+
+export default EditCAPolicy;
diff --git a/src/pages/tenant/conditional/list-policies/index.js b/src/pages/tenant/conditional/list-policies/index.js
index d7f48eac6694..1e85c99b3ebc 100644
--- a/src/pages/tenant/conditional/list-policies/index.js
+++ b/src/pages/tenant/conditional/list-policies/index.js
@@ -25,6 +25,13 @@ const Page = () => {
// Actions configuration
const actions = [
+ {
+ label: "Edit Policy",
+ link: "/tenant/conditional/list-policies/edit?id=[id]",
+ icon: ,
+ color: "info",
+ hideBulk: true,
+ },
{
label: "Create template based on policy",
type: "POST",
diff --git a/src/pages/tenant/conditional/list-template/create.jsx b/src/pages/tenant/conditional/list-template/create.jsx
new file mode 100644
index 000000000000..1843c369c323
--- /dev/null
+++ b/src/pages/tenant/conditional/list-template/create.jsx
@@ -0,0 +1,39 @@
+import React from "react";
+import { Box } from "@mui/material";
+import { useForm } from "react-hook-form";
+import { Layout as DashboardLayout } from "../../../../layouts/index.js";
+import CippFormPage from "../../../../components/CippFormPages/CippFormPage";
+import CippCAPolicyBuilder, { extractCAPolicyJSON } from "../../../../components/CippComponents/CippCAPolicyBuilder";
+
+const CreateCATemplate = () => {
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: {
+ state: { label: "Report-only", value: "enabledForReportingButNotEnforced" },
+ },
+ });
+
+ const customDataFormatter = (values) => {
+ return extractCAPolicyJSON(values);
+ };
+
+ return (
+
+
+
+
+
+ );
+};
+
+CreateCATemplate.getLayout = (page) => {page};
+
+export default CreateCATemplate;
diff --git a/src/pages/tenant/conditional/list-template/edit.jsx b/src/pages/tenant/conditional/list-template/edit.jsx
index 9521ddae99ed..6d82be777062 100644
--- a/src/pages/tenant/conditional/list-template/edit.jsx
+++ b/src/pages/tenant/conditional/list-template/edit.jsx
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react";
-import { Alert, Box, Typography } from "@mui/material";
+import { Alert, Box, Typography, ToggleButtonGroup, ToggleButton } from "@mui/material";
import { useForm } from "react-hook-form";
import { useRouter } from "next/router";
import { Layout as DashboardLayout } from "../../../../layouts/index.js";
@@ -7,15 +7,29 @@ import CippFormPage from "../../../../components/CippFormPages/CippFormPage";
import CippFormSkeleton from "../../../../components/CippFormPages/CippFormSkeleton";
import { ApiGetCall } from "../../../../api/ApiCall";
import CippTemplateFieldRenderer from "../../../../components/CippComponents/CippTemplateFieldRenderer";
+import CippCAPolicyBuilder, {
+ extractCAPolicyJSON,
+} from "../../../../components/CippComponents/CippCAPolicyBuilder";
const EditCATemplate = () => {
const router = useRouter();
const { GUID } = router.query;
const [templateData, setTemplateData] = useState(null);
const [originalData, setOriginalData] = useState(null);
+ const [editorMode, setEditorMode] = useState("builder");
const formControl = useForm({ mode: "onChange" });
+ // When switching to builder mode, reset the form to clear any empty []
+ // values that CippTemplateFieldRenderer may have injected
+ const handleEditorModeChange = (e, val) => {
+ if (!val) return;
+ if (val === "builder" && editorMode !== "builder") {
+ formControl.reset({});
+ }
+ setEditorMode(val);
+ };
+
// Fetch the template data
const templateQuery = ApiGetCall({
url: `/api/ListCATemplates?GUID=${GUID}`,
@@ -110,6 +124,14 @@ const EditCATemplate = () => {
};
};
+ // Build a data formatter that works for both editor modes
+ const builderDataFormatter = (values) => {
+ const cleaned = extractCAPolicyJSON(values);
+ return { GUID, ...cleaned };
+ };
+
+ const activeFormatter = editorMode === "builder" ? builderDataFormatter : customDataFormatter;
+
return (
{
queryKey={[`CATemplate-${GUID}`, "CATemplates"]}
backButtonTitle="Conditional Access Templates"
postUrl="/api/ExecEditTemplate?type=CATemplate"
- customDataformatter={customDataFormatter}
+ customDataformatter={activeFormatter}
formPageType="Edit"
+ titleButton={
+
+ Policy Builder
+ Field Editor
+
+ }
>
{templateQuery.isLoading ? (
) : templateQuery.isError || !templateData ? (
Error loading template or template not found.
+ ) : editorMode === "builder" ? (
+
) : (
{
const pageTitle = "Available Conditional Access Templates";
@@ -144,7 +145,13 @@ const Page = () => {
simpleColumns={["displayName", "package", "GUID"]}
cardButton={
-
+ }
+ >
+ Create Template
+
Date: Wed, 13 May 2026 18:54:03 +0800
Subject: [PATCH 171/181] Update CippCAPolicyBuilder.jsx
---
.../CippComponents/CippCAPolicyBuilder.jsx | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/src/components/CippComponents/CippCAPolicyBuilder.jsx b/src/components/CippComponents/CippCAPolicyBuilder.jsx
index c7999edff6c6..30a38673bd4e 100644
--- a/src/components/CippComponents/CippCAPolicyBuilder.jsx
+++ b/src/components/CippComponents/CippCAPolicyBuilder.jsx
@@ -1117,5 +1117,25 @@ export function extractCAPolicyJSON(formValues) {
);
}
+ // Post-process: strip session control sub-objects where isEnabled is false.
+ // Graph validates fields like `mode` even when disabled — safest to omit entirely.
+ if (cleaned.sessionControls) {
+ const sessionKeys = [
+ "applicationEnforcedRestrictions",
+ "cloudAppSecurity",
+ "signInFrequency",
+ "persistentBrowser",
+ ];
+ for (const key of sessionKeys) {
+ if (cleaned.sessionControls[key]?.isEnabled === false) {
+ delete cleaned.sessionControls[key];
+ }
+ }
+ // If sessionControls is now empty, remove it too
+ if (Object.keys(cleaned.sessionControls).length === 0) {
+ delete cleaned.sessionControls;
+ }
+ }
+
return cleaned;
}
From 60a50738fc68fd8b17ea615343f785828c713209 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Wed, 13 May 2026 21:08:55 +0200
Subject: [PATCH 172/181] fixes tenantfilter property
---
.../administration/mailbox-rules/index.js | 113 ++++++++++--------
1 file changed, 60 insertions(+), 53 deletions(-)
diff --git a/src/pages/email/administration/mailbox-rules/index.js b/src/pages/email/administration/mailbox-rules/index.js
index 4b9a9ece88cb..98f0d076caff 100644
--- a/src/pages/email/administration/mailbox-rules/index.js
+++ b/src/pages/email/administration/mailbox-rules/index.js
@@ -1,90 +1,97 @@
-import { Layout as DashboardLayout } from "../../../../layouts/index.js";
-import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx";
-import { getCippTranslation } from "../../../../utils/get-cipp-translation";
-import { getCippFormatting } from "../../../../utils/get-cipp-formatting";
-import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard";
-import { Block, PlayArrow, DeleteForever } from "@mui/icons-material";
-import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls";
+import { Layout as DashboardLayout } from '../../../../layouts/index.js'
+import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx'
+import { getCippTranslation } from '../../../../utils/get-cipp-translation'
+import { getCippFormatting } from '../../../../utils/get-cipp-formatting'
+import { CippPropertyListCard } from '../../../../components/CippCards/CippPropertyListCard'
+import { Block, PlayArrow, DeleteForever } from '@mui/icons-material'
+import { useCippReportDB } from '../../../../components/CippComponents/CippReportDBControls'
const Page = () => {
- const pageTitle = "Mailbox Rules";
+ const pageTitle = 'Mailbox Rules'
const reportDB = useCippReportDB({
- apiUrl: "/api/ListMailboxRules",
- queryKey: "ListMailboxRules",
- cacheName: "Mailboxes",
- syncTitle: "Sync Mailbox Rules",
- syncData: { Types: "Rules" },
+ apiUrl: '/api/ListMailboxRules',
+ queryKey: 'ListMailboxRules',
+ cacheName: 'Mailboxes',
+ syncTitle: 'Sync Mailbox Rules',
+ syncData: { Types: 'Rules' },
allowToggle: false,
defaultCached: true,
- });
+ })
const simpleColumns = [
- ...reportDB.cacheColumns.filter((c) => c === "Tenant"),
- "UserPrincipalName",
- "Name",
- "Priority",
- "Enabled",
- "From",
- ...reportDB.cacheColumns.filter((c) => c !== "Tenant"),
- ];
+ ...reportDB.cacheColumns.filter((c) => c === 'Tenant'),
+ 'UserPrincipalName',
+ 'Name',
+ 'Priority',
+ 'Enabled',
+ 'From',
+ ...reportDB.cacheColumns.filter((c) => c !== 'Tenant'),
+ ]
const actions = [
{
- label: "Enable Mailbox Rule",
- type: "POST",
+ label: 'Enable Mailbox Rule',
+ type: 'POST',
icon: ,
- url: "/api/ExecSetMailboxRule",
+ url: '/api/ExecSetMailboxRule',
data: {
- ruleId: "Identity",
- userPrincipalName: "OperationGuid",
- ruleName: "Name",
+ ruleId: 'Identity',
+ userPrincipalName: 'OperationGuid',
+ ruleName: 'Name',
Enable: true,
+ tenantFilter: 'Tenant',
},
condition: (row) => !row.Enabled,
- confirmText: "Are you sure you want to enable this mailbox rule?",
+ confirmText: 'Are you sure you want to enable this mailbox rule?',
multiPost: false,
},
{
- label: "Disable Mailbox Rule",
- type: "POST",
+ label: 'Disable Mailbox Rule',
+ type: 'POST',
icon: ,
- url: "/api/ExecSetMailboxRule",
+ url: '/api/ExecSetMailboxRule',
data: {
- ruleId: "Identity",
- userPrincipalName: "OperationGuid",
- ruleName: "Name",
+ ruleId: 'Identity',
+ userPrincipalName: 'OperationGuid',
+ ruleName: 'Name',
Disable: true,
+ tenantFilter: 'Tenant',
},
condition: (row) => row.Enabled,
- confirmText: "Are you sure you want to disable this mailbox rule?",
+ confirmText: 'Are you sure you want to disable this mailbox rule?',
multiPost: false,
},
{
- label: "Remove Mailbox Rule",
- type: "POST",
+ label: 'Remove Mailbox Rule',
+ type: 'POST',
icon: ,
- url: "/api/ExecRemoveMailboxRule",
- data: { ruleId: "Identity", userPrincipalName: "OperationGuid", ruleName: "Name" },
- confirmText: "Are you sure you want to remove this mailbox rule?",
+ url: '/api/ExecRemoveMailboxRule',
+ data: {
+ ruleId: 'Identity',
+ userPrincipalName: 'OperationGuid',
+ ruleName: 'Name',
+ tenantFilter: 'Tenant',
+ },
+ confirmText: 'Are you sure you want to remove this mailbox rule?',
multiPost: false,
},
- ];
+ ]
const offCanvas = {
children: (data) => {
const keys = Object.keys(data).filter(
- (key) => !key.includes("@odata") && !key.includes("@data"),
- );
- const properties = [];
+ (key) => !key.includes('@odata') && !key.includes('@data')
+ )
+ const properties = []
keys.forEach((key) => {
if (data[key] && data[key].length > 0) {
properties.push({
label: getCippTranslation(key),
value: getCippFormatting(data[key], key),
- });
+ })
}
- });
+ })
return (
{
actionItems={actions}
data={data}
/>
- );
+ )
},
- };
+ }
return (
<>
@@ -111,8 +118,8 @@ const Page = () => {
/>
{reportDB.syncDialog}
>
- );
-};
+ )
+}
-Page.getLayout = (page) => {page};
-export default Page;
+Page.getLayout = (page) => {page}
+export default Page
From fd6a9e36007839cbb51f850ac75b5585726724a0 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Thu, 14 May 2026 15:38:27 +1000
Subject: [PATCH 173/181] Logs
---
src/layouts/config.js | 7 +
src/pages/cipp/advanced/container-logs.js | 388 ++++++++++++++++++++++
2 files changed, 395 insertions(+)
create mode 100644 src/pages/cipp/advanced/container-logs.js
diff --git a/src/layouts/config.js b/src/layouts/config.js
index ad0004307a96..a9df0957241d 100644
--- a/src/layouts/config.js
+++ b/src/layouts/config.js
@@ -1109,6 +1109,13 @@ export const nativeMenuItems = [
permissions: ['CIPP.SuperAdmin.*'],
scope: 'global',
},
+ {
+ title: 'Container Logs',
+ path: '/cipp/advanced/container-logs',
+ roles: ['superadmin'],
+ permissions: ['CIPP.SuperAdmin.*'],
+ scope: 'global',
+ },
],
},
],
diff --git a/src/pages/cipp/advanced/container-logs.js b/src/pages/cipp/advanced/container-logs.js
new file mode 100644
index 000000000000..c014d71734d8
--- /dev/null
+++ b/src/pages/cipp/advanced/container-logs.js
@@ -0,0 +1,388 @@
+import { useState, useEffect, useMemo } from "react";
+import { useForm, useWatch } from "react-hook-form";
+import {
+ Box,
+ Button,
+ Stack,
+ Typography,
+ Chip,
+ Accordion,
+ AccordionSummary,
+ AccordionDetails,
+ Alert,
+} from "@mui/material";
+import { ExpandMore, Search, Refresh } from "@mui/icons-material";
+import { CippFormComponent } from "../../../components/CippComponents/CippFormComponent";
+import { Grid } from "@mui/system";
+import { Layout as DashboardLayout } from "../../../layouts/index.js";
+import { CippTablePage } from "../../../components/CippComponents/CippTablePage";
+import { ApiGetCall } from "../../../api/ApiCall";
+
+const levelOptions = [
+ { label: "All Levels", value: "" },
+ { label: "Debug", value: "DBG" },
+ { label: "Information", value: "INF" },
+ { label: "Warning", value: "WRN" },
+ { label: "Error", value: "ERR" },
+ { label: "Critical", value: "CRT" },
+];
+
+const timeRangeOptions = [
+ { label: "Last 15 minutes", value: "15" },
+ { label: "Last 30 minutes", value: "30" },
+ { label: "Last 1 hour", value: "60" },
+ { label: "Last 3 hours", value: "180" },
+ { label: "Last 6 hours", value: "360" },
+ { label: "Last 12 hours", value: "720" },
+ { label: "Last 24 hours", value: "1440" },
+ { label: "Custom Range", value: "custom" },
+ { label: "No Time Filter", value: "" },
+];
+
+const getLevelColor = (level) => {
+ switch (level) {
+ case "CRT":
+ return "error";
+ case "ERR":
+ return "error";
+ case "WRN":
+ return "warning";
+ case "INF":
+ return "info";
+ case "DBG":
+ return "default";
+ default:
+ return "default";
+ }
+};
+
+const getLevelLabel = (level) => {
+ switch (level) {
+ case "CRT":
+ return "Critical";
+ case "ERR":
+ return "Error";
+ case "WRN":
+ return "Warning";
+ case "INF":
+ return "Info";
+ case "DBG":
+ return "Debug";
+ case "TRC":
+ return "Trace";
+ default:
+ return level || "Unknown";
+ }
+};
+
+const ContainerLogsFilter = ({ onSubmitFilter }) => {
+ const [expanded, setExpanded] = useState(true);
+
+ const formControl = useForm({
+ mode: "onChange",
+ defaultValues: {
+ timeRange: "60",
+ level: "",
+ search: "",
+ file: "",
+ tail: "500",
+ searchAll: false,
+ fromDate: "",
+ toDate: "",
+ },
+ });
+
+ const { handleSubmit } = formControl;
+ const timeRange = useWatch({ control: formControl.control, name: "timeRange" });
+
+ const fileListQuery = ApiGetCall({
+ url: "/api/ListContainerLogs",
+ data: { Action: "ListFiles" },
+ queryKey: "ContainerLogFiles",
+ });
+
+ const fileOptions = useMemo(() => {
+ const opts = [{ label: "Current Log", value: "" }];
+ if (fileListQuery.isSuccess && fileListQuery.data?.Results) {
+ fileListQuery.data.Results.forEach((f) => {
+ if (!f.IsCurrent) {
+ opts.push({
+ label: `${f.Name} (${f.SizeFormatted})`,
+ value: f.Name,
+ });
+ }
+ });
+ }
+ return opts;
+ }, [fileListQuery.isSuccess, fileListQuery.data]);
+
+ const onSubmit = (values) => {
+ const params = {
+ Action: values.searchAll ? "SearchAll" : "ReadLog",
+ Tail: values.tail || "500",
+ };
+
+ // Level filter
+ const levelVal = Array.isArray(values.level) ? values.level[0]?.value : values.level;
+ if (levelVal) params.Level = levelVal;
+
+ // Search text
+ if (values.search) params.Search = values.search;
+
+ // File selection
+ const fileVal = Array.isArray(values.file) ? values.file[0]?.value : values.file;
+ if (fileVal && !values.searchAll) params.File = fileVal;
+
+ // Time range
+ const rangeVal = Array.isArray(values.timeRange)
+ ? values.timeRange[0]?.value
+ : values.timeRange;
+ if (rangeVal === "custom") {
+ if (values.fromDate) params.From = new Date(values.fromDate).toISOString();
+ if (values.toDate) params.To = new Date(values.toDate).toISOString();
+ } else if (rangeVal && rangeVal !== "") {
+ const minutes = parseInt(rangeVal, 10);
+ if (!isNaN(minutes)) {
+ params.From = new Date(Date.now() - minutes * 60 * 1000).toISOString();
+ }
+ }
+
+ onSubmitFilter(params);
+ setExpanded(false);
+ };
+
+ const handleClear = () => {
+ formControl.reset();
+ onSubmitFilter(null);
+ setExpanded(true);
+ };
+
+ return (
+ setExpanded(!expanded)}>
+ }>
+ Log Filters
+
+
+
+
+ Search the local container log files directly. Logs are rotated by size and retained on
+ disk. Use “Search All Files” to search across rotated log files.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {(Array.isArray(timeRange) ? timeRange[0]?.value : timeRange) === "custom" && (
+
+
+
+
+
+
+
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+ }>
+ Search Logs
+
+
+ Clear
+
+
+
+
+
+
+
+ );
+};
+
+const Page = () => {
+ const [apiFilter, setApiFilter] = useState(null);
+ const queryKey = JSON.stringify(apiFilter);
+
+ return (
+
+
+
+
+
+ }
+ clearOnError={true}
+ offCanvas={{
+ size: "lg",
+ children: (row) => {
+ const levelColor = getLevelColor(row.Level);
+ return (
+
+
+
+
+
+
+ {row.Timestamp}
+
+
+
+
+
+ Message
+
+
+
+ {row.Message}
+
+
+
+ {row.Raw && row.Raw !== row.Message && (
+
+
+ Raw Log Line
+
+
+
+ {row.Raw}
+
+
+
+ )}
+
+
+ );
+ },
+ }}
+ title="Container Logs"
+ tenantInTitle={false}
+ apiDataKey="Results"
+ apiUrl={apiFilter ? "/api/ListContainerLogs" : "/api/ListEmptyResults"}
+ apiData={apiFilter}
+ queryKey={queryKey}
+ simpleColumns={["Timestamp", "Level", "Message"]}
+ actions={[]}
+ />
+ );
+};
+
+Page.getLayout = (page) => {page};
+
+export default Page;
From b5d48bcddaed40af6839e15ba7a9907c4b22ad33 Mon Sep 17 00:00:00 2001
From: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Date: Thu, 14 May 2026 18:09:04 +1000
Subject: [PATCH 174/181] logging
---
src/data/ContainerLogPresets.json | 52 +++
src/pages/cipp/advanced/container-logs.js | 392 ++++++++++++++++------
2 files changed, 345 insertions(+), 99 deletions(-)
create mode 100644 src/data/ContainerLogPresets.json
diff --git a/src/data/ContainerLogPresets.json b/src/data/ContainerLogPresets.json
new file mode 100644
index 000000000000..71f3dc5b8e93
--- /dev/null
+++ b/src/data/ContainerLogPresets.json
@@ -0,0 +1,52 @@
+[
+ {
+ "name": "Recent Errors (Last 1h)",
+ "id": "cl-preset-errors-1h",
+ "query": "where Level in (\"ERR\", \"CRT\")\n| where Timestamp > ago(1h)\n| take 500\n| sort by Timestamp desc"
+ },
+ {
+ "name": "Warnings & Errors (Last 24h)",
+ "id": "cl-preset-warn-err-24h",
+ "query": "where Level in (\"ERR\", \"CRT\", \"WRN\")\n| where Timestamp > ago(24h)\n| take 1000\n| sort by Timestamp desc"
+ },
+ {
+ "name": "All Logs (Last 15 min)",
+ "id": "cl-preset-all-15m",
+ "query": "where Timestamp > ago(15m)\n| take 500\n| sort by Timestamp desc"
+ },
+ {
+ "name": "Startup Logs",
+ "id": "cl-preset-startup",
+ "query": "where Message contains \"Starting\"\n| where Message !contains \"heartbeat\"\n| take 200\n| sort by Timestamp desc"
+ },
+ {
+ "name": "Graph API Errors",
+ "id": "cl-preset-graph-errors",
+ "query": "where Level in (\"ERR\", \"CRT\")\n| where Message matches regex \"graph|Graph|GRAPH\"\n| where Timestamp > ago(24h)\n| take 500\n| sort by Timestamp desc"
+ },
+ {
+ "name": "Token / Auth Issues",
+ "id": "cl-preset-auth",
+ "query": "where Message matches regex \"token|auth|unauthorized|forbidden|401|403\"\n| where Timestamp > ago(24h)\n| take 500\n| sort by Timestamp desc"
+ },
+ {
+ "name": "Timeout Errors",
+ "id": "cl-preset-timeouts",
+ "query": "where Message matches regex \"timeout|timed out|TaskCanceled\"\n| where Timestamp > ago(24h)\n| take 500\n| sort by Timestamp desc"
+ },
+ {
+ "name": "All Errors (Search All Files)",
+ "id": "cl-preset-all-errors",
+ "query": "search all files\n| where Level in (\"ERR\", \"CRT\")\n| take 1000\n| sort by Timestamp desc"
+ },
+ {
+ "name": "Standards Processing",
+ "id": "cl-preset-standards",
+ "query": "where Message contains \"Standard\"\n| where Timestamp > ago(24h)\n| take 500\n| sort by Timestamp desc"
+ },
+ {
+ "name": "Full Log (Last 1h, no heartbeats)",
+ "id": "cl-preset-full-clean",
+ "query": "where Timestamp > ago(1h)\n| where Message !contains \"heartbeat\"\n| take 1000\n| sort by Timestamp desc"
+ }
+]
diff --git a/src/pages/cipp/advanced/container-logs.js b/src/pages/cipp/advanced/container-logs.js
index c014d71734d8..b77aac6590a9 100644
--- a/src/pages/cipp/advanced/container-logs.js
+++ b/src/pages/cipp/advanced/container-logs.js
@@ -10,13 +10,17 @@ import {
AccordionSummary,
AccordionDetails,
Alert,
+ AlertTitle,
+ Tab,
+ Tabs,
} from "@mui/material";
-import { ExpandMore, Search, Refresh } from "@mui/icons-material";
+import { ExpandMore, Search, Refresh, PlayArrow } from "@mui/icons-material";
import { CippFormComponent } from "../../../components/CippComponents/CippFormComponent";
import { Grid } from "@mui/system";
import { Layout as DashboardLayout } from "../../../layouts/index.js";
import { CippTablePage } from "../../../components/CippComponents/CippTablePage";
import { ApiGetCall } from "../../../api/ApiCall";
+import defaultPresets from "../../../data/ContainerLogPresets.json";
const levelOptions = [
{ label: "All Levels", value: "" },
@@ -77,23 +81,64 @@ const getLevelLabel = (level) => {
const ContainerLogsFilter = ({ onSubmitFilter }) => {
const [expanded, setExpanded] = useState(true);
+ const [tabValue, setTabValue] = useState(0); // 0 = Query, 1 = Guided
+ const [selectedPreset, setSelectedPreset] = useState(null);
- const formControl = useForm({
+ // Query mode form
+ const queryForm = useForm({
+ mode: "onChange",
+ defaultValues: {
+ queryPreset: null,
+ query: 'where Timestamp > ago(1h)\n| take 500\n| sort by Timestamp desc',
+ },
+ });
+
+ const queryValue = useWatch({ control: queryForm.control, name: "query" });
+ const queryPreset = useWatch({ control: queryForm.control, name: "queryPreset" });
+
+ // Guided mode form
+ const guidedForm = useForm({
mode: "onChange",
defaultValues: {
timeRange: "60",
level: "",
search: "",
+ exclude: "",
+ regex: "",
file: "",
tail: "500",
searchAll: false,
+ sortDesc: true,
fromDate: "",
toDate: "",
},
});
- const { handleSubmit } = formControl;
- const timeRange = useWatch({ control: formControl.control, name: "timeRange" });
+ const timeRange = useWatch({ control: guidedForm.control, name: "timeRange" });
+
+ // Preset options (built-in only — no API save/load for container log presets)
+ const presetOptions = useMemo(
+ () =>
+ defaultPresets.map((preset) => ({
+ label: preset.name,
+ value: preset.id,
+ query: preset.query,
+ isBuiltin: true,
+ })),
+ []
+ );
+
+ // Load preset when selected
+ useEffect(() => {
+ if (queryPreset) {
+ const preset = Array.isArray(queryPreset) ? queryPreset[0] : queryPreset;
+ if (preset?.query) {
+ queryForm.setValue("query", preset.query);
+ setSelectedPreset(preset);
+ queryForm.setValue("queryPreset", null);
+ }
+ }
+ }, [queryPreset, queryForm]);
const fileListQuery = ApiGetCall({
url: "/api/ListContainerLogs",
@@ -116,12 +161,26 @@ const ContainerLogsFilter = ({ onSubmitFilter }) => {
return opts;
}, [fileListQuery.isSuccess, fileListQuery.data]);
- const onSubmit = (values) => {
+ // Submit query mode
+ const handleQuerySubmit = queryForm.handleSubmit((values) => {
+ if (values.query && values.query.trim()) {
+ onSubmitFilter({
+ Action: "Query",
+ Query: values.query.trim(),
+ });
+ setExpanded(false);
+ }
+ });
+
+ // Submit guided mode
+ const handleGuidedSubmit = guidedForm.handleSubmit((values) => {
const params = {
Action: values.searchAll ? "SearchAll" : "ReadLog",
Tail: values.tail || "500",
};
+ if (values.sortDesc) params.SortDesc = "true";
+
// Level filter
const levelVal = Array.isArray(values.level) ? values.level[0]?.value : values.level;
if (levelVal) params.Level = levelVal;
@@ -129,6 +188,12 @@ const ContainerLogsFilter = ({ onSubmitFilter }) => {
// Search text
if (values.search) params.Search = values.search;
+ // Exclude text
+ if (values.exclude) params.Exclude = values.exclude;
+
+ // Regex pattern
+ if (values.regex) params.Regex = values.regex;
+
// File selection
const fileVal = Array.isArray(values.file) ? values.file[0]?.value : values.file;
if (fileVal && !values.searchAll) params.File = fileVal;
@@ -149,10 +214,15 @@ const ContainerLogsFilter = ({ onSubmitFilter }) => {
onSubmitFilter(params);
setExpanded(false);
- };
+ });
const handleClear = () => {
- formControl.reset();
+ if (tabValue === 0) {
+ queryForm.reset();
+ setSelectedPreset(null);
+ } else {
+ guidedForm.reset();
+ }
onSubmitFilter(null);
setExpanded(true);
};
@@ -160,115 +230,239 @@ const ContainerLogsFilter = ({ onSubmitFilter }) => {
return (
setExpanded(!expanded)}>
}>
- Log Filters
+ Log Query
-
-
- Search the local container log files directly. Logs are rotated by size and retained on
- disk. Use “Search All Files” to search across rotated log files.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ setTabValue(v)}
+ sx={{ borderBottom: 1, borderColor: "divider" }}
+ >
+
+
+
+
+ {/* ── Tab 0: Query Editor ── */}
+ {tabValue === 0 && (
+
+
+
+ Query Syntax
+
+ Use a KQL-inspired pipe syntax to filter container logs. Separate clauses with{" "}
+ |. Supported operators:
+
+
+ where Level == "ERR" — exact level
+
+ where Level in ("ERR", "CRT") — multiple
+ levels
+
+ where Level != "DBG" — exclude level
+
+ where Message contains "text" — search
+
+ where Message !contains "text" — exclude
+
+ where Message matches regex "err|fail" — regex
+
+ where Timestamp > ago(1h) — relative time (s/m/h/d/w)
+
+ where Timestamp between (ago(2h) .. ago(1h)) — range
+
+ take 500 — limit results
+
+ sort by Timestamp desc — newest first
+
+ search all files — include rotated logs
+
+
+
+
+
+
+
-
- {(Array.isArray(timeRange) ? timeRange[0]?.value : timeRange) === "custom" && (
+ ago(1h)\n| take 500\n| sort by Timestamp desc`}
+ sx={{
+ "& textarea": {
+ fontFamily: "monospace",
+ fontSize: "0.875rem",
+ },
+ }}
+ />
+
+
+ }
+ disabled={!queryValue || !queryValue.trim()}
+ >
+ Run Query
+
+
+ Clear
+
+
+
+
+ )}
+
+ {/* ── Tab 1: Guided Filter ── */}
+ {tabValue === 1 && (
+
+
+
+ Search the local container log files directly. Logs are rotated by size and
+ retained on disk. Use “Search All Files” to search across rotated log
+ files.
+
+
-
+
+
+
+
+
+
+
-
+
- )}
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+ {(Array.isArray(timeRange) ? timeRange[0]?.value : timeRange) === "custom" && (
+
+
+
+
+
+
+
+
+ )}
+
+
+
+
+
+
+
+
-
-
-
- }>
- Search Logs
-
-
- Clear
-
+
+
+ }>
+ Search Logs
+
+
+ Clear
+
+
-
-
+
+ )}
From 12a07270752ea03f3c94eb33f419fdd7336f5985 Mon Sep 17 00:00:00 2001
From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com>
Date: Thu, 14 May 2026 14:34:30 +0200
Subject: [PATCH 175/181] comingsoon
---
public/assets/integrations/autotask.png | Bin 0 -> 7685 bytes
public/assets/integrations/connectwise.png | Bin 0 -> 18445 bytes
public/assets/integrations/kaseya.svg | 3 +
src/data/Extensions.json | 30 +++++
src/pages/cipp/integrations/index.js | 132 +++++++++++++++------
5 files changed, 128 insertions(+), 37 deletions(-)
create mode 100644 public/assets/integrations/autotask.png
create mode 100644 public/assets/integrations/connectwise.png
create mode 100644 public/assets/integrations/kaseya.svg
diff --git a/public/assets/integrations/autotask.png b/public/assets/integrations/autotask.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf29404276136ca8860f3c62fb3bf6a60ebe5784
GIT binary patch
literal 7685
zcmc(E1x#FBw>IuAZpDhrAT1P%lu{_}K7$YL?p_9W*J3Sh!{9DcpcF4&Y^D^4;;y~C
z_f5XM`EK(4H-G-*-`P1?``OQW*4isO`|Ohwt*$Ef1n(Ih3JS^-1$k*r6cjWN3JR(i
z4*DY^^nx(*5eQaS)|QcTQAUvt_z}j#%?`!BD*1^-R+`60&Y%cpuN9?hnwdVU$IY_Md$w7RISH|4cNGRe6k796=@Qz^jic9Uwp>uKc(o
zyF4^iwNOyq?{5VT(vMG{UtgF#=u^lLVqs8iPAZ@xrDxGTpvU38j<&+g!>}JMIec>2
zUARm3%Hzi5;rCrXhe!~%6E05M`b`Bdz6MK2EE6%TVS1A;@EhEEO*OSBiH)1)Y{G($
z^UdN%xg+nLGSa7Z(0AcK{3#Gu&8{bJC4~rH6zM{A<@Bmn5=gTA;%(1mNx2%Azh-JF
zMZ$XXMPKwAtkUmiGOf;;O}Rqa7beVyD-G1W?%qY+?MkIg*8ZG9v)EohL3!q*AT6ow
zv-o@Y+Jw}a9{Z?xH7X2DprFoJ_)a?^>^(67i;s(ZYxQ#yjJkFXGV=1YJ_^hkzvnt+
zj`o->OGX_~@yp+Yx5_JChim7HdxVRIN%r|e%2wY-<}XekhB7TSeY39D#U=y<2>GcW
z>-PVp^2&S(CVuVwAshqR0Q
z?%U1m+TbvBRL#YQ?J4Tb>r5)+kYe+T)I(Y`r{FL*%qdk&Wb4-#YJ5e8A^lqL6%HT_
zOG`51`lXX`$jqbBb`Mve#Y=MGy2`NU`u0NN7I&Cj{tdZB)@#1NsL0Ug$J*bGpop(<
z6x=e%gm=ft>=p+Q`5JrcwR%Ypn;X|vxc{Tq{CM6#NJdn;TlbW|F*IoLWNfcIMXaG;
z1=Cr814z=5J{kl~v*ZIxlo5pWeUYsDD}gK0GypEErfRy>z1#UI8xR_0Cf8VZqKZjv
zHNVo*p8;rlGlwlhf6Mj<2@&*36aW=V0<0cmMZWa~I#AlPn@c3LMS-ImkA=NqY(ml!
z?H!92QA^pOjoJdRz
zI7x*oqb4luDe^Ku=&<>j!v(NBI6#&g;o5-MpQiS
zySpi)?7vX$m=>^%w}kC(W~`_%ftU!*@uO`_82`My9oGJ?14aCa-<~B|0qU@Pg^O;!
zBE?YZ96tF5*EA;ktGEm?e86S^bvJ!KH>l#=wwsNZ+qD#z&`8$!)^GkEQeJB){+6fR
zuuX3N<u{O)U`ERAd(r)vrov~$C_5;I
z8Lboobvw_#ax0-jGJFro!l*jP!b@eDuuS>B%l$;%G6(_lz?ARa9v8_PSkMXo
zCWR67c^t{#1LlnMQN>)@P`sPEp2?p3c`^SMR9eIsiiV*?;E&e>PUaPDP)2Uw@m2
zvgH%IU-~0v52eezvGWX^#%FO&tqwe*W@MvajQ^@zFIEI?JyWU9`bxFjB4g&6|3nJVO1QWseCnkFA4y
zD*#~=Qpx0iS1ep;I4)M8B{WOMXn6AFfOQaL)1#oce4Nl(l^r{{+mA6ary{luMRIn#
zjJa7>5hnpslBEmq+J|RLQgaVahs4rxtFb67>-mvABcxm$@$8wkPK6e}I*W6T&c?cv
zeopjVqSh);5KLX>B}2lCx({slUJ)%maz<&g`v)!sG-dv3AqpnD#XLKlp|$
z*u&03!}2ytZ|0v6JALF3&6Nv9zz|v7#Y2@z6oNpz3xJQ)$7P|1FhPB{EwqDkV8fcW5H4Ul#c|vL-_EvSnfhmoOv1>O)Z)qV?cGxrNoz
z!>3RCLbE~7cbZKHnzOh-6PWc)JitT`(7LDz6BPQ$^|;-!
z{eMNhbLDCJgx+|Dh3c=sTaWj2PBtNuiz~7$;1cu=)KZq?w2}LqFlXOi0n~)^2LzJ{JsuW`p_$|M-f``3sjI*`
z`ebNoNBIgx<>2#mU{ZM;1_DamSxeI1Wje&c0y^%Z4Mjuh9R9GHC0|G;d*6pM1hb?0
z*7yppXqI^Pu31?~b?Aer1=ltg@DQ^`M$qcDe*(w>lCIP9{0_rAZATiTsyIU0euDJR
z^J2ajkEb*EI2ldx-9=~}&aaxJ{RHa`r%J@KG+r_RNiMd9Wd
zBGxB?T&e3cM)2LeY@|bZ+7nhjc7^1sU8@U?sM~X|RDrXeKL;_hhkq^(DJARh^h66h
z?Hnv~NMpf6nZre5@V&2|lUP;8)Pc|_Mnp?y5$5E6VQGRj%r8d-4>`5VH5s`cp`7ti
z6IPfjY?_wN#sVtA(dE3I@A|66Myc~@c6UkQ{xq@2|5ybKeHuvKNZ|=X{%MghBd%V!
zpUhu{@cVkexop|Z-kj|ZkZfEG3EV++eia{@`%X$|kFW^pL1SixI^{I9*=hKlGm6c0
z>ViKq_#DoxhxhMp1z*d_S9`5I(HAWcY~(BK9()d(Lu^mD3|e@=b2OsybZak7XZ#k8
z$s#%_tRFyFP4?#D0g#d|wI1Wdw>ZM=K+UN$D0n3$og#B^eS@-@Rkb2;_51HT6}c&
zp24?seV2-8Vo?iv*VTeB5JZ+c+fA{nbep|&4`!`Sqgc9Q&J`82yKKME2g51_
z-{#Fw>qJ}4>RxuGyh`{%W^iDwt3ui2X4r}q0rmIx>MFQMmJW`6c33VFNauKzI=xnl
zv1n+g8|!hlXDjp5WNlidfwKFhK{0seH|dN?yCc_GQw3JN_0;BWyP>;Qb}m2$E-F0i
zmm*zAfVXvCSnPD#HjDqx;e7$BaFZq35(f;Ci
zyu=gWg8Nw=
zaqx0~DfB4FGE@9);qVrLEI%^yygAxBeKV{OTGA9!>&))5>`@^|aFQv?jzRG{lx#P^
z#$3FHp}hl|bi-SKd3MZ$k2nm-xBkh1RE6*1jOo_%Q&kf0nOUQ
zV@9dY25*O$iUj+H8#Yxyu$k29pQl(1r+d=x51!2HU!GL*uhJ4GrY#s-ueXCF*0LZI
zgbxn|&JQWM-WNVe$a(KC;Nu`l*Vplpz6+)=$iyni@iVwwiat262#<)ma8O=l0-32`
z9Am{3@^j4SXt8MGH=O8Msw;S227$dYrbUb6@s0NMV!{QO=Au~+EWS~!{lRwAeP&k
z|8g=B=*E!d2JK2tw|pUA`Zepl`GOnG3t}T>|L3NPvQeNvco9slDiyiHs+wBDu|-z`
zug|pEs{L6XZwu28Te*xUecdOhgm3xOvUf^C9a5FK6D}UMBdL4%#>_BN2jIg3eYnNk
z|4`@wD0`AY?8ZEL@+#_H7ox1hjvb$!6)Wzh-9dxS2S2^dc%#-au~y&TMZY6xPLYipElNFNB_I^9nyLbOc__Wo`A*3$eokW^&U^bJ_CwM~(&7M@0tKiVJ;~46R3l_Qa
zCtSQ>#Q>~C8-(SpPDHA
ziuu%CKmroh4(7krG-^$M=M~
zFCU*5KL;gTC*^wNy@#nssC-$Vv{z1nPZ`w#-pzfK+u;ciSX;4+$uYLp4m{0)OnSN;
ziO3mFE^|j=jSy=SaAT*f0e9Y-!j$(iITdkX-=(aJuBK_c#fl*^D%=2+Ir{?Irrj&j
zvglyPq#UX^oE*sU^q(7Qpy7aSiw$fvZ#V=KR|4Hxc9Mi_hMK6#oO{cNV&{m+-%K%+sA`PNT;Htm*hB-bP)2^(lHq5x0NZMal(BPH
z$A}=b%J)og{x*U%Gcco$eY}bX`49Pa3s|`s=JFv!P})p$%xvF}1|Xje9(~3*b2*#7
zw+RY&0(nY$O|DK>ZCuA{t}tx0c=kg@NgxK8(IPk(A;OrVW6)s%o7sE10Pebbg`31q
z&=WcgHIv4?R)!Z(T~q&r$J*C{b#ga+ZrRh&_wYQlNfSf0F%!(WiLf)$i{o5bTHKel
zyz+3WLH&NF?rwI{1oSH@@XuTUCo*%`!4|Km(L~2jK0>0Wu3Pusq6GxFp3`9{O=yry
zI=5lKj3J#XuYKDw)8EB^@)Y^p%SD`%;$<6LW@Dv9vqH$0M9`k$QMW|(S-98$Nw
zQ(p6$POs6`GOHcJk46EoY17dWBd<(SZJAvEI_>4IcD4
zP49z6UVzZ8rW!f;VN{E$!P;SaftV?n;&eW+EZo6Dpb%S?l#?Ty!ZHmC!1Q-cBkE<-
z_woXzCMm~^uGQ3))fFfETnw;+fi=vBo+)5uUFr=d
zrwCF>%zZb0id;0)9h#vq>>qNX;`Y>_=)Qe-l)%3rFtj&xi0J(YIh*lq&LM1mMm5;R
zRiwY^)RsA?IU4jD8jMX1O5^=Kozs~eK4}@rBhJNIuv*gK40)!MtcO$mb??vOx
znrN=@&iAkM1fVrLI;5g`_N0}1No>h(DA-7pp{SF3Z3c);U81|LQEPh}HUKOt{Ygp$
zc&IpadMCci*%v}IExw3V>tMY7HKVNxkkp6TNRM77nr!rCOpH
zA|9@cp6opt@VK&
zVTk!JWCwHTy*z?2p&4teIA*!><7Zw1x%%o{{t+&cT3h=`+VmV4VrBA}_9e*#+}e>t
zIQckpj+kh3Xq2T4=XDusQyhS?m<7C+?3*JOzKgj}-!mSt`Z_f5J(Y9vm{ITr6V3A3
zEVLixEKEzsC(s!dW=+=})hVjuh^1h0S5P0(_)QYsD;0Xjtb9EtSoMqGuKcyx;&m;>jj%UEK|qt+L!yN^{N^)uf{Uqcgr7By?KH!F0^3HV6@Snik{M
z=i9-J<@Xd!u*%z?5(YQ!pCe=fqwDTuZFINi+zXxA#{}iPha@X+E|1mA`>gmZs#j`ksUDsa
z|2p$YoTAwM$*M42y>IwV>)4BV=Gf}_;17c_9=mVI?kn|Wwy8C+);+$`k-)z5(20P)
zwZ3G!X$kDzF>3kDj)vbhEzg&NcSSoBO*_uRIcuVgOhJ!E#qXfjED6$E5I8h#W6BpL
zjH@e@y&$UWlKZY3?1!HmVu=@nf+A-a06b7`U#r1()~WPTT7O$j^=Wl5;Vm;p-emq2O0kdTR{@
z=gt^)W7Wzp$zo8Pc%_m_?m_TvsIG_-+p%va%3_wWPH`1~FZ6w_8#~hL4ocozxs-$k
zNpeA5lDF?c^S7M>KF%4uv|=$t+}d<=$)V)w%%`bg0*S9A0bqPvBR>+DdZ~fB7{7;O
zPOo)|<~W0>C|=FH%&QObJWpAyMN=T*NP=6mVXKKGl|1VnKk&%Q+)oX5nf|L&9DR@P
z4lpYwe)d$=**aKeVCU{fcOixIw!3BTJ$`4R;xtaLRHYT=T!eCVds+Mts=zv8dV_)0
zH(URU#boI4{sW5p5)&qV54C1jV)|JAYPKj}Yp=YA&KuWJAJnW|BN5M9L0&gTSnDz7
z>@GsqxgejcdV9;nXxyF>8^l#x2daIAjvsdFjb^rYhq9ep3rbcVjF$%U{n?>~Phtr^$
z+}RE4-;5lMG;zpDu~!!~;C1
z%wgdpJ`=yr74PY3*x$}=9v}Zy8ZFQ__NhRi>HZ^IzB7KdFXF|IChPh8(UY}k>G#M@
zm4(wTd?_KXgr*?;>q_6%g4(nDd2kX)P@PM?6DVgGf2M>HtTI5or^9zqJ
zop-(PkYk5VZi}z2qU6RtP>w41O_xd!jfx?TJ=#(Uit{S$7N?AA$nZtJgR}XVjj_u7
zf@g(~f1~dih-rajRDnG;npKTO4MXdAlkR;yI&*^#RfU~HSJK{2Px4h)(#~~K({<9o
zOZ&vU@dH~LpA5p&>Pr7RDfiApwZn(?PY+j!_R>0N&caDIu=DnJ)9O&>J-LD6gK0rb
z%eb>i4XADN65{d8+0e0?pHzEP*VI0#BCbY1mnS;`aQ%W(?AcV^_P{JwB4TW=
zqngP^p52`FPdj8*fI)Z5bs*UKwr`+eyf3CYpYxk2A@NKP?u01e~$9z0%>DB+JHyO5&-*z~o#%PZ+2`FzO?3sLM|6(>005Da;yY~sfB*^r;6^;W
zhaI^k)dXVyS!$~4$|<<1vI;o-Uwrr-SpUyISY&>O_l)?J*yWhLwAFP0?QeonB;U+m
zj<77dX(m*)qu!9Pd4q*ZSSO7}zWOV&z_ZRFv^2I3dHSzgrol?Ht
z9GwWoWxe*_;p|}1*t(7_(=KS{f{{^ww#K6W|G)p&8juM2@pb?4{mlJ1&%Bo;04I_b
zVp9nM|EAP-zsvc0;Hg_S#X_zSE1rj0d
z_YtR23=)c##ih{@Ck&)$2~0=$fP+?vEC5v2@O-T&G#WM{F>UGh!Q)7zq;g8~@u{$N
zM8SLf`J%*E8?@qtIt1cd(l)T9VQk)Y;B6X9@%W{jx`{c?^dpzLN38dLw5z3_g&f
zO3$!D7+ec8;hCt!S^J<8)bSbl)72%j4@fqZgYqVA=y?vsL9IlcZB64$*|BdP>kj&v
zu7o=XLt7hQL|SOvWm$6g6wwKFyp@O-G8HDuj8Mm^i0z~XQ0p6n77|0jt!pxM8_Gh`
z%!tKVgt}|pLomRKI>X~Kn!4mdw#}&f$hH&onxk^(vM>w+s2QgB!p>B2UkMG|yd+1Q
zV5ZN7grG!CD7^OWfa+4SJL-$HmN1tMqod7E(Ak!Bm_-0L2RQ=ZM~y@h9p)?}bk!PU
z3Wh`BrwwcvWh{GZuUT9yoF4P~T1va7^=@$KtoayGKT~3e8@S;53Z9-
zRPtoeoUtS;AGdI2Q>1E7|w^_txX_Y1BJ$7U=G{Z7;nQyupH*6EFya^#$CjK)wG8%`7HXLF61(FV
zl&T{fx|eqeree&Lj9VF?IBpdSL{ybDj>pl-j~Wq5c--cI6vtJyiHcm?&~5LGle1Db
z0J3rPgwoSg@Va-=pF_U%p4P-8#o&i3=663C-00@iG@o-cZVeyBF2u4gYwB@z+Id!(
zhE_iS05l6=GHq`jW^NcYGM>j^w`1`n;v4vz)R_^@JRtz^=H)o<4X!3|odE{`U~fsK
z-3IXm3^h@43qovtPZxXd(i?(=%kOSiAO{|$sSNH-ScErkQ_PfxC*gXH_)qn-9?=T*
z=u<+zMOfD}8M!nCS}Xsi=?7mI
zv>fZr`R38eMJ}Fk(rV0{V4Bo7|YxUv4dmt6vo9GI|6+>Nok80o4w&7tvtU@ExGo5
zG9r-%3wm9)J#Q)PH2~X*Dg{JmxqtGogv2ke$1M{BVx*q;yGdC*l)G94p|Ed4yh=S@s8g%C6
z?aR~tBQPmAm-pGsd`{5FF1({@vP%Z(iaW%3B)U-~+Ckx4^izh;|qU#qKPMQI=o+Ijsn
z-^=tF>!!vYo9Pce?P)@p|4bEJ77zkf6hWi}70_HLzK7HP&oDudoYq%#2XK(Z7&1%W
zDx#lMl}cg9gB596>D}?y;tqJ=7gTxIAvwRVv^)XCo9@|DtWZUyY*#cubm%vvHM*>@
ziaKf^2e5owr_+$$5fgr}RLw3EWNfXL1dLLKn@oa9JIy@aBCxh~(KuyXt
zl;s{>c2~FZgK@;4U3jupwP6XE%xM;Cs;ZsQ`ma7MBbm32HAaM66f}S$^-p;bMXvU)
zZn(IBcD8M*OIng??dK7&*83vG10~yw=hF`0Msh6LaM+676Xotg}0W<`fo
z!bv0H;E(H$XMG|8DYXsnY>BG_a{IA`4AWb-)Rj|V)~kbO640aW*AbFMgz*Tseb+y`
zqLTkm04Q1D$qlWU*FfIlVxe`&M|?e4`z
z^ri*NhrrN@1;@ISK4ZwzNF`qAA{iFv`Lup;T|aWF%A7Euf)4-7cB(5l9^bUJ&*4b&
ztc)X8T)@c#2M`?IkMsdLJOzU=aztxHF21ZvgUbF5rpm6eZ(97p+wnhMh5In2y5gV(UfMq8m=I
z>nZD84^J0;V}Jll%iU}d6SpR?>-?qf7_c*mt$Bu-&s#F5!drB&5jhh0I;ee@v-#@S
zx8b!ksjIJg<8N66^uTfU63U3aSr}m_52PDP>4$WLGUtrrlr1c|mAQ^aBTs{;Z|pWC
z6=hCE85g}eD;Za6FCfiSGusDkLW1OTPa4mS%QeJut5hXZip|O#OL!#)olj(LFz_FK
z=K=oPrIT1r@_*?JjsCV4>^r_Lqjj1p$_==>Y=9~ObJrlL6wH?=bwDbEf&NMZP>{c<7J?@4mtibCy;6<_T)%O5ARVS9-E0rV;(j
z=V^v%JVyzrffi(UIaq3u5$^51Lv7lxmDjgv{@wuYCEERb)oprIRR?}?CrMy-F82%^
zeR7GJ900+s{&)&kL(i_-@@^2-10N@@a^@jVz8rn>h>osn2qYaq8gol8`d-`uf>k5x
z14qxY8e=|Cj3NiBlw$r;7MF#p$tg~IKUYqqeMtwwE7M4N?^V9_U6J9=PboPbM%tg6
z3e)2Qk5ZdhTn5a6+xfD_lb1d|yflA%Spz$c*ecCUfis&%v(IyPN*HI3tNq^P0PRH~
z^uBL(CH)lJUo}&9CZb>>Bt)nLbQN&IxydRxBS|#sH~QR-v;!J_utM4;ywP-3+r;1m(0#s
z?W0Cf;87kYu?B{ItM?`1Snu|rop#}LjJWKTF_2^o9gYfCvL;%1;CtV`0&wZUhpEs<
z;BwB(H6#uoWp0PhqbhGwx@eLPzJG>KU6QRb*@Z!q@$}44-CcrC?n$-JxpDiuGo=VG
zwUII$9d@O3Tcn(gvUcP?!~?W#2J>`l+^gE-PsQ_uS*?A7Zb&v!(Rv_ht<7D=Zi0-5HxTX^Q3jJi^h4Zo
z`Uu;`re=IYTYXo&KlRq(o(sy$=^hqn>e3FvIs?}2qGmV}feq4fK(I>%Q&|%5BSFLD
z&EFGm5}X=wnWQBP2@=FNx#ibIo?pI+u9v;>QwT6C;5ip4hz2p?WI#HNPj{sHdmqFp
z;ZH9i>~=4qgl+G>_Q@pxi(Xp9p2!KTq&TOI4S*CMRbBAR&9?Dr$V9V@W)8W&wvGe$kbG_VJO-=OFsJhx1H-ZjQdnF3;dza&-{eQY;Y+64bnEJAiBCh;#f)f~Ker;|#i
zM#=f!FjXIjAcg{mTeJxEsKjfKLvgV9%l!wokDl~E*uFHT=D@TzFIx9iJ~1j&TzXW&
zch{rcI-TWTghLNI|X;P+pHy;8NRlq0j}Kyv{4Mp4kBr{?DvtE_sN2E{yKN
z0}^&)&T<1~z9M_iN~?gNvV^eL|EAudG&(1U8@>sCa?WH1%JK;u`?0jHBK$s@WuZK3
zq!#Z)@BVz!A?|`(4ugR-#S!><
zBLN<=oqcj$nF^|!Ia+(TvGGN-hnD5<)C$-n2N;?2W3fE^j(ibs*q7>Z
zH87s@0qsoLO|Y69jhHTiIA>)7EvVx`LE}DM{P>dVI&Q3^Wenp|eH&VZy!@3`hIi$G
zvz3@j81na|l&{A3271vfNSg94mJ^(EPAP}@M40K+nR?2Q^y75hk;8Tq<%l17i~lh1e)Cc!|i=t)_2X;X(qK31w12t
zK$yZ^S_2;!8fQFE6upCPHP^01hw4p2Bra>N1hv+=r#^~jxd}3;qWe1g5t-rA*PoqH
zX(L^oCBJQT!#_p0V`7!X{a=V~=J2_#EvJ%R9C?pC2~D1Ry1(Haj@E{gyB|<0tsa*v
zr)H@w&TP%4mV%{AE)NUYz5vS@9Mn#{g;zFtc)ZS=NvY1WR_6!l<4LC6%gRro8#2b#
zoGYwueJMYJ4#`Zx?Oq?Ow)`!=J1`4uAFvP5`h04wv{Au4F&pS4kAF7#I(1M6llZgR
zcwm40Wm71uI|)dCRjP;>;=JDF&T;xq7lP3J{tPeTF9zG&~Gq@Ff+HS>hU7fO_4PJ`*V)Uz(F9&5V2MMjE5uG{$_svG{@XL=TVS
z@3lbJsZp5-$9Lw@xq+o@o(FKDK$$Yfo$4#Xid-d$Z0ZOz{np-OxZ_o+0wNCH>vKf@
z+Afz7{grah#l<9tP`$xAt`bL3gpJ7Ley1}@+rdCxw<`6wxK1nek0nKwQTiK<{-PGg
zV6htP0W*!Wr=k<^`bV|oVtm5Y(n$f#KAkhz=P~V$tN8I_vh7;o@BUregBsgpaeBI&
z*-)w04YKW_58DGYh&N=;_y~RX5Qn-iAWXXT#^3`k60h3ktHJm2i_8E}I0j>i>1jdJd%8x7AqXR@6
zXDq_uVe4_ZIatH5%H
za|NcTJWjXX99-kLC{f~J(=7g+DJ)aT%Z&%VLV;vm!GbQtFUcHon?tbg`W46^bSc%H+DEX9#IdYS2^quB~pFiONwiRR7!atNC?0s
zlP~Ure|xlWE;|;8kgX$XY`i}dh&-A0c&BS)(^=^_;{V|(R7z;HLqi=9D@?~JjHEq@~F7Ie1W
zBy^p@j|6_?^HGaeD@%$6tc0-3SHv%F*sW5OuWOf(>0>umhd!-u%8GA9rein0Ly5kl>uY6^ihSJ4ZrwIb0cVh--@-+7wzjwzd+1bU*rp!*a%;s){?Pt
ze>4rGD7_a*L99tCr-Az>qKi5m;k3-X*1vhaT(}9%)
zZ}Tv^jRBE8zjwtLXC$Mzl03&0SbjfneK<8alL&)KMz|b-F#;cfuV6xiU`khfIW%1d
zN|y%*b=7%HG|f5sN5=fXGAjkN-YB3o)wfdS@2{A7ySiWC^GfLv>SHS81(P|RNY3r$
zG@*^!_hoM93>5-&=NRZ7Y7)6mQjy2)vH_is96m5>cq^6XJifmNHla
zPphZ(SRxv-T?BwXC6S$uDTKqBpN5Qsy7o5;&V}T%*N3Tvjnmsfg|I*_9Po3D10}+N
zHr9z4eB87c)Ia38*5YBFg0B6!nzG)CpZnyj0;!$a1%e2O!xp&6&QG)<;Xnwwzok!u
zW0@QFv=@x=K$kKgR-cw$Xn{v3R>Ln<)A+Rf!n%1;as&=;AHl?6>38hb7wTYb(sfwK
zlSXeecG)yG3m^`7N9{xgJD=PIdK+$;UMU^MFEK`Vp~=$#LM+!RwCM@<`!FH`AHxVf
z0;7RT&ifnAal~NjWx_+zx_|L9790NCk)Ju15Jv(C7rXnWxH05P!f&k{jOH
zmA&4G@B4Nq8$ZKaCAQJ`R?2!lUa3Z`0AaLU)UWp^SIT_QQK|DlCB6(Cm#dp2t(F8Y5JsOFKj(O0Fz$Ui2#mk~hE63Rum
zTX@k?&j_}j8>&4VH$JWHa`*rTr(U>3lwN5SS2EV<#r$0~|TkTBJ~Q!B4>+3tGw@dKFY
z{fZoW$w!)Ss2FwrqH5i+OYC&f_tn6J%w}>uo586kXsdr>qchdD1ki|z)&OTOadnwhJpvwuleC1Vs@#)I8VFsxn17!|N``p;
z;1dp%l$GVI0|c)?Z7vfUJMvqClf6=FgGpmVuXnk0QVES&Wrm2@zaM*G1X4#6S}lC#
zE_o7)KV_W8$@sbq$lgy>MCXm9;z6|>I2=RZ)vGd+p)I0^%hB@pL~a!v1wM*gYb&N<
zD~Mh**B|~UsqiSuE0cTc=a%8rDSXg7*!^{Dbl$aG42#HlARMc4i3ifvXW}!V)+X=v@!HsjE9qMHMHEa(j)-j~6*sIvmnxLQjF#H<&p%5!Br
z6(}M8Hn-C(F{FB){N?bG`=o!Mxr0MOE;|!qgfdzlbtX{v2pnG82^!=z#b)hmPnQwl
zrmJP{og8eO@N>f(GNoPp5WTQ!vv-z>sLBqu|7H5sJ9{|#6Fcs`ZHy%@^!?7jBSe*P
zu^2i)D@(QhzMQXdf5!0jHYKM6=iWZw1MrI{t@>D3G(GQB<^Gz5D7SiPJgZlFR+Pvn
zYW47{p;Bw@@tIM<13`nc%H-L7kEorqM1>U>PMi-S{oyDWxGrY
zy<1O-ushhXSY((oIjKf{{XG6g^6}l3Iq;WRMzcvoAi$+RRFGXA%-PB0^yIMrUSNS2
z2E&y)MSFXU@N|&Kk#gkmK6ols_%;MMacTY#T%4AH^(zN6T+R>O$+rx9Ifb;+65?Bi$&`0sqs`pb18(3%Bk4wnLvTis?#Xu*Tlf
zvqRAprflAPT1ZwU{h;D~?<}bz5?l_d&%vAy_vYUXF88evx=R^!Qimb9KEWpl-tb;w
zoJ3?SisoBY3aZX1NG`+J2Hl&!^p~sL}kY;@p%>G?4z=gtNZR3S@xUbW#
za9OBFNiEXmaLpy)fD`2CyQuwUCm(`$1SyF$M}2vBzFvP^Y@u$9>!_MHbGm=G
z$R+5>B#bQLqb59myYI^fBdUyct)Z_*hJ5{lHM#=ddpspv*l48}+3pKT!&H5RUmt+M
zi1HOev7^#YaIX$g4;u%IHo{(X^54y-e%@tJc_9IH8Yxuo&o4jQ6H)MRr&+|kKw;Lf
zt;CR~FA)C%>E!aAv#zAEzrW+z*g$Ejj|x4c1wmoLpMtT6xG5n|G;U0rI(pX{>_?ob
zd{)}xzbQn)qnl%vyl=Yj5W&qE6zKG2^d&KPur~E6tSKaw`$3|ZfL5~t`_c`q?oXlY
zlL<&zzqq2-+P6)M7FWG#^J|T%A>wHDFI;EpIrwY4Vfp}<
zE4?`RQj<{WK=+?kS$-}~7`B$er(GhcMs{F+s)KVlkd-6W8g-I(US_7EH?|FW!S_MU!=U^IN$h)IlP^IR5MK^=YCq(P}Rs+*ZYwsZUOs$WPf18PvAQ{yzlVD
z3tQOoec?AO=D?h88{(dY&woFOK2!eMn&jOB*HPA6%f4aoMw62xJPJ**=Skyl+GyOc
z7L5{cE3v37W%FX*;x&nG8G}3_i{QsJnt}aLP`Nl%Z$st>62ykF@Yyk~q}U-ds!koJ
zhHeH%y~tdOuXjiMjbUzdx1M2M-x_yST{SEt-p!+WG4#Jv(
zz}59j8mP?xqiJegtH!Xkc-J77?BT}JG$Qa_wXa!p#qJvlB7FLXyz200mv``%-)gmt
z)US5Oj5M}Z?mH3M3kw?OckK?uqQx@PkyPNQKh)gMKoh0Ybg0P^9OUB8mOeC@F6DAI
zWx-4Z$_V+e`(r7a*!HD(#ftWK^MxmGAX$r)Z8dDW9`CF2Taz+WHK~NJgXzm~V#AJr
zG$u`Gv0?;6Bs?Uax)LqsI2h+ksgpQaE6d2X*;>QkM)1{O$jf1Pqokn-a|hM&-|sG&
zpyT@mg3dY)z2$wZZY3OVgJ0KcZTJoGN0TNtbk~*9W-^DpqU0%pSaPNE7cv(NG(WC?
zRfhPh;p^qZn*K_eqd+JzI^}q{ovh|RD6d(^#U}F_aou0O)%32}!bZ7>YmKMmSCyPg
z{v?dY-rp$JRiTVu@o}PowNElXkcC(t*Ei6-JWXDikGr0r1dkCNNIrs`pEK3DmWPaVY>X_pkc#brfsh)H6
zZA4}@sI;!Ug~}DSIt)1C6-o5(ODtSx=_D`d(VtmwDwtNbH~`g->p?J43NS!Y0=0Jz)}9v#Mn{=J^tkv!`!VFnto3JrS*%)$;hmn(U*#i=a!0jw
zpa+l<#wd8JHmB3EwK6O%t*f#d*)%k+t;n6?)18`)8O!F4fGg(xTxK++SwD5TnR>nb
z241`K*@q=;GG6`ptLiN+lWim=7!oL%ij^UWzyzB1`O3ya>hPxz6Tdh|DOsOk;3Ty+q2H^Y7ssz+#s$GQA%hY9Rf^GD{t&A$k
zE+lqbuCp3o=*?#`mu}<|GZ1=QurUqI8qec5IQG`JmuMEJD-sa8sqaqpd*gV6RdbV^
zWp&Dgf`hHEa>!^J!w4MjghqWje#N_zrLoFFSB?^jhxhN^x=>cA`=y`76&
zc)tE~;im|n-6gD^4+CgI&}2E1HY~%tAZXT}0aBUJ2O?WkM!2{%k!t=c^#bX2X`J{<
zvrmA>Kg>7nRmvuT5b+F_H+{_nj<@(cnSj7buQRwE^&^gJ=P^W
zy8_Mfn#M%H55gB)(X-k2KSuyRYZbpNkCBLg8*L?fTIbhTC_-N#+G4}P2#+@sk{=vw
zm}vhRST}m`d+_InZ7IH4Y~xn5
z;v-rpc!!yFtz7X_mg!#t@6)#;HL|z~^5zkUg^7a!}__f4}}hig%Tp_=_0X
zXKu?vg~UeRS1msmet}qo`*=vq&91vWMP!EJ2W8AzW!RtY)^mx+*soaI)hvDvfPRq9
z4Qd|U74NQ*DrhU5{c1Y=6^(&CyorE=&nVN-7#h?LI=Er#JL1XlnPn3-WAsgyp#$#&
zz1Y31i-YR!e13702p}jjxj*BajB{bOyr&4o9^4{Dt)yNTI184x1Jy@gL>5Z8-IYF<
zm24_IZfSvAoQv@g6Z!E^m9(}`i4lSsyB*hRnC4m&Q_qBFe<^PX^+a8(iZZep1YCVs
z-`&f!_kPJjY%NN;6l2}y*6hVc?QKZaJ@w#WK#0T5nJ8=_=(;7SZe~6U2e{NL{(GkB
z8uL+QD`+3>Y-M>vqr>>e$xd=h)(KBox!ed9~{Q82F`F_$H
zoy!R+i!&kqYV0ua$koMJ1S^#92QYGFz&yjh8bg<6gq?uUzD4Oqx5)XwyBNEej+mr2
zX2NzQbJDy_%t#Mm)ZKX=5F)3#;D1_J6Rfw;Ner&5BErIh)|0BzS#2#FE~=#7mq=
zn7$?K>HWPUrSd+Y&iW&EcwZA=SJUBM-|?p~E5T2(oKMD9UlmDU8*7{dKUr;()(4of
zOG>G|tT!mZbb37j0L)qPW(BlWq}0cLuzp6C{$4f2g7iK6F&9%rHV*4=mFP{-R(pFE
zx`XWuSx$Y?s63|l-ZA7UPhzqr%za)G+j%1b3+BsarHI!7DE^=^S}-#hVEX!{1RvYp
zk=FNcREC#-p=fsa4ePsuDfFjZNAnsierBYx$c(zBqJy!0p+3g#&w2VTcLv)Cb|y|c
zVzu}Nq4ouxZP6CVsdzQ_JiuYQ9@`Ska!|ROXIsdEC~C~FB=Ypq&)c%G>cj!OIp@J0
zGQZCyKF^x)t%96D?EMv1S`rpPXj9~2-jh@#H}L(v@-IT+UFX;?q9!&0s9t3hBsy3+
zgUx+Dv`pH1mv9c-C$%2ihuT1Wqv?=utD{>W%+x#l0qsw(u)u-^XMXlZdo&ejn)B?E
z)3L}nLQ-Mt*1L`!zwQBoojy<0G32bWp(6;IqV5-pG*~0Wwo8Su9b0Y@=VhWURzf*c6l^y~BhSd>&*jxK5P|u%>VI;I$B8tL@u)0;TyC}Em|MMtb
z$Arp9i87-T+tIcDiy}w1xvvyeZ06;36KMYXMf|Jg2Y_HGjfKEmQ10Rg%j%z~0GpbV
zg&%css5GpJ9*Wdmy_y@Kv}{Q^4Qt$#WN2iJ8Dg3>HR_L1vV{d|vBwbBSHl72!GD5PgCLw;As_
zjL=^yGgJ_I(+_*|b`DtVa<%)9l{cM9$HpFE-__)H3rnOht|a!dB-l(_-
zlq)u~VrMkhJo~Xw-y;M1iyzf8y}~1zGp4^W-g~7jzdPxi4oh48oP)LP^B!F?vVN{H
zsMC@2-(}4^vk$`jIvUlLU$c!&Oc$k0TVS5YUJ!q4H1UP2>mGNY9RMJg?p6LeGW
zwn*U_{|n*pv+meehTgvJsM06CJ&5i*ktSP8JbTjr&wv;crI4-O~#p=F^TzQO^uNTuJ&q{FSvXl-?U
zNwdtB<<`&p$bqfyYy(9cKskO_`x982M9=w{JpC(cZw4RFa_i_VGgd^>#MnVOq1iU1
zt#S&CY?i|A+L_Fv&0zg0E^h9&f+jNt%eQj9Pv|5r1dh-6+W59!JROu!=}F*v7N-FDYGZTa|?Pv@F6AK
zH)ddoaH0Au_L%~es{7yP6&6&TmUi;Y`&0_c@@
z$n8z=04#!0RFkXltjW1vzwP6<7i9
zq1=P-xwW$a+8-xHd&){Isd*=UbBT1b<{&L7jl259jQBgNRvZN{fs+BFJoFqQ3Un!JMC=Jjg*OA`cGd#I$6TvY7
zmj#gnf=#p};Z0Evy=e}$z}6^JN9)sE2m8uM``{$*uHW?;B#J4iYb9{U$+)7N-Mw3_
zljAm(Ols*f1!BMZfR{|OSB(g>otHmSSoBnZ5gx|yP4t}vEj@?$Lw>3
z=xbxAmi#$vOvoBxTEKy1)&5$n=E=A&EiK9A6L#0O%Eo-5*o$Mfg5@uYugbM39S7!j
zUY;EZEnowBOxSs&gAsGFQS%1l&NFVQ^1EsA@v{kcmWVJ85+A2_C!FhB4NS`K3Z^aZXV(i_hVN$@Bg#-pHSb=KI!07#vA3Ds8QYb*Jh`aRwjz&-
zNjWLtsOk6F_+Es=Ru}r~J=oq5tiM`TU343|>Uh&SxYrkq4X}6c^XED#--nb%`dq6|
zAOEDI%WE#J0R9XPGnE|&T{i247acip7i};BzAaFUeFpM*>C3-Q87s|vu`i$V%b&t6
zcLq~K4$cT;{uu?AMM1!lMYBhW832HtB`VLSxG$5EJ_t_!Zd~aIO0|XGS}c(H1>GzR
zvnE>Qh90|KWe#C}|6{|pffM5b;kNB&m0Mu1=x2TEocAuNrSLy$Ds(^oF=gP;@U5t^
zh1`H7;0@v1HSR?}m6BT4!%P9?{RH@uri$nxEDwn}0U~NZGa8h~brhhtk@5cXTv0I13)B8`lL({f2)pz}
z`~W&&N*~wRV*UIL`P(%|(u?s&S(I8y6R%?Or^eS*`=#S{48XS#gbP9WK$S0|Ow7$+
zEyw&HIi4l&;JnXJ)UrDsv7YoFYaP_bBuN*=V{h)8P@;@!{jC<4?6qgu5^&0X`vt`8
z!&&`9%jrLQqKOvyK-#?lbtp{OTFj));PCCN#=!2I$$R$L(!@K4QpnR-l)Hy1ndhN5
zm0bv#A}nXS4src#erYf6sW`lnbV|k`jNE`D2VDHJEvVY1#PthiL$tgu~{JBS3j{CUY
zMQX&a0r9Z}&TPqeWc3)k5m75;f3*EJ4IkRd(Pg`q(te_UrTRXkxnuU^3pu!#ASr;jagPks$-?&?547%&ua6>Wqbh7iV|0sQPMd#V=(2ZX^6E?8X#k
zEi=SucJwW;AZX#`UwXhBe$V9ALDM@fd!NsitJ*}mE+Yo{XVz>87yi=vW{0eWNl?>Y
zW)bZ7Lqe(lm_kRQ*1-Zrm{t|KooUwbTb`_;?|va)st`QCkPe_9KlB)xuumMDLL`J4
z?Ijv6Jpcf@9ebXmPb05dqlpgUVuz+YkMRd}{A>u1z3CUHy}r2_2j-*bF6&*0PiOg;
zNde2@*!Pd7r=6ar%$CFBqZyr%lQaIe-SZ9MU-QsnsqzHpORaE$(-&>(gQ4C3?f2ow
z$#mewy$VK^W1*9P1;iqeGRuN0AL1~tltXE+3Ml&Gh{M!Bm@GY*=0=zMpe>U0LIC93Z%NcnPKZ1#pUQuO1
zOm&BRt{0im3@`A#thXON#?;Xp5mo?hPWM3l!V2
zmD-RPv6urkD5GxUQg&%h0YV^rbJN-X)!$-FUHY81g8im7&Z}dL#AKr$9@(5qT>12EUm~4qTjflp5;O6LD
zj?qWt%-ZdN@y_6(DmnIW@0SI$|2P4XwSjr>zslIww12R+N2+yip5oa0w*&V06cuhw
z{ap?4*kS@n)~+KbW~c$+p;+#z#v#a4P0M*^PO-P8AX(o+m~q#V6o<-l&vHzJn2
z-kB_W)m2rNs`UMfyuZv(dQz*}>0SG8;Jy3|E>p;+4RMi^KFnS`!{rkifR{k8!DU?N
z?2hT%kwnK19Oh|Vs`ZQ7s>=Ef;n2Do#kf8tY|dU#^`arz?AsV>WPS&|`8lf^=rNn)
zr*jwthAt4sbF+Qs^r-gvr-H!(ho=Cs2LDraajFF4sXSLqjh!pYJ@unaaJjBZ~
z@x#YuiA!jTi%1**inGh8iTZ(Us^;UgYh4*oDAUco)xDH=OLiJrD$o9H&PV>w%+H>&
z?m3=F5pW_fHIBYX`@`>KInIH9q~|l{e~qa@50(Ic3I60X39*D&dj`|a(GGN}dGU(u
z6*cxQjm62rRLsNg9$+L)QMAR;FnNeWzK#Z5Bj0FnFx$q0sEjo%`0%DS44dY^5oR{Dzix2Tnl75n8WMR6#&Bx=jRN6vt+!-(8
zr1si&wi|TF^38>E;FKN^%=xZW@CZvoqs%raYif`z9Ju!k?E9Ao5haj#pSIBnhU9%1qZT}EFidaO;761eUo7aj-UxeHsDE7V63f*q)?KIFU84-M
z=aCf86YGl{A@6uEw0ycQDZu_V)STctyj&_5cTyw?lKhVPUN9?u9mV7cla;|a=t}D=
zLv(e`4Q=GU{KD#)|%`XyB3${lxmrG3}tyTLSLq*z~XDLEYvp+(x@sA<9WY6`Xrg|D?rK|07-q(X@63
zH#~-mSvnq-W~u-4B5xjT_rnCZRXWCPF5u
zF5W7DV06npdE~2;72~IauBqo{e*3#~*)FSy3gmbkJ^fj7!_A)_nAqBve+GW6G+7OI
z{~$3;lRi%weAK!2ZtYxktWq2kn?7w^44)gG_`3r)Lb!CM{G*NuO}5XEFnsOXUt1whWuDNfB(gs@ABL_
zI@6PIr@4MUQ5Xlnm5@o5v1`JbBU3iadn`p5Z<&Qva`WM~F;w!^LaOyB=hwqo?y`)V
zwGvR^&W#KX_A(N-cxZ-KT4z55UUC2C<-3@O6%ffDzw7Ahf*G1TzRmKEo0uIp?-BeL
zE=a$WS}N?Z#>!GMw$X$NOiolOHXYKmlW;LjfSStTk}gLJmuHBn-`Mwq|JhrWk$7Bk
zjG#CkO39?);QMT+*)qam{#*-|{BxMA*8Z#sl4R$ddLlww{I6`?e*eYecMpB7rd%&j
zf|BV>*-~joqM1Bb#whn>KjWG!HD~Dt-nDf+hunK2?_xZ5G?2D6pS0zWp?ws#zbtLcN?cxHK?53f~;EXJwh0)!wxWM@LUB
zN8M9Q{E}#m{{WmqYLj30Vqpy(RHt;7&Rrb;Gx*odEM}1d@Z2m*!fv)eQpBLO^$q@zT$<;yAtWjL+uDwypsK=K9dRPE+VDEi=HTI2iC9K4MvXl*f
zmG!^p18_Ljc|8-g<`Y9mWU%n7lf8oBXjVPF!x@q~ON)+kf1)sXT%j~h4Zw?jo->)3
zOx6hTm{OYL@0M$#3jQef_*L<{y;z;Yyfr8H6|G7B|Fx$#f9NqVoPTiJY2~jwzzAFL
zYKBrq3d@3ssngbneANn^9n!Md_3TVVhNo!)`*cf=E}E3^BJ8K=adZ3ZQX{4f?aED)
zGmfgS`<}k0nMEn?xr2B^602_f%X6#WyqW*}_}*sVJkm8&20xCn7b4d**vO!K`N)mv7-c|HGW#j}=un>
zfvH;bH&MCiqP0_MPwrh8b?;2Z87+p@mp+xQe|1gozWt`@FG^N#x0eVmz58S<6L5r6
zB;D=eu5~;2o$c@6+jt{pezsw$+=0@qO;!x9T{B!?wme<-s`lfz4?na^?tc8c-a|Ui
zUL@R;K_kdz|K7kLc?;S5ea$b9+dL19{rfHa(8ZpXex3MRlYt3)-qXL|_9oO$s^9wc
zV}XTF>FmuyH+a8(`5S(0*VM||M>)C78{S@K{QmK#*z#QrQ(mM9sa9WowS)b@KbF@o
z_e3%TEV!tnQl`CPC3C>MX2I1Fchl}L2RypjAh#GH
z*f8nTyOwh9_hJld++*8px$O*C95VZUy}fDp9q8C|H)Ctc)_iMJWbjJnQmr=ASj`+T
zWAe{$5f8*H82H#87{-*dEHH>ly0N|absxi&)Ss!xJvZF=%2j?>kl{H~fqD9F29dN%
z_cIC+IRQ&o3pOk=vD0f&&Ff@-5Wyg)I>VIF!Bel>eA(uNjh?rp7&W}!Zc?@`|H7!t
zFo(;bQ(q#@mmwhJQ|ce{+aaF&7;dC}S}Hj+_mxUKaMtRlkhYoEC)NXMlh-SRY{jUEGYlJa8G1s{}T`%dV+t$1y1na
ztlYErRZUFVd~V+Ypx&s@Z*T7IzGTI~n%UIEBlgqAcd4KzLs;PM*B!3!O2ivP{aJsp
zrZe&FyYWSdpKl+7#)$=zY~6p}J5FJUIQ!$~Hj_?4>GF_B_5~{Q?;NpTeSAY{uPfhy
zGBdT?LSmK-YqlHSoVMWv
+ Kaseya BMS
+
diff --git a/src/data/Extensions.json b/src/data/Extensions.json
index 52df55dd4726..66ff5b1a482d 100644
--- a/src/data/Extensions.json
+++ b/src/data/Extensions.json
@@ -938,5 +938,35 @@
}
],
"mappingRequired": false
+ },
+ {
+ "name": "ConnectWise PSA",
+ "id": "ConnectWisePSA",
+ "type": "ConnectWisePSA",
+ "cat": "Ticketing",
+ "logo": "/assets/integrations/connectwise.png",
+ "comingSoon": true,
+ "description": "Enable the ConnectWise PSA integration to send alerts to your ticketing system.",
+ "mappingRequired": false
+ },
+ {
+ "name": "Autotask PSA",
+ "id": "AutotaskPSA",
+ "type": "AutotaskPSA",
+ "cat": "Ticketing",
+ "logo": "/assets/integrations/autotask.png",
+ "comingSoon": true,
+ "description": "Enable the Autotask PSA integration to send alerts to your ticketing system.",
+ "mappingRequired": false
+ },
+ {
+ "name": "Kaseya BMS",
+ "id": "KaseyaBMS",
+ "type": "KaseyaBMS",
+ "cat": "Ticketing",
+ "logo": "/assets/integrations/kaseya.svg",
+ "comingSoon": true,
+ "description": "Enable the Kaseya BMS integration to send alerts to your ticketing system.",
+ "mappingRequired": false
}
]
diff --git a/src/pages/cipp/integrations/index.js b/src/pages/cipp/integrations/index.js
index 60ee764853b4..6d3f24f86ee4 100644
--- a/src/pages/cipp/integrations/index.js
+++ b/src/pages/cipp/integrations/index.js
@@ -68,45 +68,83 @@ const Page = () => {
status = 'Enabled'
}
- return (
-
-
-
+ {extension.comingSoon && (
+
+ Coming Soon
+
+ )}
+
+