From 1f3192d92d0f78e7d34be8b440b4bed1732951be Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 7 Feb 2023 11:14:12 +0100 Subject: [PATCH 01/17] add islicensed to all tenants --- src/views/identity/reports/MFAReport.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/views/identity/reports/MFAReport.js b/src/views/identity/reports/MFAReport.js index 171d0fa5d51a..4f6dc8ea6357 100644 --- a/src/views/identity/reports/MFAReport.js +++ b/src/views/identity/reports/MFAReport.js @@ -75,6 +75,13 @@ const Altcolumns = [ cell: cellBooleanFormatter({ colourless: true }), exportSelector: 'AccountEnabled', }, + { + selector: (row) => row['isLicensed'], + name: 'Account Licensed', + sortable: true, + cell: cellBooleanFormatter({ colourless: true }), + exportSelector: 'AccountEnabled', + }, { selector: (row) => row['PerUser'], name: 'Per user MFA Status', From 07c3d8c511a8ff0850f2a0efe8a08ecae12d0121 Mon Sep 17 00:00:00 2001 From: BNWEIN Date: Tue, 7 Feb 2023 14:06:31 +0000 Subject: [PATCH 02/17] Update MFAReport.js Fixed CSV Export of MFA Report --- src/views/identity/reports/MFAReport.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/identity/reports/MFAReport.js b/src/views/identity/reports/MFAReport.js index 4f6dc8ea6357..3d6be946f001 100644 --- a/src/views/identity/reports/MFAReport.js +++ b/src/views/identity/reports/MFAReport.js @@ -80,7 +80,7 @@ const Altcolumns = [ name: 'Account Licensed', sortable: true, cell: cellBooleanFormatter({ colourless: true }), - exportSelector: 'AccountEnabled', + exportSelector: 'isLicensed', }, { selector: (row) => row['PerUser'], From bf0853c9dd2ca14f83b8bccba9dd8d6b2544c828 Mon Sep 17 00:00:00 2001 From: BNWEIN Date: Wed, 8 Feb 2023 17:10:00 +0000 Subject: [PATCH 03/17] Update ApplyStandard.js Updating Step Numbers to display correctly. --- src/views/tenant/standards/ApplyStandard.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/views/tenant/standards/ApplyStandard.js b/src/views/tenant/standards/ApplyStandard.js index 63143a4127ee..b62a8aea06d4 100644 --- a/src/views/tenant/standards/ApplyStandard.js +++ b/src/views/tenant/standards/ApplyStandard.js @@ -186,7 +186,7 @@ const ApplyStandard = () => { description="Select which standards you want to apply." >
-

Step 3

+

Step 4

Select Standards

@@ -225,7 +225,7 @@ const ApplyStandard = () => { description="Select which standards you want to apply." >
-

Step 3

+

Step 5

Select Standards

@@ -261,7 +261,7 @@ const ApplyStandard = () => {
-

Step 4

+

Step 6

Confirm and apply

From ad648561358fed05398ae058bdf8dc249a4dc1d1 Mon Sep 17 00:00:00 2001 From: BNWEIN Date: Thu, 9 Feb 2023 10:52:13 +0000 Subject: [PATCH 04/17] Fixed Issue with Deploying group templates for Mail Enabled Security groups Fixed Issue with Deploying group templates for Mail Enabled Security groups --- src/views/identity/administration/AddGroupTemplate.js | 2 +- src/views/identity/administration/DeployGroupTemplate.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/views/identity/administration/AddGroupTemplate.js b/src/views/identity/administration/AddGroupTemplate.js index e580ce4515b7..80d54b54c575 100644 --- a/src/views/identity/administration/AddGroupTemplate.js +++ b/src/views/identity/administration/AddGroupTemplate.js @@ -58,7 +58,7 @@ const AddGroupTemplate = () => { - + { placeholder="Select a group type" values={[ { label: 'Dynamic Group', value: 'dynamic' }, - { label: 'Security Group', value: 'security' }, + { label: 'Security Group', value: 'generic' }, { label: 'Distribution group', value: 'distribution' }, { label: 'Azure Role Group', value: 'azurerole' }, + { label: 'Mail Enabled Security Group', value: 'security' }, ]} /> From 2864b9b509e40eafde0e6d871ee7c65d71f6fab0 Mon Sep 17 00:00:00 2001 From: BNWEIN Date: Thu, 9 Feb 2023 14:36:14 +0000 Subject: [PATCH 05/17] Update OffboardingWizard.js Fixed Missing entries on the confirmation screen of the offboarding wizard --- .../identity/administration/OffboardingWizard.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/views/identity/administration/OffboardingWizard.js b/src/views/identity/administration/OffboardingWizard.js index a835a1dcda2e..4e6318addf9d 100644 --- a/src/views/identity/administration/OffboardingWizard.js +++ b/src/views/identity/administration/OffboardingWizard.js @@ -236,6 +236,22 @@ const OffboardingWizard = () => { icon={props.values.RevokeSessions ? faCheck : faTimes} /> + + Remove all mobile devices + + + + Remove all mailbox rules + + Remove Licenses Date: Thu, 9 Feb 2023 22:20:43 +0100 Subject: [PATCH 06/17] add date picker --- package-lock.json | 106 ++++++++++++ package.json | 1 + src/components/tables/CippTable.js | 152 ++++++++++++++---- src/views/cipp/Logs.js | 31 ++-- src/views/identity/administration/Users.js | 52 ++++++ .../tenant/standards/ListAppliedStandards.js | 2 + 6 files changed, 296 insertions(+), 48 deletions(-) diff --git a/package-lock.json b/package-lock.json index 937c2b6c602e..c7fcb5869006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "react-app-polyfill": "^2.0.0", "react-copy-to-clipboard": "^5.0.4", "react-data-table-component": "^7.4.5", + "react-datepicker": "^4.10.0", "react-dom": "^17.0.2", "react-final-form": "^6.5.7", "react-final-form-listeners": "^1.0.3", @@ -6669,6 +6670,18 @@ "node": ">=10" } }, + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "license": "MIT", @@ -14642,6 +14655,23 @@ "styled-components": ">= 4" } }, + "node_modules/react-datepicker": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.10.0.tgz", + "integrity": "sha512-6IfBCZyWj54ZZGLmEZJ9c4Yph0s9MVfEGDC2evOvf9AmVz+RRcfP2Czqad88Ff9wREbcbqa4dk7IFYeXF1d3Ag==", + "dependencies": { + "@popperjs/core": "^2.9.2", + "classnames": "^2.2.6", + "date-fns": "^2.24.0", + "prop-types": "^15.7.2", + "react-onclickoutside": "^6.12.2", + "react-popper": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17 || ^18", + "react-dom": "^16.9.0 || ^17 || ^18" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "dev": true, @@ -14866,6 +14896,19 @@ "react": ">=16.8.0" } }, + "node_modules/react-onclickoutside": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.2.tgz", + "integrity": "sha512-NMXGa223OnsrGVp5dJHkuKxQ4czdLmXSp5jSV9OqiCky9LOpPATn3vLldc+q5fK3gKbEHvr7J1u0yhBh/xYkpA==", + "funding": { + "type": "individual", + "url": "https://github.com/Pomax/react-onclickoutside/blob/master/FUNDING.md" + }, + "peerDependencies": { + "react": "^15.5.x || ^16.x || ^17.x || ^18.x", + "react-dom": "^15.5.x || ^16.x || ^17.x || ^18.x" + } + }, "node_modules/react-papaparse": { "version": "3.18.2", "license": "MIT", @@ -14878,6 +14921,20 @@ "npm": ">=5" } }, + "node_modules/react-popper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", + "dependencies": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + }, + "peerDependencies": { + "@popperjs/core": "^2.0.0", + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-redux": { "version": "7.2.6", "license": "MIT", @@ -17461,6 +17518,14 @@ "makeerror": "1.0.12" } }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/watchpack": { "version": "2.3.1", "license": "MIT", @@ -22413,6 +22478,11 @@ } } }, + "date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + }, "debug": { "version": "4.3.4", "requires": { @@ -27284,6 +27354,19 @@ "deepmerge": "^4.2.2" } }, + "react-datepicker": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.10.0.tgz", + "integrity": "sha512-6IfBCZyWj54ZZGLmEZJ9c4Yph0s9MVfEGDC2evOvf9AmVz+RRcfP2Czqad88Ff9wREbcbqa4dk7IFYeXF1d3Ag==", + "requires": { + "@popperjs/core": "^2.9.2", + "classnames": "^2.2.6", + "date-fns": "^2.24.0", + "prop-types": "^15.7.2", + "react-onclickoutside": "^6.12.2", + "react-popper": "^2.3.0" + } + }, "react-dev-utils": { "version": "12.0.1", "dev": true, @@ -27427,6 +27510,12 @@ "version": "0.4.9", "requires": {} }, + "react-onclickoutside": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.2.tgz", + "integrity": "sha512-NMXGa223OnsrGVp5dJHkuKxQ4czdLmXSp5jSV9OqiCky9LOpPATn3vLldc+q5fK3gKbEHvr7J1u0yhBh/xYkpA==", + "requires": {} + }, "react-papaparse": { "version": "3.18.2", "requires": { @@ -27434,6 +27523,15 @@ "papaparse": "^5.3.1" } }, + "react-popper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", + "requires": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + } + }, "react-redux": { "version": "7.2.6", "requires": { @@ -29125,6 +29223,14 @@ "makeerror": "1.0.12" } }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "watchpack": { "version": "2.3.1", "requires": { diff --git a/package.json b/package.json index 11f8a3a660a0..d9e64244f095 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "react-app-polyfill": "^2.0.0", "react-copy-to-clipboard": "^5.0.4", "react-data-table-component": "^7.4.5", + "react-datepicker": "^4.10.0", "react-dom": "^17.0.2", "react-final-form": "^6.5.7", "react-final-form-listeners": "^1.0.3", diff --git a/src/components/tables/CippTable.js b/src/components/tables/CippTable.js index 8efa8724d611..fc8e3d242ecc 100644 --- a/src/components/tables/CippTable.js +++ b/src/components/tables/CippTable.js @@ -10,13 +10,20 @@ import { CDropdownMenu, CDropdownItem, CButton, + CModal, + CModalBody, + CModalTitle, + CCallout, } from '@coreui/react' import DataTable, { createTheme } from 'react-data-table-component' import PropTypes from 'prop-types' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { faCheck, faColumns, faSearch, faSync } from '@fortawesome/free-solid-svg-icons' +import { faCheck, faColumns, faSearch, faSync, faTasks } from '@fortawesome/free-solid-svg-icons' import { useEffect } from 'react' import { cellGenericFormatter } from './CellGenericFormat' +import { ModalService } from '../utilities' +import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app' +import { ConfirmModal } from '../utilities/SharedModal' const FilterComponent = ({ filterText, onFilter, onClear, filterlist, onFilterPreset }) => ( <> @@ -104,6 +111,7 @@ export default function CippTable({ striped = true, subheader = true, expandableRows, + actionsList, expandableRowsComponent, expandableRowsHideExpander, expandOnRowClicked, @@ -118,6 +126,15 @@ export default function CippTable({ }) { const [filterText, setFilterText] = React.useState('') const [updatedColumns, setUpdatedColumns] = React.useState(columns) + const [selectedRows, setSelectedRows] = React.useState(false) + const [genericGetRequest, getResults] = useLazyGenericGetRequestQuery() + const [genericPostRequest, postResults] = useLazyGenericPostRequestQuery() + const handleSelectedChange = ({ selectedRows }) => { + setSelectedRows(selectedRows) + if (selectedRows.length < 1) { + setSelectedRows(false) + } + } const [resetPaginationToggle, setResetPaginationToggle] = React.useState(false) const filteredItems = data.filter( (item) => JSON.stringify(item).toLowerCase().indexOf(filterText.toLowerCase()) !== -1, @@ -179,7 +196,47 @@ export default function CippTable({ setFilterText('') } } - + const handleModal = (modalMessage, modalUrl, modalType = 'GET', modalBody, modalInput) => { + if (modalType === 'GET') { + ModalService.confirm({ + body: ( +
+
{modalMessage}
+
+ ), + title: 'Confirm', + onConfirm: () => + selectedRows.forEach(function (number) { + console.log(number) + genericGetRequest({ path: modalUrl, refreshParam: number }) + }), + }) + } else { + ModalService.confirm({ + body: ( +
+ {modalInput && ( +
+ +
+ )} +
{modalMessage}
+
+ ), + title: 'Confirm', + onConfirm: () => [ + genericPostRequest({ + path: modalUrl, + values: { ...modalBody, ...{ input: inputRef.current.value } }, + }), + ], + }) + } + } + const executeselectedAction = (item) => { + console.log(item) + handleModal(item.modalMessage, item.modalUrl, item.modalType, item.modalBody, item.modalInput) + } const defaultActions = [] const dataKeys = () => { if (filteredItems.length >= 1) { @@ -277,6 +334,32 @@ export default function CippTable({ , ]) } + if (selectedRows && actionsList) { + defaultActions.push([ + <> + + + Actions + + + {actionsList.map((item, idx) => { + return ( + executeselectedAction(item)}> + {item.label} + + ) + })} + + + , + ]) + } return ( <>
@@ -309,36 +392,41 @@ export default function CippTable({ {!error && (
{(columns.length === updatedColumns.length || !dynamicColumns) && ( - } - paginationRowsPerPageOptions={[25, 50, 100, 200, 500]} - {...rest} - /> + <> + } + paginationRowsPerPageOptions={[25, 50, 100, 200, 500]} + {...rest} + /> + {selectedRows.length >= 1 && ( + Selected {selectedRows.length} items + )} + )}
)} diff --git a/src/views/cipp/Logs.js b/src/views/cipp/Logs.js index 7c91c5d46215..73a956b18b05 100644 --- a/src/views/cipp/Logs.js +++ b/src/views/cipp/Logs.js @@ -18,7 +18,8 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faSearch, faChevronRight, faChevronDown } from '@fortawesome/free-solid-svg-icons' import { CippDatatable, cellDateFormatter, CellTip } from 'src/components/tables' import { useNavigate } from 'react-router-dom' -import { useLazyGenericGetRequestQuery } from 'src/store/api/app' +import DatePicker from 'react-datepicker' +import 'react-datepicker/dist/react-datepicker.css' const columns = [ { @@ -82,8 +83,7 @@ const Logs = () => { const DateFilter = query.get('DateFilter') //const [genericPostRequest, postResults] = useLazyGenericPostRequestQuery() const [visibleA, setVisibleA] = useState(false) - const [listBackend, listBackendResult] = useLazyGenericGetRequestQuery() - + const [startDate, setStartDate] = useState(new Date()) const handleSubmit = async (values) => { Object.keys(values).filter(function (x) { if (values[x] === null) { @@ -93,6 +93,7 @@ const Logs = () => { }) const shippedValues = { SearchNow: true, + DateFilter: startDate.toLocaleDateString('en-GB').split('/').reverse().join(''), ...values, } var queryString = Object.keys(shippedValues) @@ -104,7 +105,6 @@ const Logs = () => { return ( <> - {listBackendResult.isUninitialized && listBackend({ path: 'api/ListLogs?ListLogs=true' })} @@ -128,7 +128,7 @@ const Logs = () => { render={({ handleSubmit, submitting, values }) => { return ( - + { /> - + { /> - - {listBackendResult.isSuccess && ( - - - - )} + + + setStartDate(date)} + /> + diff --git a/src/views/identity/administration/Users.js b/src/views/identity/administration/Users.js index c2b148ca0a5f..69832a469d07 100644 --- a/src/views/identity/administration/Users.js +++ b/src/views/identity/administration/Users.js @@ -281,6 +281,58 @@ const Users = () => { path: '/api/ListUsers', reportName: `${tenant?.defaultDomainName}-Users`, params: { TenantFilter: tenant?.defaultDomainName }, + tableProps: { + selectableRows: true, + actionsList: [ + { + label: 'Convert to Shared Mailbox', + modal: true, + modalUrl: `/api/ExecConvertToSharedMailbox?TenantFilter=${tenant.defaultDomainName}&ID=`, + modalMessage: 'Are you sure you want to convert this user to a shared mailbox?', + }, + { + label: 'Rerequire MFA registration', + modal: true, + modalUrl: `/api/ExecResetMFA?TenantFilter=${tenant.defaultDomainName}&ID=`, + modalMessage: 'Are you sure you want to enable MFA for this user?', + }, + { + label: 'Enable Online Archive', + color: 'info', + modal: true, + modalUrl: `/api/ExecEnableArchive?TenantFilter=${tenant.defaultDomainName}&ID=`, + modalMessage: 'Are you sure you want to enable the online archive for this user?', + }, + { + label: 'Add to group', + color: 'info', + modal: true, + modalUrl: `/api/ExecEnableArchive?TenantFilter=${tenant.defaultDomainName}&ID=`, + modalMessage: 'Are you sure you want to enable the online archive for this user?', + }, + { + label: 'Remove from group', + color: 'info', + modal: true, + modalUrl: `/api/ExecEnableArchive?TenantFilter=${tenant.defaultDomainName}&ID=`, + modalMessage: 'Are you sure you want to enable the online archive for this user?', + }, + { + label: 'Add to Shared Mailbox', + color: 'info', + modal: true, + modalUrl: `/api/ExecEnableArchive?TenantFilter=${tenant.defaultDomainName}&ID=`, + modalMessage: 'Are you sure you want to enable the online archive for this user?', + }, + { + label: 'Remove from shared mailbox', + color: 'info', + modal: true, + modalUrl: `/api/ExecEnableArchive?TenantFilter=${tenant.defaultDomainName}&ID=`, + modalMessage: 'Are you sure you want to enable the online archive for this user?', + }, + ], + }, }} /> ) diff --git a/src/views/tenant/standards/ListAppliedStandards.js b/src/views/tenant/standards/ListAppliedStandards.js index 0a28400ce42c..233dab08ffbe 100644 --- a/src/views/tenant/standards/ListAppliedStandards.js +++ b/src/views/tenant/standards/ListAppliedStandards.js @@ -15,6 +15,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import Skeleton from 'react-loading-skeleton' import { CippTable } from 'src/components/tables' import allStandardsList from 'src/data/standards' +import { CellTip } from 'src/components/tables/CellGenericFormat' const RefreshAction = () => { const [execStandards, execStandardsResults] = useLazyGenericGetRequestQuery() @@ -117,6 +118,7 @@ const ListAppliedStandards = () => { selector: (row) => row['StandardsExport'], sortable: true, exportSelector: 'StandardsExport', + cell: CellTip(row['StandardsExport']), }, ] From 4ae883ae5ef87f244905458c5270b0cdb2610790 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 15 Feb 2023 17:28:10 +0100 Subject: [PATCH 07/17] fixes tab --- src/views/cipp/Setup.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/views/cipp/Setup.js b/src/views/cipp/Setup.js index dd6bf8c4d6ac..5dd85f962c53 100644 --- a/src/views/cipp/Setup.js +++ b/src/views/cipp/Setup.js @@ -227,7 +227,11 @@ const Setup = () => { )} Step {getResults.data?.step} - {getResults.data.message}{' '} - {getResults.data.url && HERE} + {getResults.data.url && ( + + HERE + + )} )} From 8d0d4a40e6a650a0923b7583bee48f2113742ac7 Mon Sep 17 00:00:00 2001 From: BNWEIN Date: Thu, 23 Feb 2023 15:14:43 +0000 Subject: [PATCH 08/17] Update AddUser.js Removed adconnectsettings.dirSyncConfigured as this information is no longer being returned by the latest graph call being made (https://graph.microsoft.com/beta/organization) @KelvinTegelaar please review to make sure this didnt break anything else, but i do not think it should. --- src/views/identity/administration/AddUser.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/views/identity/administration/AddUser.js b/src/views/identity/administration/AddUser.js index ced12ede0f62..30a0aea33332 100644 --- a/src/views/identity/administration/AddUser.js +++ b/src/views/identity/administration/AddUser.js @@ -133,15 +133,13 @@ const AddUser = () => { {adcError && Unable to determine Azure AD Connect Settings} - {!adcIsFetching && - adconnectsettings.dirSyncEnabled && - adconnectsettings.dirSyncConfigured && ( - - Warning! {adconnectsettings.dirSyncEnabled} This tenant currently has Active - Directory Sync Enabled and Configured. This usually means users should be - created in Active Directory - - )} + {!adcIsFetching && adconnectsettings.dirSyncEnabled && ( + + Warning! {adconnectsettings.dirSyncEnabled} This tenant currently has Active + Directory Sync Enabled. This usually means users should be created in Active + Directory + + )}
Date: Thu, 23 Feb 2023 17:18:45 +0000 Subject: [PATCH 09/17] Update AutopilotAddDevice.js Fixed issue with case sensitive CSV headers --- src/views/endpoint/autopilot/AutopilotAddDevice.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/views/endpoint/autopilot/AutopilotAddDevice.js b/src/views/endpoint/autopilot/AutopilotAddDevice.js index 37c63f10f14c..80e28426fdef 100644 --- a/src/views/endpoint/autopilot/AutopilotAddDevice.js +++ b/src/views/endpoint/autopilot/AutopilotAddDevice.js @@ -76,13 +76,17 @@ const AddAPDevice = () => { const handleOnDrop = (data) => { const importdata = data.map((item) => { + const normalizedData = {} + Object.keys(item.data).forEach((key) => { + normalizedData[key.toLowerCase()] = item.data[key] + }) return { //Device serial number,Windows product ID,Hardware hash,Manufacturer name,Device Model - SerialNumber: item.data['Device serial number'], - productKey: item.data['Windows product ID'], - hardwareHash: item.data['Hardware hash'], - oemManufacturerName: item.data['Manufacturer name'], - modelName: item.data['Device Model'], + SerialNumber: normalizedData['device serial number'], + productKey: normalizedData['windows product id'], + hardwareHash: normalizedData['hardware hash'], + oemManufacturerName: normalizedData['manufacturer name'], + modelName: normalizedData['device model'], } }) setAutopilotdata(importdata) From aeb9082d54e1b8b6683a6d3c40108624a31ef980 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 27 Feb 2023 11:55:00 +0100 Subject: [PATCH 10/17] fixes minor issue with select --- src/components/tables/CippTable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/tables/CippTable.js b/src/components/tables/CippTable.js index fc8e3d242ecc..673c37609892 100644 --- a/src/components/tables/CippTable.js +++ b/src/components/tables/CippTable.js @@ -399,7 +399,7 @@ export default function CippTable({ theme={theme} subHeader={subheader} selectableRows={selectableRows} - onSelectedRowsChange={handleSelectedChange} + onSelectedRowsChange={onSelectedRowsChange} subHeaderComponent={subHeaderComponentMemo} subHeaderAlign="left" paginationResetDefaultPage={resetPaginationToggle} From 748dc110800df511b7c2fb91fadcbe87aeb5aa6d Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 27 Feb 2023 12:00:44 +0100 Subject: [PATCH 11/17] handle select changes --- src/components/tables/CippTable.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/tables/CippTable.js b/src/components/tables/CippTable.js index 673c37609892..67f025369f71 100644 --- a/src/components/tables/CippTable.js +++ b/src/components/tables/CippTable.js @@ -399,7 +399,9 @@ export default function CippTable({ theme={theme} subHeader={subheader} selectableRows={selectableRows} - onSelectedRowsChange={onSelectedRowsChange} + onSelectedRowsChange={ + onSelectedRowsChange ? onSelectedRowsChange : handleSelectedChange + } subHeaderComponent={subHeaderComponentMemo} subHeaderAlign="left" paginationResetDefaultPage={resetPaginationToggle} From d79c1c67c341a5a36a17f821f3e3776d55b1cecf Mon Sep 17 00:00:00 2001 From: BNWEIN Date: Tue, 28 Feb 2023 10:29:27 +0000 Subject: [PATCH 12/17] Update EditGroup.js Fixed removing contacts from groups --- src/views/identity/administration/EditGroup.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/views/identity/administration/EditGroup.js b/src/views/identity/administration/EditGroup.js index f988d52367c6..796992213c1a 100644 --- a/src/views/identity/administration/EditGroup.js +++ b/src/views/identity/administration/EditGroup.js @@ -108,6 +108,7 @@ const EditGroup = () => { RemoveMember: values.RemoveMembers ? values.RemoveMembers : '', RemoveOwner: values.RemoveOwners ? values.RemoveOwners : '', AddContacts: values.AddContacts ? values.AddContacts : '', + RemoveContacts: values.RemoveContacts ? values.RemoveContacts : '', allowExternal: values.allowExternal, } //window.alert(JSON.stringify(shippedValues)) @@ -167,14 +168,13 @@ const EditGroup = () => { {usersError && Failed to load list of users} - ({ - value: user.id, + value: user.mail, name: `${user.displayName} - ${user.mail}`, }))} placeholder={!contactsIsFetching ? 'Select user' : 'Loading...'} @@ -187,12 +187,12 @@ const EditGroup = () => { ({ - value: user.userPrincipalName, - name: `${user.displayName} - ${user.userPrincipalName}`, + value: user.mail, + name: `${user.displayName} - ${user.mail}`, }))} - placeholder={!usersIsFetching ? 'Select user' : 'Loading...'} + placeholder={!usersIsFetching ? 'Select Member' : 'Loading...'} name="RemoveMembers" /> {usersError && Failed to load list of users} From 69749cb9d9237a054afedcfdbf3f3475b2cf2e09 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 28 Feb 2023 23:08:43 +0100 Subject: [PATCH 13/17] fix bpa --- .../tenant/standards/BestPracticeAnalyser.js | 21 +------------------ .../tenant/standards/ListAppliedStandards.js | 1 - 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/src/views/tenant/standards/BestPracticeAnalyser.js b/src/views/tenant/standards/BestPracticeAnalyser.js index 1e2e947145e5..81a1d99323a2 100644 --- a/src/views/tenant/standards/BestPracticeAnalyser.js +++ b/src/views/tenant/standards/BestPracticeAnalyser.js @@ -179,27 +179,8 @@ const BestPracticeAnalyser = () => { name: 'Self Service Password Reset Enabled', selector: (row) => row['SelfServicePasswordReset'], exportSelector: 'SelfServicePasswordReset', - cell: (row, index, column) => { - const cell = column.selector(row) - if (cell === 'Off') { - return - } else if (cell === 'On') { - return - } else if (cell === 'Specific Users') { - return - } - return - }, - sortable: true, - minWidth: '150px', - maxWidth: '150px', - }, - { - name: 'Modern Auth Enabled', - selector: (row) => row['EnableModernAuth'], - sortable: true, - exportSelector: 'EnableModernAuth', cell: cellBooleanFormatter(), + sortable: true, minWidth: '150px', maxWidth: '150px', }, diff --git a/src/views/tenant/standards/ListAppliedStandards.js b/src/views/tenant/standards/ListAppliedStandards.js index 233dab08ffbe..541bebacfd00 100644 --- a/src/views/tenant/standards/ListAppliedStandards.js +++ b/src/views/tenant/standards/ListAppliedStandards.js @@ -118,7 +118,6 @@ const ListAppliedStandards = () => { selector: (row) => row['StandardsExport'], sortable: true, exportSelector: 'StandardsExport', - cell: CellTip(row['StandardsExport']), }, ] From c6e8417db69e230ba0c5265e21340c28180db798 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 1 Mar 2023 00:04:47 +0100 Subject: [PATCH 14/17] updated bpa to have new standards included. --- src/components/tables/CellBoolean.js | 7 ++++++- .../tenant/standards/BestPracticeAnalyser.js | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/components/tables/CellBoolean.js b/src/components/tables/CellBoolean.js index d12acd395f6f..30962b8ec8aa 100644 --- a/src/components/tables/CellBoolean.js +++ b/src/components/tables/CellBoolean.js @@ -42,11 +42,16 @@ export default function CellBoolean({ } else if (typeof cell === 'string') { if ( cell.toLowerCase() === 'success' || + cell.toLowerCase() === 'enabled' || cell.toLowerCase() === 'pass' || cell.toLowerCase() === 'true' ) { normalized = true - } else if (cell.toLowerCase() === 'fail' || cell.toLowerCase() === 'false') { + } else if ( + cell.toLowerCase() === 'fail' || + cell.toLowerCase() === 'default' || + cell.toLowerCase() === 'false' + ) { normalized = false } } diff --git a/src/views/tenant/standards/BestPracticeAnalyser.js b/src/views/tenant/standards/BestPracticeAnalyser.js index 81a1d99323a2..826b8633e1d5 100644 --- a/src/views/tenant/standards/BestPracticeAnalyser.js +++ b/src/views/tenant/standards/BestPracticeAnalyser.js @@ -184,6 +184,24 @@ const BestPracticeAnalyser = () => { minWidth: '150px', maxWidth: '150px', }, + { + name: 'TAP Enabled', + selector: (row) => row['TAPEnabled'], + exportSelector: 'TAPEnabled', + cell: cellBooleanFormatter({ reverse: false, warning: true }), + sortable: true, + minWidth: '150px', + maxWidth: '150px', + }, + { + name: 'MFA Registration Nudge Enabled', + selector: (row) => row['MFANudge'], + exportSelector: 'MFANudge', + cell: cellBooleanFormatter({ reverse: false, warning: true }), + sortable: true, + minWidth: '150px', + maxWidth: '150px', + }, { name: 'Shared Mailboxes Logins Disabled', selector: (row) => row['DisabledSharedMailboxLoginsCount'], From 3ac1afd2479d3e473008755410eb138ec2a094ca Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Thu, 2 Mar 2023 11:50:50 +0100 Subject: [PATCH 15/17] removed selectable rows for release --- src/views/identity/administration/Users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/identity/administration/Users.js b/src/views/identity/administration/Users.js index 69832a469d07..87d745a824d4 100644 --- a/src/views/identity/administration/Users.js +++ b/src/views/identity/administration/Users.js @@ -282,7 +282,7 @@ const Users = () => { reportName: `${tenant?.defaultDomainName}-Users`, params: { TenantFilter: tenant?.defaultDomainName }, tableProps: { - selectableRows: true, + selectableRows: false, actionsList: [ { label: 'Convert to Shared Mailbox', From 541028c01b136d382a945d2407d267ec4001450d Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 3 Mar 2023 10:59:58 +0100 Subject: [PATCH 16/17] prep for release --- public/version_latest.txt | 2 +- version_latest.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/version_latest.txt b/public/version_latest.txt index 56fea8a08d2f..a0cd9f0ccb01 100644 --- a/public/version_latest.txt +++ b/public/version_latest.txt @@ -1 +1 @@ -3.0.0 \ No newline at end of file +3.1.0 \ No newline at end of file diff --git a/version_latest.txt b/version_latest.txt index 56fea8a08d2f..a0cd9f0ccb01 100644 --- a/version_latest.txt +++ b/version_latest.txt @@ -1 +1 @@ -3.0.0 \ No newline at end of file +3.1.0 \ No newline at end of file From de9ddb2e7c497c72e1d1ff2bc16c0f00fca4e098 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 3 Mar 2023 11:03:10 +0100 Subject: [PATCH 17/17] updated packages --- package-lock.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c7fcb5869006..51ada863cb0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6908,9 +6908,10 @@ "license": "MIT" }, "node_modules/dns-packet": { - "version": "5.3.1", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dev": true, - "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -22626,7 +22627,9 @@ "dev": true }, "dns-packet": { - "version": "5.3.1", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dev": true, "requires": { "@leichtgewicht/ip-codec": "^2.0.1"