{"version":3,"sources":["webpack:///./app/containers/ControlCenter/constants.js","webpack:///./app/containers/ControlCenter/reducer.js","webpack:///./app/containers/ControlCenter/actions.js","webpack:///./app/containers/ControlCenter/sagas.js","webpack:///./app/components/StartMessage/index.js","webpack:///./app/containers/ControlCenter/selectors.js","webpack:///./app/containers/ControlFrameworkContentLibrary/actions.js","webpack:///./app/containers/ControlFrameworkContentLibrary/constants.js","webpack:///./app/containers/ControlCenter/messages.js","webpack:///./app/containers/ControlCenter/AddControlGroupModal.js","webpack:///./app/containers/ControlCenter/ControlFrameworkFilter.js","webpack:///./app/containers/ControlCenter/ControlFrameworksManager.js","webpack:///./app/containers/ControlCenter/CreatePolicyModal.js","webpack:///./app/containers/ControlCenter/PolicyList.js","webpack:///./app/containers/ControlCenter/index.js"],"names":["BULK_DISABLE_CONTROL_GROUPS","BULK_ENABLE_CONTROL_GROUPS","BULK_DELETE_CONTROL_GROUPS","BULK_DELETE_POLICIES","initialState","fromJS","creating","bulkEditing","controlCenterReducer","handleActions","state","set","CREATE_CONTROL_GROUP","CREATE_CONTROL_GROUP_SUCCESS","bulkDeleteControlGroups","createAction","bulkDisableControlGroups","bulkOperationSuccess","bulkEnableControlGroups","bulkDeletePolicies","bulkDisableFrameworks","bulkDeleteFrameworks","bulkEnableFrameworks","ControlCenterSaga","payload","all","map","srn","call","deletePolicy","put","controlGroupIds","id","setFrameworkEnabled","enabled","deleteControlGroup","takeLatest","themeable","children","theme","containerStyle","styles","container","display","paddingTop","justifyContent","alignItems","message","flexDirection","fontSize","padding","color","secondary","arrowContainer","width","style","height","d","fill","stroke","strokeWidth","selectControlCenterDomain","get","Map","selectCreatingControlGroup","createSelector","selectBulkEditing","setActiveFramework","defineMessages","createCGHeader","defaultMessage","loadCGHeader","cGTitleLabel","cGDescriptionLabel","cGFriendlyNameLabel","cancelButton","closeButton","filterButton","createButton","deleteButton","emptyGroups","overviewTitle","controlGroupsTitle","allPolicyTitle","filterControlGroupsHint","createControlGroupHint","createControlGroupButton","viewAllPoliciesLink","cfInstructions1","cfInstructions2","Icon","fa","name","spin","AddControlGroupModal","tabbar","paddingBottom","fontWeight","modalBody","maxHeight","overflow","friendlyName","title","description","value","setState","e","target","props","createControlGroup","FormLabel","for","required","label","messages","Input","type","onChange","setCardTitle","setFriendlyName","MarkdownEditor","setCardDescription","oldProps","creatingControlGroup","this","toggle","Modal","isOpen","size","ModalHeader","intl","formatMessage","ModalBody","renderCreateContent","ModalFooter","TextLink","onClick","Button","handleAdd","disabled","React","Component","mapStateToProps","createStructuredSelector","withConnect","connect","dispatch","bindActionCreators","compose","injectIntl","ControlFrameworkFilter","params","swimlanes","prevState","filterMenuExpanded","undefined","setFilters","filters","toggleFilterBubble","clearFilters","lane","toList","toJS","filterModes","ENABLED","DISABLED","filterList","gridArea","paddingLeft","fontFamily","sort","marginRight","filter","marginLeft","filterTitle","marginBottom","filterHeader","filterPanelFooter","margin","Popover","onToggle","filtersEmpty","emphasis","cursor","placeholder","handleSwimlaneFilterChange","isMulti","isClearable","options","getSwimlaneOptions","handleEnabledStateChange","getEnableOptions","paddingRight","applyFilters","ENABLED_FILTER_MODE","ALL","transform","ControlFrameworksManager","newFilters","currentState","showCreateControlGroupModal","checkboxSelectedRows","cg","row","push","pathname","search","qs","stringify","controlGroupId","api","gridApi","evnt","rows","getSelectedRows","bigGuys","allControlGroups","forEach","cf","getIn","createdBy","sonraiUsers","srns","cfSwimlanes","swimlaneFilters","s","length","swombo","includes","isEmpty","instructions","emptyIcon","frameworks","getNoDupesBabyYaaAustinPowersVoice","tableData","createdByUser","displayAsEnabled","userData","checkInSwimlane","checkEnabled","status","getSwimlaneStatus","policies","List","lastModified","a","b","localeCompare","sensitivity","canEdit","userHasPermission","permissionName","resourceId","org","BorderedCard","noActive","DataTable","autosize","hasCheckBoxes","pageSize","selectionChanged","handleSelectionChange","customFilter","bulkActionWorking","bulkActions","iconName","deleteSelectedControlGroups","disableSelectedControlGroups","enableSelectedControlGroups","onDoubleClickRow","navigateToCF","onLoad","overlayLoadingTemplate","data","expandCollapseColumn","customColumnConfig","flex","hide","minWidth","cellRendererFramework","neutralDark","fontStyle","success","valueGetter","stripTags","CreatedByBadge","table","header","gridTemplateColumns","gridColumnGap","textAlign","groupHeader","neutralMedium","fontVariant","toggleCreateControlGroupModal","SectionHeader","to","WithPermission","renderControlGroups","selectControlGroups","selectPolicies","policiesLoaded","selectLoadedPolicies","selectSonraiUsers","selectSwimlanes","permissionChecker","CreatePolicyModal","selectedSearchValue","selectedSearchSrn","alertLevel","alertingLevelNumeric","policyEvalOp","parsed","parseInt","policyEvalTarget","isNaN","policyEvalType","evalCriteria","createPolicy","searchId","POLICY_EVAL_TYPES","COUNT","POLICY_OP_TYPES","GT","prevProps","PolicyEditor","savedSearches","sonraiSearches","setPolicyEvalTarget","setPolicyTitle","setPolicyDescription","onAlertingLevelNumericChange","setSelectedSearch","setPolicyEvalOp","setPolicyEvalType","loading","Breadcrumb","PolicyList","createModalOpen","policyId","column","colId","navigateToSearch","searchSrn","navigateToPolicy","policySrn","view","SEARCH_VIEWS","BUILD","policy","alertingLevel","controlFrameworks","item","navContextContainer","gridTemplateRows","gridTemplateAreas","gridRowGap","titleContainer","pageTitle","policyContainer","formatPolicies","openCreateModal","defaultColDef","onCellDoubleClicked","handleCellClick","handleBulkDeletePolicies","closeCreateModal","selectSonraiSearches","selectSavedSearches","selectCreatingPolicy","LoadingAnim","ControlCenter","loadedPolicies","loadedControlGroups","sonraiUsersLoading","location","selectLoadedControlGroups","selectSonraiUsersLoading","withReducer","injectReducer","key","reducer","withSaga","injectSaga","saga","sagas"],"mappings":"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","file":"45.10c3a738d1eae103a471.chunk.js","sourcesContent":["/*\n *\n * ControlCenter constants\n *\n */\n\nexport const BULK_DISABLE_CONTROL_GROUPS =\n 'app/ControlCenter/BULK_DISABLE_CONTROL_GROUP'\nexport const BULK_ENABLE_CONTROL_GROUPS =\n 'app/ControlCenter/BULK_ENABLE_CONTROL_GROUP'\nexport const BULK_DELETE_CONTROL_GROUPS =\n 'app/ControlCenter/BULK_DELETE_CONTROL_GROUP'\nexport const BULK_OPERATION_SUCCESS = 'app/ControlCenter/BULK_OPERATION_SUCCESS'\n\nexport const BULK_DELETE_POLICIES = 'app/ControlCenter/BULK_DELETE_POLICIES'\n","/*\n *\n * ControlCenter reducer\n *\n */\n\nimport { fromJS } from 'immutable'\nimport {\n BULK_DELETE_CONTROL_GROUPS,\n BULK_ENABLE_CONTROL_GROUPS,\n BULK_DISABLE_CONTROL_GROUPS,\n BULK_OPERATION_SUCCESS,\n BULK_DELETE_POLICIES,\n} from './constants'\nimport {\n CREATE_CONTROL_GROUP,\n CREATE_CONTROL_GROUP_SUCCESS,\n} from 'containers/ControlFrameworkData/constants'\nimport { handleActions } from 'redux-actions'\n\nconst initialState = fromJS({\n creating: false,\n bulkEditing: false,\n})\n\nconst controlCenterReducer = handleActions(\n {\n [BULK_ENABLE_CONTROL_GROUPS]: state => state.set('bulkEditing', true),\n [BULK_DELETE_CONTROL_GROUPS]: state => state.set('bulkEditing', true),\n [BULK_DISABLE_CONTROL_GROUPS]: state => state.set('bulkEditing', true),\n [BULK_DELETE_POLICIES]: state => state.set('bulkEditing', true),\n [BULK_OPERATION_SUCCESS]: state => state.set('bulkEditing', false),\n [CREATE_CONTROL_GROUP]: state => state.set('creating', true),\n [CREATE_CONTROL_GROUP_SUCCESS]: state => state.set('creating', false),\n },\n initialState\n)\n\nexport default controlCenterReducer\n","/*\n *\n * ControlCenter actions\n *\n */\n\nimport {\n BULK_DELETE_CONTROL_GROUPS,\n BULK_DISABLE_CONTROL_GROUPS,\n BULK_ENABLE_CONTROL_GROUPS,\n BULK_OPERATION_SUCCESS,\n BULK_DELETE_POLICIES,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const bulkDeleteControlGroups = createAction(BULK_DELETE_CONTROL_GROUPS)\nexport const bulkDisableControlGroups = createAction(\n BULK_DISABLE_CONTROL_GROUPS\n)\nexport const bulkOperationSuccess = createAction(BULK_OPERATION_SUCCESS)\nexport const bulkEnableControlGroups = createAction(BULK_ENABLE_CONTROL_GROUPS)\n\nexport const bulkDeletePolicies = createAction(BULK_DELETE_POLICIES)\n","import { all, put, takeLatest, call } from 'redux-saga/effects'\n\nimport {\n setFrameworkEnabled,\n deleteControlGroup,\n deletePolicy,\n} from 'containers/ControlFrameworkData/sagas'\nimport { bulkOperationSuccess } from './actions'\nimport {\n BULK_DELETE_CONTROL_GROUPS,\n BULK_DISABLE_CONTROL_GROUPS,\n BULK_ENABLE_CONTROL_GROUPS,\n BULK_DELETE_POLICIES,\n} from './constants'\n\nfunction* bulkDeletePolicies({ payload }) {\n //payload = arr of srns to delete\n yield all(payload.map(srn => call(deletePolicy, { payload: srn })))\n yield put(bulkOperationSuccess())\n}\n\nfunction* bulkDisableFrameworks({ payload }) {\n const controlGroupIds = payload\n\n yield all(\n controlGroupIds.map(id =>\n call(setFrameworkEnabled, { payload: { srn: id, enabled: false } })\n )\n )\n\n yield put(bulkOperationSuccess())\n}\n\nfunction* bulkDeleteFrameworks({ payload }) {\n const controlGroupIds = payload\n\n yield all(\n controlGroupIds.map(id => call(deleteControlGroup, { payload: id }))\n )\n\n yield put(bulkOperationSuccess())\n}\n\nfunction* bulkEnableFrameworks({ payload }) {\n const controlGroupIds = payload\n\n yield all(\n controlGroupIds.map(id =>\n call(setFrameworkEnabled, { payload: { srn: id, enabled: true } })\n )\n )\n\n yield put(bulkOperationSuccess())\n}\n\nfunction* ControlCenterSaga() {\n yield all([\n takeLatest(BULK_DELETE_CONTROL_GROUPS, bulkDeleteFrameworks),\n takeLatest(BULK_DISABLE_CONTROL_GROUPS, bulkDisableFrameworks),\n takeLatest(BULK_ENABLE_CONTROL_GROUPS, bulkEnableFrameworks),\n takeLatest(BULK_DELETE_POLICIES, bulkDeletePolicies),\n ])\n}\n\nexport default ControlCenterSaga\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nconst StartMessage = ({ children, theme, containerStyle = {} }) => {\n const styles = {\n container: {\n display: 'flex',\n paddingTop: '2em',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n\n message: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n fontSize: '1.5em',\n padding: '0 1em',\n color: theme.secondary,\n },\n arrowContainer: {\n width: '250px',\n },\n }\n\n return (\n
\n
{children}
\n
\n \n \n \n \n
\n
\n )\n}\n\nStartMessage.propTypes = {\n children: PropTypes.node,\n containerStyle: PropTypes.object,\n theme: themeShape,\n}\n\nexport default themeable(StartMessage)\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectControlCenterDomain = state => state.get('controlCenter') || Map()\n\nexport const selectCreatingControlGroup = createSelector(\n selectControlCenterDomain,\n state => state.get('creating', false)\n)\n\nexport const selectBulkEditing = createSelector(\n selectControlCenterDomain,\n state => state.get('bulkEditing', Map())\n)\n","import {\n FETCH_CONTENT,\n SET_CONTENT,\n CLEAR_CONTENT,\n SET_ACTIVE_FRAMEWORK,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const fetchContent = createAction(FETCH_CONTENT)\nexport const setContent = createAction(SET_CONTENT)\nexport const clearContent = createAction(CLEAR_CONTENT)\nexport const setActiveFramework = createAction(SET_ACTIVE_FRAMEWORK)\n","export const FETCH_CONTENT = 'app/ControlFrameworkContentLibrary/FETCH_CONTENT'\nexport const SET_CONTENT = 'app/ControlFrameworkContentLibrary/SET_CONTENT'\nexport const CLEAR_CONTENT = 'app/ControlFrameworkContentLibrary/CLEAR_CONTENT'\nexport const SET_ACTIVE_FRAMEWORK =\n 'app/ControlFrameworkContentLibrary/SET_ACTIVE_FRAMEWORK'\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n createCGHeader: {\n id: 'app.containers.ControlCenter.createCGHeader',\n defaultMessage: 'Create Control Framework',\n },\n loadCGHeader: {\n id: 'app.containers.ControlCenter.loadCGHeader',\n defaultMessage: 'Load from Library',\n },\n cGTitleLabel: {\n id: 'app.containers.ControlCenter.cGTitleLabel',\n defaultMessage: 'Title',\n },\n cGDescriptionLabel: {\n id: 'app.containers.ControlCenter.cGDescriptionLabel',\n defaultMessage: 'Description',\n },\n cGFriendlyNameLabel: {\n id: 'app.containers.ControlCenter.cGFriendlyNameLabel',\n defaultMessage: 'Short Name',\n },\n cancelButton: {\n id: 'app.containers.ControlCenter.cancelButton',\n defaultMessage: 'Cancel',\n },\n closeButton: {\n id: 'app.containers.ControlCenter.closeButton',\n defaultMessage: 'Close',\n },\n filterButton: {\n id: 'app.containers.ControlCenter.filterButton',\n defaultMessage: 'Filter Control Frameworks',\n },\n createButton: {\n id: 'app.containers.ControlCenter.createButton',\n defaultMessage: 'Create',\n },\n deleteButton: {\n id: 'app.containers.ControlCenter.deleteButton',\n defaultMessage: 'Delete',\n },\n emptyGroups: {\n id: 'app.containers.ControlCenter.emptyGroups',\n defaultMessage: 'No Control Frameworks',\n },\n overviewTitle: {\n id: 'app.containers.ControlCenter.overviewTitle',\n defaultMessage: 'Overview',\n },\n controlGroupsTitle: {\n id: 'app.containers.ControlCenter.controlGroupsTitle',\n defaultMessage: 'Control Frameworks',\n },\n allPolicyTitle: {\n id: 'app.containers.ControlCenter.allPolicyTitle',\n defaultMessage: 'All Policies',\n },\n filterControlGroupsHint: {\n id: 'app.containers.ControlCenter.filterControlGroupsHint',\n defaultMessage: 'Filter control frameworks...',\n },\n createControlGroupHint: {\n id: 'app.containers.ControlCenter.createControlGroupHint',\n defaultMessage: 'Create a control framework',\n },\n createControlGroupButton: {\n id: 'app.containers.ControlCenter.createControlGroupButton',\n defaultMessage: 'Create Framework',\n },\n viewAllPoliciesLink: {\n id: 'app.containers.ControlCenter.viewAllPoliciesLink',\n defaultMessage: 'View All Policies',\n },\n cfInstructions1: {\n id: 'app.containers.ControlCenter.cfInstructions1',\n defaultMessage:\n 'Control Frameworks combine powerful searches with alerting thresholds.',\n },\n cfInstructions2: {\n id: 'app.containers.ControlCenter.cfInstructions2',\n defaultMessage: 'Load from the content library, or craft your own.',\n },\n})\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Input } from 'reactstrap'\nimport { FormattedMessage, injectIntl, intlShape } from 'react-intl'\n\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport MarkdownEditor from 'components/MarkdownEditor'\n\nimport { selectCreatingControlGroup } from './selectors'\nimport { setActiveFramework } from 'containers/ControlFrameworkContentLibrary/actions'\nimport { createControlGroup } from 'containers/ControlFrameworkData/actions'\nimport messages from './messages'\n\nexport class AddControlGroupModal extends React.Component {\n styles = {\n tabbar: {\n paddingBottom: 0,\n fontWeight: '300',\n },\n modalBody: { maxHeight: '75vh', overflow: 'auto' },\n }\n\n state = {\n friendlyName: '',\n title: '',\n description: '',\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.creatingControlGroup && !this.props.creatingControlGroup) {\n this.props.toggle()\n }\n }\n\n setCardDescription = value => {\n this.setState({\n description: value,\n })\n }\n\n setCardTitle = e => {\n this.setState({\n title: e.target.value,\n })\n }\n\n setFriendlyName = e => {\n this.setState({\n friendlyName: e.target.value,\n })\n }\n\n handleAdd = () => {\n this.props.createControlGroup({\n title: this.state.title,\n description: this.state.description,\n friendlyName: this.state.friendlyName,\n })\n }\n\n renderCreateContent = () => {\n return (\n \n }\n />\n \n\n }\n />\n \n\n }\n />\n \n \n )\n }\n\n render() {\n return (\n \n \n {this.props.intl.formatMessage(messages.createCGHeader)}\n \n \n {this.renderCreateContent()}\n \n \n \n \n \n \n \n {this.props.creatingControlGroup ? (\n \n ) : (\n \n )}\n \n \n \n \n )\n }\n}\n\nAddControlGroupModal.propTypes = {\n creatingControlGroup: PropTypes.bool,\n createControlGroup: PropTypes.func.isRequired,\n toggle: PropTypes.func.isRequired,\n intl: intlShape,\n setActiveFramework: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n creatingControlGroup: selectCreatingControlGroup,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n createControlGroup,\n setActiveFramework,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, injectIntl)(AddControlGroupModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Button from 'components/Button'\nimport Popover, { PopoverBody, PopoverAnchor } from 'components/Popover'\nimport Icon from 'components/Icon'\nimport Select from 'react-select'\nimport TextLink from 'components/TextLink'\n\nexport class ControlFrameworkFilter extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n swimlanes: undefined,\n enabled: undefined,\n }\n\n this.styles = {\n filterList: {\n gridArea: 'filterList',\n paddingTop: '0.75em',\n paddingLeft: '1em',\n fontFamily: 'Roboto-Italic',\n fontSize: '14px',\n color: '#777777',\n },\n sort: {\n marginRight: '0.5em',\n },\n filter: {\n marginLeft: '0.5em',\n },\n filterTitle: {\n marginBottom: '0.5em',\n display: 'block',\n },\n filterHeader: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0.25rem 0.5rem 0.25rem 0.5rem',\n },\n filterPanelFooter: {\n width: '100%',\n margin: '1rem 0rem 0rem 0rem',\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n }\n }\n\n handleEnabledStateChange = params => {\n this.setState({ enabled: params })\n }\n\n handleSwimlaneFilterChange = params => {\n this.setState({ swimlanes: params })\n }\n\n toggleFilterBubble = () => {\n this.setState(prevState => ({\n filterMenuExpanded: !prevState.filterMenuExpanded,\n swimlanes: undefined,\n enabled: undefined,\n }))\n }\n\n applyFilters = () => {\n this.props.setFilters({\n swimlanes: this.state.swimlanes,\n enabled: this.state.enabled,\n })\n this.setState({\n filterMenuExpanded: false,\n })\n }\n\n filtersEmpty = () => {\n return (\n !this.props.filters.get('swimlanes') && !this.props.filters.get('enabled')\n )\n }\n\n clearFilters = () => {\n this.toggleFilterBubble()\n this.setState({ swimlanes: undefined, enabled: undefined })\n this.props.clearFilters()\n }\n\n getSwimlaneOptions = () =>\n this.props.swimlanes\n ? this.props.swimlanes\n .map(lane => ({\n value: lane.get('srn'),\n label: lane.get('title'),\n }))\n .toList()\n .toJS()\n : []\n\n getEnableOptions = () => [\n { value: this.props.filterModes.ENABLED, label: 'Enabled' },\n { value: this.props.filterModes.DISABLED, label: 'Disabled' },\n ]\n\n render() {\n const filters = this.props.filters.toJS()\n\n return (\n \n \n {this.filtersEmpty() ? (\n \n ) : (\n \n )}\n \n \n
\n
\n \n Filters\n
\n \n Clear All Filters\n \n
\n\n
\n Enabled on Swimlanes:\n \n
\n
\n Enabled State:\n \n
\n \n
\n \n Cancel\n \n \n
\n
\n \n )\n }\n}\n\nControlFrameworkFilter.propTypes = {\n filters: ImmutablePropTypes.map,\n clearFilters: PropTypes.func,\n setFilters: PropTypes.func,\n filterModes: PropTypes.object,\n swimlanes: ImmutablePropTypes.map,\n theme: themeShape,\n}\n\nexport default themeable(ControlFrameworkFilter)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { FormattedMessage, injectIntl, intlShape } from 'react-intl'\nimport { List, Map, fromJS } from 'immutable'\nimport qs from 'query-string'\nimport { push } from 'connected-react-router'\n\nimport BorderedCard from 'components/BorderedCard'\nimport DataTable from 'components/DataTable'\nimport permissionChecker from 'containers/PermissionChecker'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport StartMessage from 'components/StartMessage'\nimport { ToolbarItem } from 'components/BulkActionToolbar'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\nimport Button from 'components/Button'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport {\n selectPolicies,\n selectControlGroups,\n selectLoadedPolicies,\n} from 'containers/ControlFrameworkData/selectors'\nimport SectionHeader from 'components/SectionHeader'\nimport {\n selectSonraiUsers,\n selectSwimlanes,\n} from 'containers/SonraiData/selectors'\n\nimport {\n bulkDeleteControlGroups,\n bulkEnableControlGroups,\n bulkDisableControlGroups,\n} from './actions'\nimport { selectBulkEditing } from './selectors'\nimport AddControlGroupModal from './AddControlGroupModal'\nimport ControlFrameworkFilter from './ControlFrameworkFilter'\nimport messages from './messages'\nimport CreatedByBadge from 'components/CreatedByBadge'\n\nimport { displayAsEnabled } from './utils'\nimport { stripTags } from 'utils/sonraiUtils'\n\nconst ENABLED_FILTER_MODE = { ENABLED: 1, DISABLED: -1, ALL: 0 }\nexport class ControlFrameworksManager extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n header: {\n paddingBottom: '1em',\n display: 'grid',\n gridTemplateColumns: '1fr auto auto',\n gridColumnGap: '1em',\n alignItems: 'center',\n },\n instructions: {\n textAlign: 'center',\n color: props.theme.neutralDark,\n paddingTop: '4em',\n },\n emptyIcon: {\n color: props.theme.secondary,\n },\n groupHeader: {\n color: props.theme.neutralMedium,\n fontVariant: 'small-caps',\n fontWeight: '400',\n fontSize: '1.3em',\n },\n noActive: {\n color: props.theme.neutralMedium,\n textAlign: 'center',\n },\n filters: {\n display: 'flex',\n alignItems: 'center',\n },\n }\n\n this.state = {\n showCreateControlGroupModal: false,\n checkboxSelectedRows: [],\n filters: Map({\n swimlanes: null,\n enabled: null,\n }),\n }\n }\n\n setFilters = filters => {\n this.setState(prevState => {\n let newFilters = prevState.filters\n newFilters = newFilters\n .set('swimlanes', fromJS(filters.swimlanes))\n .set('enabled', fromJS(filters.enabled))\n return { filters: fromJS(newFilters) }\n })\n }\n\n clearFilters = () => {\n this.setState({\n filters: fromJS({ swimlanes: null, enabled: null }),\n })\n }\n\n toggleCreateControlGroupModal = () => {\n this.setState(currentState => ({\n showCreateControlGroupModal: !currentState.showCreateControlGroupModal,\n }))\n }\n\n deleteSelectedControlGroups = () => {\n this.props.bulkDeleteControlGroups(\n this.state.checkboxSelectedRows.map(cg => cg.srn)\n )\n\n this.setState({\n checkboxSelectedRows: [],\n })\n }\n\n navigateToCF = row => {\n this.props.push({\n pathname: '/App/ControlCenter/ControlGroup',\n search: qs.stringify({\n controlGroupId: row.srn,\n }),\n })\n }\n\n onLoad = ({ api }) => {\n this.gridApi = api\n }\n\n handleSelectionChange = evnt => {\n const rows = evnt.api.getSelectedRows() || []\n this.setState({ checkboxSelectedRows: rows })\n }\n\n // if control framework is a clone of another framework, take the framework with longest srn because it's newer\n // use srn UUID portion to determine if CF is the child of another CF\n getNoDupesBabyYaaAustinPowersVoice = () => {\n let bigGuys = Map()\n this.props.allControlGroups.forEach(cf => {\n if (cf.getIn(['cloneOf', 'items', 0, 'srn'], false)) {\n bigGuys = bigGuys.set(cf.getIn(['cloneOf', 'items', 0, 'srn']), true)\n }\n })\n return this.props.allControlGroups.toList().filter(cf => {\n const createdBy = this.props.sonraiUsers.get(cf.get('createdBy'))\n if (bigGuys.get(cf.get('srn')) && !createdBy) {\n return false\n } else {\n return true\n }\n })\n }\n\n checkInSwimlane = srns => {\n const cfSwimlanes = srns ? srns : []\n const swimlaneFilters = this.state.filters.get('swimlanes')\n ? this.state.filters\n .get('swimlanes')\n .map(s => s.get('value'))\n .toJS()\n : null\n if (!swimlaneFilters || swimlaneFilters.length < 1) return true\n\n for (let swombo of swimlaneFilters) {\n if (cfSwimlanes.includes(swombo)) return true\n }\n return false\n }\n\n checkEnabled = enabled => {\n if (!this.state.filters.get('enabled')) {\n return true\n }\n\n if (\n this.state.filters.getIn(['enabled', 'value']) ===\n ENABLED_FILTER_MODE.ENABLED\n ) {\n return enabled\n }\n\n if (\n this.state.filters.getIn(['enabled', 'value']) ===\n ENABLED_FILTER_MODE.DISABLED\n ) {\n return !enabled\n }\n }\n\n disableSelectedControlGroups = () => {\n this.props.bulkDisableControlGroups(\n this.state.checkboxSelectedRows.map(row => row.srn)\n )\n this.setState({ checkboxSelectedRows: [] })\n }\n\n enableSelectedControlGroups = () => {\n this.props.bulkEnableControlGroups(\n this.state.checkboxSelectedRows.map(row => row.srn)\n )\n this.setState({ checkboxSelectedRows: [] })\n }\n\n getSwimlaneStatus = (enabled, cf) => {\n if (!enabled) {\n return 'Disabled'\n }\n\n if (!cf.get('swimlaneSRNs') || cf.get('swimlaneSRNs').isEmpty()) {\n return 'Enabled globally'\n }\n\n if (cf.get('swimlaneSRNs').size === 1) {\n return 'Enabled on 1 swimlane'\n }\n\n return `Enabled on ${cf.get('swimlaneSRNs').size} swimlanes`\n }\n\n renderControlGroups = () => {\n if (this.props.allControlGroups.isEmpty()) {\n return (\n \n
\n

\n \n

\n
\n \n \n \n
\n
\n

\n \n

\n
\n
\n )\n }\n\n const frameworks = this.getNoDupesBabyYaaAustinPowersVoice()\n const tableData = []\n\n frameworks.forEach(cf => {\n const createdByUser = this.props.sonraiUsers\n .get(cf.get('createdBy'), Map())\n .toJS()\n\n const enabled = displayAsEnabled(cf, frameworks, this.props.userData)\n if (\n this.checkInSwimlane(cf.get('swimlaneSRNs')) &&\n this.checkEnabled(cf.get('enabled'))\n ) {\n tableData.push({\n title: cf.get('title') || '',\n description: cf.get('description'),\n status: this.getSwimlaneStatus(enabled, cf),\n policies: cf.getIn(['contains', 'items'], List()).size,\n swimlanes: cf.get('swimlaneSRNs') ? cf.get('swimlaneSRNs').size : 0,\n enabled: enabled,\n lastModified: cf.get('lastModified'),\n createdBy: cf.get('createdBy'),\n createdByUser: createdByUser,\n srn: cf.get('srn'),\n })\n }\n })\n\n tableData.sort((a, b) =>\n a.title.localeCompare(b.title, undefined, { sensitivity: 'base' })\n )\n\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.controlframeworks',\n resourceId: ({ org }) => `/org/${org}/`,\n })\n\n return (\n
\n \n {frameworks.isEmpty() ? (\n

\n There are no active Control Frameworks\n

\n ) : (\n (\n
\n \n
\n )}\n bulkActionWorking={this.props.bulkEditing}\n bulkActions={\n canEdit\n ? [\n \n \n ,\n \n Disable\n ,\n \n Enable Globally\n ,\n ]\n : undefined\n }\n onDoubleClickRow={this.navigateToCF}\n onLoad={this.onLoad}\n overlayLoadingTemplate='Working...'\n data={tableData}\n expandCollapseColumn=\"description\"\n customColumnConfig={{\n title: {\n flex: 1,\n },\n srn: {\n hide: true,\n },\n policies: {\n width: 120,\n },\n swimlanes: {\n width: 140,\n },\n enabled: {\n hide: true,\n },\n createdByUser: {\n hide: true,\n },\n status: {\n minWidth: 200,\n cellRendererFramework: ({ value, data }) => {\n if (!data || !value) {\n return null\n }\n\n if (value === 'Disabled') {\n return (\n \n {value}\n \n )\n }\n\n return (\n \n {value}\n \n )\n },\n },\n createdBy: {\n minWidth: 200,\n width: 200,\n valueGetter: params => {\n if (!params.data) {\n return ''\n }\n\n return params.data.createdByUser.name\n ? stripTags(params.data.createdByUser.name)\n : 'Sonrai'\n },\n cellRendererFramework: ({ data }) => {\n if (!data) {\n return null\n }\n return \n },\n },\n }}\n />\n )}\n \n
\n )\n }\n\n render() {\n return (\n \n {this.state.showCreateControlGroupModal && (\n \n )}\n
\n \n \n \n
\n \n \n \n
\n
\n `/org/${org}/`}\n >\n \n {' '}\n \n \n \n
\n
\n {this.renderControlGroups()}\n
\n )\n }\n}\n\nControlFrameworksManager.propTypes = {\n bulkEditing: PropTypes.bool,\n bulkDeleteControlGroups: PropTypes.func,\n bulkDisableControlGroups: PropTypes.func,\n bulkEnableControlGroups: PropTypes.func,\n allControlGroups: ImmutablePropTypes.iterable.isRequired,\n intl: intlShape,\n push: PropTypes.func.isRequired,\n userData: PropTypes.object.isRequired,\n userHasPermission: PropTypes.func.isRequired,\n sonraiUsers: ImmutablePropTypes.map.isRequired,\n swimlanes: ImmutablePropTypes.map,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n bulkEditing: selectBulkEditing,\n allControlGroups: selectControlGroups,\n policies: selectPolicies,\n policiesLoaded: selectLoadedPolicies,\n sonraiUsers: selectSonraiUsers,\n swimlanes: selectSwimlanes,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n bulkDeleteControlGroups,\n bulkEnableControlGroups,\n bulkDisableControlGroups,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(\n withConnect,\n permissionChecker,\n themeable,\n injectIntl\n)(ControlFrameworksManager)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PolicyEditor from 'containers/PolicyEdit/PolicyEditor'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport {\n POLICY_EVAL_TYPES,\n POLICY_OP_TYPES,\n} from 'containers/PolicyEdit/constants'\n\nclass CreatePolicyModal extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n policyEvalType: POLICY_EVAL_TYPES.COUNT,\n policyEvalTarget: 0,\n policyEvalOp: POLICY_OP_TYPES.GT,\n description: '',\n title: '',\n alertingLevelNumeric: 5,\n selectedSearchValue: null,\n selectedSearchSrn: null,\n }\n }\n\n componentDidUpdate(prevProps) {\n // if (this.props.error && !prevState.errorMsg) {\n // this.setError(this.props.error)\n // }\n // after load is complete with no errors, close em up\n if (prevProps.creating && !this.props.creating) {\n this.props.toggle()\n }\n }\n\n setSelectedSearch = value => {\n if (!value) {\n this.setState({\n selectedSearchValue: null,\n selectedSearchSrn: null,\n })\n } else {\n this.setState({\n selectedSearchValue: value.value,\n selectedSearchSrn: value.srn,\n })\n }\n }\n\n setPolicyDescription = value => {\n this.setState({ description: value })\n }\n\n setPolicyTitle = params => this.setState({ title: params.target.value })\n\n onAlertingLevelNumericChange = alertLevel =>\n this.setState({ alertingLevelNumeric: alertLevel })\n\n setPolicyEvalOp = e => {\n this.setState({\n policyEvalOp: e.target.value,\n })\n }\n\n setPolicyEvalTarget = e => {\n const parsed = parseInt(e.target.value)\n this.setState({\n policyEvalTarget: isNaN(parsed) ? e.target.value : parsed,\n })\n }\n\n setPolicyEvalType = e => {\n this.setState({\n policyEvalType: e.target.value,\n })\n }\n\n createPolicy = () => {\n const evalCriteria = {\n [this.state.policyEvalOp]: [\n this.state.policyEvalType,\n this.state.policyEvalTarget,\n ],\n }\n\n this.props.createPolicy({\n title: this.state.title,\n description: this.state.description,\n evalCriteria: evalCriteria,\n alertingLevelNumeric: this.state.alertingLevelNumeric,\n searchId: this.state.selectedSearchSrn,\n })\n }\n\n render() {\n return (\n \n Create Policy\n \n \n \n \n \n Cancel\n \n \n {this.props.creating ? : `Create`}\n \n \n \n )\n }\n}\n\nCreatePolicyModal.propTypes = {\n createPolicy: PropTypes.func,\n toggle: PropTypes.func,\n isOpen: PropTypes.bool,\n savedSearches: ImmutablePropTypes.map,\n sonraiSearches: ImmutablePropTypes.list,\n creating: PropTypes.bool,\n}\nexport default CreatePolicyModal\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { List, Map } from 'immutable'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { FormattedMessage } from 'react-intl'\nimport messages from './messages'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport {\n selectPolicies,\n selectCreatingPolicy,\n} from 'containers/ControlFrameworkData/selectors'\nimport { selectSonraiUsers } from 'containers/SonraiData/selectors'\nimport { selectBulkEditing } from './selectors'\nimport DataTable from 'components/DataTable'\nimport CreatedByBadge from 'components/CreatedByBadge'\nimport Breadcrumb, { BreadcrumbItem } from 'components/Breadcrumb'\nimport BorderedCard from 'components/BorderedCard'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { createPolicy } from 'containers/ControlFrameworkData/actions'\nimport { bulkDeletePolicies } from './actions'\nimport { push } from 'connected-react-router'\nimport CreatePolicyModal from './CreatePolicyModal'\nimport {\n selectSonraiSearches,\n selectSavedSearches,\n} from 'containers/SonraiData/selectors'\nimport qs from 'query-string'\nimport { SEARCH_VIEWS } from 'containers/Search/constants'\nimport permissionChecker from 'containers/PermissionChecker'\nimport { ToolbarItem } from 'components/ActionToolbar'\n\nclass PolicyList extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n createModalOpen: false,\n checkboxSelectedRows: [],\n }\n this.styles = {\n navContextContainer: {\n height: '24px',\n gridArea: 'breadcrumbs',\n },\n container: {\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: 'auto 45px 1fr',\n gridTemplateAreas: '\"breadcrumbs\" \"title\" \"policies\"',\n gridColumnGap: '1em',\n gridRowGap: '0.5em',\n padding: '1em',\n height: '100%',\n overflow: 'auto',\n },\n titleContainer: {\n gridArea: 'title',\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n },\n pageTitle: {\n fontSize: '1.5em',\n },\n policyContainer: {\n gridArea: 'policies',\n },\n }\n }\n\n closeCreateModal = () => {\n this.setState({ createModalOpen: false })\n }\n\n openCreateModal = () => {\n this.setState({ createModalOpen: true })\n }\n\n navigateToPolicy = srn => {\n this.props.push({\n pathname: '/App/ControlCenter/Policy',\n search: qs.stringify({\n policyId: srn,\n }),\n })\n }\n\n handleCellClick = params => {\n if (params.column.colId === 'search') {\n this.navigateToSearch(params.data.searchSrn)\n } else {\n this.navigateToPolicy(params.data.policySrn)\n }\n }\n\n navigateToSearch = srn => {\n this.props.push({\n pathname: '/App/Search',\n search: qs.stringify({\n searchId: srn,\n view: SEARCH_VIEWS.BUILD,\n }),\n })\n }\n\n formatPolicies = () =>\n this.props.policies\n .toList()\n .map(policy => {\n const createdByUser = this.props.sonraiUsers\n .get(policy.get('createdBy'), Map())\n .toJS()\n return {\n title: policy.get('title'),\n alertingLevel: policy.get('alertingLevelNumeric'),\n description: policy.get('description'),\n search: policy.getIn(['contains', 'items', 0, 'name'], '-'),\n policySrn: policy.get('srn'),\n searchSrn: policy.getIn(['contains', 'items', 0, 'srn'], null),\n controlFrameworks: policy.getIn(\n ['containedByControlFramework', 'items'],\n List()\n ).size,\n createdBy: policy.get('createdBy'),\n createdByUser: createdByUser,\n }\n })\n .toJS()\n\n handleSelectionChange = evnt => {\n const rows = evnt.api.getSelectedRows() || []\n this.setState({ checkboxSelectedRows: rows })\n }\n\n handleBulkDeletePolicies = () => {\n const policies = this.state.checkboxSelectedRows.map(item => item.policySrn)\n this.setState({\n checkboxSelectedRows: [],\n })\n this.props.bulkDeletePolicies(policies)\n }\n\n render() {\n const tableData = this.formatPolicies()\n\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.controlframeworks',\n resourceId: ({ org }) => `/org/${org}/`,\n })\n\n return (\n
\n
\n \n \n \n All Control Frameworks\n \n \n All Policies\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n \n {this.state.checkboxSelectedRows.length === 1\n ? 'Delete Policy'\n : 'Delete Policies'}\n ,\n ]}\n customColumnConfig={{\n title: {\n minWidth: 300,\n width: 300,\n },\n policySrn: {\n hide: true,\n },\n searchSrn: {\n hide: true,\n },\n description: {\n flex: 1,\n },\n createdByUser: {\n hide: true,\n },\n createdBy: {\n minWidth: 200,\n width: 200,\n valueGetter: params => {\n if (!params.data) {\n return ''\n }\n\n return params.data.createdByUser.name || 'Sonrai'\n },\n cellRendererFramework: ({ data }) => {\n if (!data) {\n return null\n }\n return \n },\n },\n }}\n />\n \n \n
\n )\n }\n}\n\nPolicyList.propTypes = {\n policies: ImmutablePropTypes.map,\n sonraiUsers: ImmutablePropTypes.map.isRequired,\n theme: themeShape,\n savedSearches: ImmutablePropTypes.map,\n createPolicy: PropTypes.func,\n push: PropTypes.func,\n sonraiSearches: ImmutablePropTypes.list,\n creating: PropTypes.bool,\n userHasPermission: PropTypes.func.isRequired,\n bulkDeletePolicies: PropTypes.func.isRequired,\n bulkEditing: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n sonraiUsers: selectSonraiUsers,\n policies: selectPolicies,\n sonraiSearches: selectSonraiSearches,\n savedSearches: selectSavedSearches,\n creating: selectCreatingPolicy,\n bulkEditing: selectBulkEditing,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n createPolicy,\n push,\n bulkDeletePolicies,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(themeable, withConnect)(permissionChecker(PolicyList))\n","/**\n *\n * ControlCenter\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\n\nimport injectSaga from 'utils/injectSaga'\nimport injectReducer from 'utils/injectReducer'\nimport LoadingAnim from 'components/LoadingAnim'\nimport {\n selectLoadedPolicies,\n selectLoadedControlGroups,\n} from 'containers/ControlFrameworkData/selectors'\nimport { selectSonraiUsersLoading } from 'containers/SonraiData/selectors'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport ControlFrameworksManager from './ControlFrameworksManager'\nimport PolicyList from './PolicyList'\n\nexport class ControlCenter extends React.Component {\n render() {\n if (\n !this.props.loadedPolicies ||\n !this.props.loadedControlGroups ||\n this.props.sonraiUsersLoading\n ) {\n return \n }\n if (this.props.location.pathname === '/App/ControlCenter/ListPolicy') {\n return \n }\n return (\n
\n \n
\n )\n }\n}\n\nControlCenter.propTypes = {\n loadedPolicies: PropTypes.bool,\n loadedControlGroups: PropTypes.bool,\n location: PropTypes.object,\n sonraiUsersLoading: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n loadedControlGroups: selectLoadedControlGroups,\n loadedPolicies: selectLoadedPolicies,\n sonraiUsersLoading: selectSonraiUsersLoading,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nconst withReducer = injectReducer({ key: 'controlCenter', reducer })\n\nconst withSaga = injectSaga({\n key: 'controlCenter',\n saga: sagas,\n})\n\nexport default compose(withReducer, withConnect, withSaga)(ControlCenter)\n"],"sourceRoot":""}