From b217bcf973fa58826ac0ff40d1d0ca06c24af6a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 17 May 2024 21:58:54 +0200 Subject: [PATCH 1/6] Update Activity Based Timeout standard to have options --- src/data/standards.json | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index 92252d5a36ad..c9326b8b5f1f 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -102,9 +102,9 @@ "label": "Show header" }, { - "type":"boolean", - "name":"standards.Branding.isFooterShown", - "label":"Show footer" + "type": "boolean", + "name": "standards.Branding.isFooterShown", + "label": "Show footer" } ], "label": "Set branding for the tenant", @@ -156,8 +156,36 @@ "cat": "Global Standards", "tag": ["mediumimpact", "CIS", "spo_idle_session_timeout"], "helpText": "Enables and sets Idle session timeout for Microsoft 365 to 1 hour. This policy affects most M365 web apps", - "addedComponent": [], - "label": "Enable 1 hour Activity based Timeout", + "addedComponent": [ + { + "type": "Select", + "label": "Select value", + "name": "standards.ActivityBasedTimeout.timeout", + "values": [ + { + "label": "1 Hour", + "value": "01:00:00" + }, + { + "label": "3 Hours", + "value": "03:00:00" + }, + { + "label": "6 Hours", + "value": "06:00:00" + }, + { + "label": "12 Hours", + "value": "12:00:00" + }, + { + "label": "24 Hours", + "value": "1.00:00:00" + } + ] + } + ], + "label": "Enable Activity based Timeout", "impact": "Medium Impact", "impactColour": "warning" }, From 895ad36906dfc2e1ce615ad9a1a0b4432558005b Mon Sep 17 00:00:00 2001 From: Esco Date: Wed, 22 May 2024 13:22:10 +0200 Subject: [PATCH 2/6] Roles View Update --- src/views/identity/administration/Roles.jsx | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/views/identity/administration/Roles.jsx b/src/views/identity/administration/Roles.jsx index 79383c4f007d..600d5f31cd49 100644 --- a/src/views/identity/administration/Roles.jsx +++ b/src/views/identity/administration/Roles.jsx @@ -23,7 +23,7 @@ const Offcanvas = (row, rowIndex, formatExtraData) => { >
Role Group Name:
{row.DisplayName}



-
Member Names:
{row.Members ?

{row.Members}

:

Role has no members.

} +
Member Names:
{row.Members ? row.Members.split(',').map((member, index) =>

{member}

) :

Role has no members.

} ) @@ -53,6 +53,25 @@ const columns = [ exportSelector: 'Members', omit: true, }, + { + selector: (row) => row['Members'], + name: 'Assignments', + sortable: false, + cell: (row) => { + if (row.Members === 'none') { + return null; + } + const memberCount = row.Members ? row.Members.split(',').length : 0; + const memberText = row.Members && row.Members !== 'none' ? `Member${memberCount === 1 ? '' : 's'}` : null; + return ( + <> + {memberCount} {memberText} + + ); + }, + exportSelector: 'Members', + maxWidth: '150px', + }, { selector: (row) => 'View Members', name: 'Members', From 7a366873447d2f7c329e78b1f4908b42e5221209 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar Date: Sun, 26 May 2024 15:52:41 +0200 Subject: [PATCH 3/6] added top 300 --- src/views/tenant/administration/ListGDAPRelationships.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/tenant/administration/ListGDAPRelationships.jsx b/src/views/tenant/administration/ListGDAPRelationships.jsx index 11ae56e89e33..25b332ffdcaf 100644 --- a/src/views/tenant/administration/ListGDAPRelationships.jsx +++ b/src/views/tenant/administration/ListGDAPRelationships.jsx @@ -251,7 +251,7 @@ const GDAPRelationships = () => { columns, reportName: `GDAP-Relationships`, path: '/api/ListGraphRequest', - params: { Endpoint: 'tenantRelationships/delegatedAdminRelationships' }, + params: { Endpoint: 'tenantRelationships/delegatedAdminRelationships', $top: 300 }, }} /> From cfd802e046b6a4888167c9fbe17854caf7666483 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar Date: Sun, 26 May 2024 16:55:57 +0200 Subject: [PATCH 4/6] fixes offboarding wizard speed --- .../administration/OffboardingWizard.jsx | 45 ++++++++++--------- src/views/identity/administration/Roles.jsx | 16 ++++--- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/views/identity/administration/OffboardingWizard.jsx b/src/views/identity/administration/OffboardingWizard.jsx index b5b344969c7a..571eba706e8b 100644 --- a/src/views/identity/administration/OffboardingWizard.jsx +++ b/src/views/identity/administration/OffboardingWizard.jsx @@ -47,7 +47,18 @@ const OffboardingWizard = () => { data: users = [], isFetching: usersIsFetching, error: usersError, - } = useListUsersQuery({ tenantDomain }) + } = useGenericGetRequestQuery({ + path: `/api/ListGraphRequest`, + params: { + TenantFilter: tenantDomain, + Endpoint: 'users', + $select: + 'id,displayName,givenName,mail,mailNickname,proxyAddresses,usageLocation,userPrincipalName,userType,assignedLicenses,onPremisesSyncEnabled', + $count: true, + $orderby: 'displayName', + $top: 999, + }, + }) const { data: recipients = [], @@ -121,7 +132,7 @@ const OffboardingWizard = () => { ({ + values={users?.Results?.map((user) => ({ value: user.userPrincipalName, name: `${user.displayName} <${user.userPrincipalName}>`, }))} @@ -177,36 +188,30 @@ const OffboardingWizard = () => { x.mail) - .map((user) => ({ - value: user.mail, - name: `${user.displayName} <${user.mail}>`, - }))} + values={users.Results?.filter((x) => x.mail).map((user) => ({ + value: user.mail, + name: `${user.displayName} <${user.mail}>`, + }))} placeholder={!usersIsFetching ? 'Select user' : 'Loading...'} name="AccessNoAutomap" /> x.mail) - .map((user) => ({ - value: user.mail, - name: `${user.displayName} <${user.mail}>`, - }))} + values={users.Results?.filter((x) => x.mail).map((user) => ({ + value: user.mail, + name: `${user.displayName} <${user.mail}>`, + }))} placeholder={!usersIsFetching ? 'Select user' : 'Loading...'} name="AccessAutomap" /> x.mail) - .map((user) => ({ - value: user.mail, - name: `${user.displayName} <${user.mail}>`, - }))} + values={users.Results?.filter((x) => x.mail).map((user) => ({ + value: user.mail, + name: `${user.displayName} <${user.mail}>`, + }))} placeholder={!usersIsFetching ? 'Select user' : 'Loading...'} name="OnedriveAccess" /> diff --git a/src/views/identity/administration/Roles.jsx b/src/views/identity/administration/Roles.jsx index 600d5f31cd49..7e103a130920 100644 --- a/src/views/identity/administration/Roles.jsx +++ b/src/views/identity/administration/Roles.jsx @@ -23,7 +23,12 @@ const Offcanvas = (row, rowIndex, formatExtraData) => { >
Role Group Name:
{row.DisplayName}



-
Member Names:
{row.Members ? row.Members.split(',').map((member, index) =>

{member}

) :

Role has no members.

} +
Member Names:
{' '} + {row.Members ? ( + row.Members.split(',').map((member, index) =>

{member}

) + ) : ( +

Role has no members.

+ )} ) @@ -59,15 +64,16 @@ const columns = [ sortable: false, cell: (row) => { if (row.Members === 'none') { - return null; + return null } - const memberCount = row.Members ? row.Members.split(',').length : 0; - const memberText = row.Members && row.Members !== 'none' ? `Member${memberCount === 1 ? '' : 's'}` : null; + const memberCount = row.Members ? row.Members.split(',').length : 0 + const memberText = + row.Members && row.Members !== 'none' ? `Member${memberCount === 1 ? '' : 's'}` : null return ( <> {memberCount} {memberText} - ); + ) }, exportSelector: 'Members', maxWidth: '150px', From 202962fec5c052656197c6b4d0ac0f3e07f32117 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar Date: Sun, 26 May 2024 18:34:14 +0200 Subject: [PATCH 5/6] removed data from loop --- src/components/tables/CippTable.jsx | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/tables/CippTable.jsx b/src/components/tables/CippTable.jsx index f3ea486ee243..e858c5e28fc6 100644 --- a/src/components/tables/CippTable.jsx +++ b/src/components/tables/CippTable.jsx @@ -414,6 +414,7 @@ export default function CippTable({ (modalMessage, modalUrl, modalType = 'GET', modalBody, modalInput, modalDropdown) => { if (modalType === 'GET') { ModalService.confirm({ + getData: () => inputRef.current?.value, body: (
{modalMessage}
@@ -466,6 +467,18 @@ export default function CippTable({ title: 'Confirm', onConfirm: async () => { const resultsarr = [] + const selectedValue = inputRef.current.value + let additionalFields = {} + if (inputRef.current.nodeName === 'SELECT') { + const selectedItem = dropDownInfo.data.find( + (item) => item[modalDropdown.valueField] === selectedValue, + ) + if (selectedItem && modalDropdown.addedField) { + Object.keys(modalDropdown.addedField).forEach((key) => { + additionalFields[key] = selectedItem[modalDropdown.addedField[key]] + }) + } + } for (const row of selectedRows) { setLoopRunning(true) const urlParams = new URLSearchParams(modalUrl.split('?')[1]) @@ -492,26 +505,13 @@ export default function CippTable({ } } const NewModalUrl = `${modalUrl.split('?')[0]}?${urlParams.toString()}` - const selectedValue = inputRef.current.value - let additionalFields = {} - if (inputRef.current.nodeName === 'SELECT') { - const selectedItem = dropDownInfo.data.find( - (item) => item[modalDropdown.valueField] === selectedValue, - ) - if (selectedItem && modalDropdown.addedField) { - Object.keys(modalDropdown.addedField).forEach((key) => { - additionalFields[key] = selectedItem[modalDropdown.addedField[key]] - }) - } - } - const results = await genericPostRequest({ path: NewModalUrl, values: { ...modalBody, ...newModalBody, ...additionalFields, - ...{ input: inputRef.current.value }, + ...{ input: selectedValue }, }, }) resultsarr.push(results) From fe06f78873324dcbc6ce7a2d02a1445f1a6c7439 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar Date: Sun, 26 May 2024 19:00:18 +0200 Subject: [PATCH 6/6] added bulk options for policies --- src/views/endpoint/intune/MEMListAppProtection.jsx | 11 ++++++++++- src/views/endpoint/intune/MEMListCompliance.jsx | 11 ++++++++++- src/views/endpoint/intune/MEMListPolicies.jsx | 9 +++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/views/endpoint/intune/MEMListAppProtection.jsx b/src/views/endpoint/intune/MEMListAppProtection.jsx index 569608ec916c..f017ba2f2065 100644 --- a/src/views/endpoint/intune/MEMListAppProtection.jsx +++ b/src/views/endpoint/intune/MEMListAppProtection.jsx @@ -48,7 +48,7 @@ const Actions = (row, rowIndex, formatExtraData) => { color: 'danger', modal: true, icon: , - modalUrl: `/api/RemovePolicy?TenantFilter=${tenant.defaultDomainName}&ID=${row.id}&URLName=${row.URLName}`, + modalUrl: `/api/RemovePolicy?TenantFilter=${tenant.defaultDomainName}&ID=${row.id}&URLName=managedAppPolicies`, modalMessage: 'Are you sure you want to delete this policy?', }, ]} @@ -122,6 +122,15 @@ const AppProtectionList = () => { expandableRows: true, expandableRowsComponent: ExpandedComponent, expandOnRowClicked: true, + selectableRows: true, + actionsList: [ + { + label: 'Delete Policy', + modal: true, + modalUrl: `api/RemovePolicy?TenantFilter=${tenant?.defaultDomainName}&ID=!id&URLName=managedAppPolicies`, + modalMessage: 'Are you sure you want to convert these users to a shared mailbox?', + }, + ], }, }} /> diff --git a/src/views/endpoint/intune/MEMListCompliance.jsx b/src/views/endpoint/intune/MEMListCompliance.jsx index 6fbe0cdf84ce..9b970031bb1d 100644 --- a/src/views/endpoint/intune/MEMListCompliance.jsx +++ b/src/views/endpoint/intune/MEMListCompliance.jsx @@ -71,7 +71,7 @@ const Actions = (row, rowIndex, formatExtraData) => { color: 'danger', modal: true, icon: , - modalUrl: `/api/RemovePolicy?TenantFilter=${tenant.defaultDomainName}&ID=${row.id}&URLName=${row.URLName}`, + modalUrl: `/api/RemovePolicy?TenantFilter=${tenant.defaultDomainName}&ID=${row.id}&URLName=deviceCompliancePolicies`, modalMessage: 'Are you sure you want to delete this policy?', }, ]} @@ -145,6 +145,15 @@ const ComplianceList = () => { expandableRows: true, expandableRowsComponent: ExpandedComponent, expandOnRowClicked: true, + selectableRows: true, + actionsList: [ + { + label: 'Delete Policy', + modal: true, + modalUrl: `api/RemovePolicy?TenantFilter=${tenant?.defaultDomainName}&ID=!id&URLName=deviceCompliancePolicies`, + modalMessage: 'Are you sure you want to convert these users to a shared mailbox?', + }, + ], }, }} /> diff --git a/src/views/endpoint/intune/MEMListPolicies.jsx b/src/views/endpoint/intune/MEMListPolicies.jsx index 0ea3ed1a26f4..f9f82026cd52 100644 --- a/src/views/endpoint/intune/MEMListPolicies.jsx +++ b/src/views/endpoint/intune/MEMListPolicies.jsx @@ -140,6 +140,15 @@ const IntuneList = () => { expandableRows: true, expandableRowsComponent: ExpandedComponent, expandOnRowClicked: true, + selectableRows: true, + actionsList: [ + { + label: 'Delete Policy', + modal: true, + modalUrl: `api/RemovePolicy?TenantFilter=${tenant?.defaultDomainName}&ID=!id&URLName=!URLName`, + modalMessage: 'Are you sure you want to convert these users to a shared mailbox?', + }, + ], }, }} />