{"version":3,"sources":["webpack:///./app/containers/PermissionChecker/RedirectWithoutPermission.js","webpack:///./node_modules/reactstrap/es/FormGroup.js","webpack:///./node_modules/reactstrap/es/FormFeedback.js","webpack:///./app/containers/Deploy/styles.css?fdee","webpack:///./app/containers/Deploy/styles.css","webpack:///./app/containers/NotificationManager/constants.js","webpack:///./app/containers/NotificationManager/actions.js","webpack:///./app/containers/NotificationManager/sagas.js","webpack:///./app/containers/NotificationManager/reducer.js","webpack:///./app/containers/NotificationManager/selectors.js","webpack:///./app/containers/NotificationManager/index.js","webpack:///./app/components/Notification/messages.js","webpack:///./app/components/Notification/NotificationTimestamp.js","webpack:///./app/components/Notification/DiscoveryNotification.js","webpack:///./app/components/Notification/styles.js","webpack:///./app/components/Notification/DiscoveryIcon.js","webpack:///./app/components/Notification/FailedPolicyNotification.js","webpack:///./app/components/Notification/CriticalAlertIcon.js","webpack:///./app/components/Notification/index.js","webpack:///./app/components/NotificationList/messages.js","webpack:///./app/components/NotificationList/index.js","webpack:///./app/containers/GlobalNotifications/index.js","webpack:///./app/containers/DeployManager/selectors.js","webpack:///./app/containers/DeployManager/constants.js","webpack:///./app/containers/DeployManager/actions.js","webpack:///./app/containers/DeployManager/reducer.js","webpack:///./app/containers/DeployManager/sagas.js","webpack:///./app/containers/DeployManager/index.js","webpack:///./app/containers/Deploy/reducer.js","webpack:///./app/containers/Deploy/constants.js","webpack:///./app/containers/Deploy/messages.js","webpack:///./app/containers/Deploy/selectors.js","webpack:///./app/containers/Deploy/actions.js","webpack:///./app/containers/Deploy/ConfSection.js","webpack:///./app/containers/Deploy/IntegrationBadge.js","webpack:///./node_modules/reactstrap/es/FormText.js","webpack:///./app/components/HideShow/index.js","webpack:///./app/containers/Deploy/VaultIntegrationForm.js","webpack:///./app/containers/Deploy/VaultIntegrationPropertiesModal.js","webpack:///./app/containers/Deploy/Integrations.js","webpack:///./app/containers/Deploy/ConfigureAws.js","webpack:///./app/containers/Deploy/InstructionStep.js","webpack:///./app/containers/Deploy/ConfigureAzure.js","webpack:///./app/containers/Deploy/ConfigureGcp.js","webpack:///./app/containers/Deploy/DeleteCollectorAction.js","webpack:///./app/containers/Deploy/ConfigureCollectorActions.js","webpack:///./app/containers/Deploy/ConfigureCollector.js","webpack:///./app/containers/Deploy/CollectorStatus.js","webpack:///./app/containers/Deploy/index.js"],"names":["RedirectWithoutPermission","props","permissions","get","multiPermissions","hasAny","forEach","permission","userHasPermission","permissionName","resourceId","swimlanes","push","to","this","redirectWithoutPermission","Component","defaultProps","withConnect","connect","dispatch","bindActionCreators","compose","permissionChecker","propTypes","children","node","row","bool","check","inline","disabled","tag","className","string","cssModule","object","FormGroup","Tag","attributes","classes","createElement","valid","tooltip","undefined","FormFeedback","validMode","content","module","i","options","transform","locals","exports","START_NOTIFICATION_POLL","STOP_NOTIFICATION_POLL","SET_NOTIFICATIONS_VIEWED_TIME","startNotificationPoll","createAction","stopNotificationPoll","setNotifications","setLastFetchTime","setNotificationsViewedTime","getNotifications","runNotificationFetcher","mySaga","client","getClient","query","forceFetch","fetchPolicy","gql","FETCH_NOTIFICATIONS_QUERY","results","data","Notifications","items","Error","immutableResults","fromJS","map","notification","update","msgData","JSON","parse","createdDate","Date","put","now","console","error","action","localStorage","setItem","payload","call","delay","POLL_FREQUENCY","takeLatest","take","race","notificationsViewedTime","getItem","initialState","notifications","lastFetchTime","parseInt","notificationManagerReducer","handleActions","state","set","selectNotificationManagerDomain","Map","selectNotifications","createSelector","List","filter","selectNotificationsViewedTime","selectNotificationsWithViewed","notificationsLastViewedTime","withSaga","injectSaga","key","saga","sagas","withReducer","injectReducer","reducer","mapStateToProps","createStructuredSelector","WrappedComponent","comp","initialTokenLoad","useAuth0","useEffect","then","displayName","getDisplayName","defineMessages","id","defaultMessage","new","styles","timestampLabel","color","fontSize","NotificationTimestamp","style","moment","timestamp","fromNow","React","PureComponent","DiscoveryNotification","count","getIn","type","DynamicFormattedMessage","messages","values","pluralize","actionButton","backgroundColor","border","display","justifyContent","marginTop","padding","label","paddingLeft","borderedNotification","borderBottom","width","dismissButton","justifySelf","alignSelf","iconWrapper","alignItems","height","position","newBadge","top","left","notificationBody","flexGrow","iconStyle","opacity","DiscoveryIcon","theme","icon","DISCOVERY_TYPES","USER","ACCOUNT","ROLE","chartColors","NETWORK","ACTION","ACTION_TYPE","REGION","POLICY","POLICY_VERSION","POLICY_ENTRY","PERMISSION","PERMISSION_LIST","DATA_OBJECT","DATA_CONTAINER","IconLayer","Icon","fa","name","FailedPolicyNotification","title","CriticalAlertIcon","fail","Notification","notificationId","removeNotification","timestampNode","notificationIcon","renderIcon","Badge","renderNotification","ImmutablePureComponent","ImmutablePropTypes","contains","isNew","PropTypes","msg","isRequired","date","themeShape","none","container","maxWidth","overflow","buttonWrapper","emptyNotifications","fontWeight","NotificationList","newNotifications","Popover","margin","right","isEmpty","IconCount","emphasis","text","size","index","listOf","message","onToggle","func","themeable","GlobalNotifications","notificationManager","selectDeployDomain","selectError","selectDataSources","selectCreatingAccount","selectDeployingRoles","selectDeployingCollector","selectAddingAccount","selectFetchingAzureClusterConfig","selectFetchingGcpClusterConfig","selectAzureClusterConfs","selectAwsClusterConfs","selectGcpClusterConfs","selectDeletingCloudAccountIds","selectLoading","selectCreatingIntegration","selectEditingCloudAccount","INTEGRATION_TYPES","VAULT","SET_DATA_SOURCES","CREATE_PLATFORM_ACCOUNT","DEPLOY_ROLES","DEPLOY_COLLECTOR","ADD_ACCOUNT","FETCH_PLATFORM_ACCOUNTS","FETCH_AZURE_CLUSTER_CONF","CHECK_AWS_ROLES","DELETE_PLATFORM_CLOUD_ACCOUNT","FETCH_GCP_CLUSTER_CONF","CREATE_VAULT_INTEGRATION","CHECK_AWS_BOT_ROLE","UPDATE_PLATFORM_CLOUD_ACCOUNT","deployError","setDataSources","createPlatformAccount","createPlatformAccountSuccess","deployRoles","deployRolesSuccess","deployCollector","deployCollectorSuccess","clearError","addAccount","addAccountSuccess","fetchPlatformAccounts","fetchAzureClusterConf","fetchGcpClusterConf","setAzureClusterConf","setGcpClusterConf","checkAwsRoles","checkAwsBotRole","setAwsClusterConf","deletePlatformCloudAccount","deletePlatformCloudAccountSuccess","createVaultIntegration","createIntegrationSuccess","updatePlatformCloudAccount","updatePlatformCloudAccountSuccess","addingAccount","editingAccount","dataSources","creatingAccount","deployingRoles","deployingCollector","azureClusterConfs","gcpClusterConfs","fetchingAzureClusterConf","fetchingGcpClusterConf","awsClusterConfs","fetchingAwsClusterConf","deletingCloudAccountIds","loading","creatingIntegration","deployReducer","findIndex","ds","srn","updateIn","cloudAccounts","cloudAccount","cloudAccountId","delete","platformAccountId","cloudAccountIndex","ca","setIn","accountId","scriptUrl","config","editAccount","fetchAwsClusterConf","FETCH_PLATFORM_ACCOUNTS_QUERY","dataSourceResults","PlatformAccounts","mutate","mutation","variables","accountName","cloudType","addAccountResult","CreatePlatformaccount","toLowerCase","PLATFORM_ACCOUNT_TYPES","AWS","win","window","open","loadingUrl","location","origin","href","focus","clusterConf","deployUrl","roleTemplateUrl","context","headers","deployResults","LaunchStackAzureClusterConfig","LaunchStackGcpClusterConfig","clusterTemplateUrl","role","subscriptionId","tenantId","resourceType","delegate","botRole","account","containedByAccount","add","blob","accountNumber","roleArn","runDateTime","botRoleArn","AZURE","GCP","CreatePlatformcloudaccount","setHasCollectors","UpdatePlatformcloudaccount","select","confs","conf","checkRoleUrl","customerRoleUrl","customerBotRoleUrl","configResults","LaunchStackAwsClusterConfig","vaultId","vaultUri","vaultServerCert","vaultAuthPath","vaultAuthRole","vaultClientCert","vaultClientKey","vaultAuditContainer","vaultAuditContainerPrefix","applicationIdURI","integration","all","mode","DAEMON","currentPlatformAccountId","cancel","confirm","dataSourcesTitle","deleteCollector","deletingCollector","deleteCollectorConfirmMessage","deleteCollectorError","readOnly","tooManyCloudAccountsToDelete","vault","awsAccountInfo","awsArnInfo","awsBotInfo","selectConfigDomain","selectCurrentPlatformAccountId","selectCurrentPlatformAccount","find","source","selectCurrentSubAccounts","platformAccount","selectCurrentIntegrations","setCurrentPlatformAccount","ConfSection","SectionHeader","small","BorderedCard","IntegrationBadge","png","HideShow","setState","oldState","expand","expanded","expandButton","whiteSpace","TextLink","onClick","toggleExpand","IconDivider","hideLabel","showLabel","FormLabel","required","for","VaultIntegrationForm","value","invalid","e","newId","target","test","address","startsWith","cert","val","formGroupingTitle","formGroup","Input","onChange","setVaultId","placeholder","setVaultUri","setVaultServerCert","setVaultAuthRole","setApplicationIdURI","setVaultAuthPath","setVaultClientCert","setVaultClientKey","setVaultAuditContainer","setVaultAuditContainerPrefix","addIntegrationButtonWrapper","gridArea","neutralDark","textTransform","isDisabled","vaultConfigurationIsInvalid","renderSetup","renderAuth","renderLogSource","Button","addVaultIntegration","onCancel","marginLeft","currentIntegrations","list","VaultIntegrationPropertiesModal","propName","exists","empty","fontStyle","Color","light","darken","fontFamily","maxHeight","Modal","isOpen","toggle","ModalHeader","ModalBody","getValue","ModalFooter","spin","Integrations","integrationType","showForm","viewingIntegrationConfig","integrationId","option","currentState","addIntegrationForm","gridTemplateColumns","gridTemplateRows","gridColumnGap","gridRowGap","marginBottom","gridTemplateAreas","tableTitle","oldProps","toggleViewingIntegrationConfig","Table","item","setViewingIntegrationConfig","BorderlessButton","deleteIntegration","cancelAdd","getTypeOptions","setIntegrationType","setIntegrationName","Label","ConfigureAws","didRoleDeploy","creatingNew","cloudRole","editingCloudAccount","showAccountModal","trim","toList","swimlane","GLOBAL_SWIMLANE_NAME","toJS","getSwimlaneOptions","swimlaneModal","minWidth","addCloudAccount","SelectBar","params","selectedSwimlane","handleAddToSwimlane","accounts","updateSwimlane","CenterContent","Expandable","subList","length","substring","includes","accountInvalidMessage","currentSubAccounts","sub","_","closeAddAccountModal","IHelp","info","infoMsg","iconSize","setCloudAccountId","accountIsValid","setCloudRole","arnIsValid","setBotRole","botArnIsValid","updateCloudAccount","canEdit","WithPermission","showAddAccountModal","renderSubAccountModal","renderAddToSwimlaneModal","WithoutPermission","DataTable","addedOn","edit","customColumnConfig","hide","cellStyle","aggFunc","pinned","headerName","enableRowGroup","menuTabs","suppressMenu","cellRendererFramework","showEditAccountModal","deleteSubAccount","addAccountForm","labelInfo","addAccountButtonWrapper","listStyleType","listStylePosition","numberOfAccounts","renderDeploy","renderCheckAwsRoles","renderSubAccounts","InstructionStep","contentRef","current","document","execCommand","copied","timeout","setTimeout","createRef","clearTimeout","step","codeblock","overflowX","resize","wrapper","labelWrapper","number","secondary","borderRadius","copyButton","codeWrapper","copiedNotice","neutralMedium","ref","innerRef","buttonRef","outline","copyToClipboard","ConfigureAzure","templateUrl","setTenantId","setSubscriptionId","isSubscriptionInvalid","org","renderAzureDeploy","renderAzureSubAccounts","ConfigureGcp","gsuite","indexOf","substr","errors","charAt","toUpperCase","resourceIdIsValid","errorCount","resourceTypeArea","resourceOptions","changeType","getResourceStep","resourceIdArea","getResourceIdLabel","setResourceId","renderGcpDeploy","DELETE_COLLECTOR","BarLoadingAnimation","DeleteCollectorAction","queryState","canPerformAction","warn","getMessages","close","Dropdown","borderless","ConfigureCollectorActions","useState","deleteModalOpen","setDeleteModalOpen","actions","DeleteActionDropdownItem","setModalOpen","bind","ConfigureCollector","inputName","isOld","isBefore","subtract","CloudBadge","cloudIcon","pathname","search","qs","stringify","preloadSearch","newTab","propLabel","SUPPORT_EMAIL","format","isCreated","cloudTypes","setCloudType","cloudTypeButton","blur","nameLabel","nameInput","setName","success","createAccount","deleteModalItem","closeDeleteAccountModal","marginRight","paddingBottom","orderedSubAccounts","sortBy","unix","renderNew","renderEdit","openDeleteAccountModal","modalRef","CloudAccount","selectSwimlanes","collector","minHeight","launchContainer","header","sourceList","cloudBadge","borderTop","EmptySection","Deploy","Alert","dataSource","Hoverable","hoverStyle","highlight","selectPlatformAccount","currentPlatformAccount","loadingPlatformAccounts","renderDataSource","createNew","renderDeployError","renderSourceList","selectLoadingPlatformAccounts","deployManager"],"mappings":"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","file":"27.0be3048719edd9a13d2e.chunk.js","sourcesContent":["import { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { compose, bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport permissionChecker from './index'\n\nexport class RedirectWithoutPermission extends Component {\n componentDidMount() {\n this.redirectWithoutPermission()\n }\n\n componentDidUpdate() {\n this.redirectWithoutPermission()\n }\n\n redirectWithoutPermission = () => {\n if (!this.props.permissions.get('loading')) {\n if (this.props.multiPermissions) {\n let hasAny = false\n this.props.multiPermissions.forEach(permission => {\n if (\n this.props.userHasPermission({\n permissionName: permission.permissionName,\n resourceId: permission.resourceId,\n swimlanes: permission.swimlanes,\n })\n ) {\n hasAny = true\n }\n })\n if (!hasAny) {\n this.props.push(this.props.to)\n }\n } else {\n const hasPermission = this.props.userHasPermission({\n permissionName: this.props.permissionName,\n resourceId: this.props.resourceId,\n swimlanes: this.props.swimlanes,\n })\n if (!hasPermission) {\n this.props.push(this.props.to)\n }\n }\n }\n }\n\n render() {\n return null\n }\n}\n\nRedirectWithoutPermission.defaultProps = {\n to: '/App/SolutionCenter',\n}\n\nRedirectWithoutPermission.propTypes = {\n permissions: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n }).isRequired,\n permissionName: PropTypes.string,\n resourceId: PropTypes.string,\n swimlanes: PropTypes.arrayOf(PropTypes.string),\n\n // if you have multiple permissions, passs it this bad boy\n multiPermissions: PropTypes.arrayOf(\n PropTypes.shape({\n permissionName: PropTypes.string,\n resourceId: PropTypes.string,\n swimlanes: PropTypes.arrayOf(PropTypes.string),\n })\n ),\n // path to redirect to\n to: PropTypes.string,\n\n // userHasPermission populated from permissionChecker hoc\n userHasPermission: PropTypes.func.isRequired,\n\n // ~ bound action creator ~\n push: PropTypes.func.isRequired,\n}\n\nconst withConnect = connect(null, dispatch =>\n bindActionCreators({ push }, dispatch)\n)\n\nexport default compose(\n permissionChecker,\n withConnect\n)(RedirectWithoutPermission)\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n row: PropTypes.bool,\n check: PropTypes.bool,\n inline: PropTypes.bool,\n disabled: PropTypes.bool,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar defaultProps = {\n tag: 'div'\n};\n\nvar FormGroup = function FormGroup(props) {\n var className = props.className,\n cssModule = props.cssModule,\n row = props.row,\n disabled = props.disabled,\n check = props.check,\n inline = props.inline,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, [\"className\", \"cssModule\", \"row\", \"disabled\", \"check\", \"inline\", \"tag\"]);\n\n var classes = mapToCssModules(classNames(className, row ? 'row' : false, check ? 'form-check' : 'form-group', check && inline ? 'form-check-inline' : false, check && disabled ? 'disabled' : false), cssModule);\n\n if (Tag === 'fieldset') {\n attributes.disabled = disabled;\n }\n\n return React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nFormGroup.propTypes = propTypes;\nFormGroup.defaultProps = defaultProps;\nexport default FormGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n valid: PropTypes.bool,\n tooltip: PropTypes.bool\n};\nvar defaultProps = {\n tag: 'div',\n valid: undefined\n};\n\nvar FormFeedback = function FormFeedback(props) {\n var className = props.className,\n cssModule = props.cssModule,\n valid = props.valid,\n tooltip = props.tooltip,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, [\"className\", \"cssModule\", \"valid\", \"tooltip\", \"tag\"]);\n\n var validMode = tooltip ? 'tooltip' : 'feedback';\n var classes = mapToCssModules(classNames(className, valid ? \"valid-\" + validMode : \"invalid-\" + validMode), cssModule);\n return React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nFormFeedback.propTypes = propTypes;\nFormFeedback.defaultProps = defaultProps;\nexport default FormFeedback;","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".small-spinner .spinner2 {\\n margin: 0 auto;\\n}\", \"\"]);\n","/*\n *\n * NotificationManager constants\n *\n */\n\nexport const FETCH_NOTIFICATIONS = 'app/NotificationManager/FETCH_NOTIFICATIONS'\nexport const START_NOTIFICATION_POLL =\n 'app/NotificationManager/START_NOTIFICATION_POLL'\nexport const STOP_NOTIFICATION_POLL =\n 'app/NotificationManager/STOP_NOTIFICATION_POLL'\nexport const SET_NOTIFICATIONS = 'app/NotificationManager/SET_NOTIFICATIONS'\nexport const SET_LAST_FETCH_TIME = 'app/NotificationManager/SET_LAST_FETCH'\nexport const SET_NOTIFICATIONS_VIEWED_TIME =\n 'app/NotificationManager/SET_NOTIFICATIONS_VIEWED_TIME'\n","import { createAction } from 'redux-actions'\nimport {\n FETCH_NOTIFICATIONS,\n START_NOTIFICATION_POLL,\n STOP_NOTIFICATION_POLL,\n SET_NOTIFICATIONS,\n SET_LAST_FETCH_TIME,\n SET_NOTIFICATIONS_VIEWED_TIME,\n} from './constants'\n\nexport const fetchNotifications = createAction(FETCH_NOTIFICATIONS)\nexport const startNotificationPoll = createAction(START_NOTIFICATION_POLL)\nexport const stopNotificationPoll = createAction(STOP_NOTIFICATION_POLL)\nexport const setNotifications = createAction(SET_NOTIFICATIONS)\nexport const setLastFetchTime = createAction(SET_LAST_FETCH_TIME)\nexport const setNotificationsViewedTime = createAction(\n SET_NOTIFICATIONS_VIEWED_TIME\n)\n","import { put, takeLatest, call, take, race } from 'redux-saga/effects'\nimport { delay } from 'redux-saga'\nimport gql from 'graphql-tag'\nimport { fromJS } from 'immutable'\nimport { FETCH_NOTIFICATIONS_QUERY } from 'static-queries'\nimport { getClient } from 'apolloClient'\nimport { POLL_FREQUENCY } from 'appConstants'\n\nimport {\n START_NOTIFICATION_POLL,\n STOP_NOTIFICATION_POLL,\n SET_NOTIFICATIONS_VIEWED_TIME,\n} from './constants'\nimport { setNotifications, setLastFetchTime } from './actions'\n\nfunction* getNotifications() {\n try {\n const client = getClient(true)\n const results = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${FETCH_NOTIFICATIONS_QUERY}\n `,\n })\n\n if (results.data.Notifications.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const immutableResults = fromJS(results.data.Notifications.items).map(\n notification =>\n notification\n .update('msgData', msgData => fromJS(JSON.parse(msgData)))\n .update('createdDate', createdDate => new Date(createdDate))\n )\n\n yield put(setNotifications(immutableResults))\n yield put(setLastFetchTime(Date.now()))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error fetching notifications', e)\n }\n}\n\nfunction* setNotificationsViewedTime(action) {\n localStorage.setItem('notificationsViewedTime', action.payload)\n yield\n}\n\nfunction* runNotificationFetcher() {\n while (true) {\n yield call(getNotifications)\n yield call(delay, POLL_FREQUENCY)\n }\n}\n\nfunction* mySaga() {\n yield takeLatest(SET_NOTIFICATIONS_VIEWED_TIME, setNotificationsViewedTime)\n while (true) {\n yield take(START_NOTIFICATION_POLL)\n yield race([call(runNotificationFetcher), take(STOP_NOTIFICATION_POLL)])\n }\n}\n\nexport default mySaga\n","/*\n *\n * NotificationManager reducer\n *\n */\n\nimport { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\nimport {\n SET_NOTIFICATIONS,\n SET_LAST_FETCH_TIME,\n SET_NOTIFICATIONS_VIEWED_TIME,\n} from './constants'\n\nconst notificationsViewedTime = localStorage.getItem('notificationsViewedTime')\nconst initialState = fromJS({\n notifications: [],\n lastFetchTime: null,\n notificationsViewedTime: notificationsViewedTime\n ? parseInt(notificationsViewedTime)\n : null,\n})\n\nconst notificationManagerReducer = handleActions(\n {\n [SET_NOTIFICATIONS]: (state, { payload }) =>\n state.set('notifications', payload),\n [SET_LAST_FETCH_TIME]: (state, { payload }) =>\n state.set('lastFetchTime', payload),\n [SET_NOTIFICATIONS_VIEWED_TIME]: (state, { payload }) =>\n state.set('notificationsViewedTime', payload),\n },\n initialState\n)\n\nexport default notificationManagerReducer\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\nconst selectNotificationManagerDomain = state =>\n state.get('notificationManager', Map())\n\nexport const selectNotifications = createSelector(\n selectNotificationManagerDomain,\n state =>\n (state.get('notifications') || List()).filter(\n notification => notification.get('msg') !== null\n )\n)\n\nexport const selectLastFetchTime = createSelector(\n selectNotificationManagerDomain,\n state => state.get('lastFetchTime')\n)\n\nexport const selectNotificationsViewedTime = createSelector(\n selectNotificationManagerDomain,\n state => state.get('notificationsViewedTime')\n)\n\nexport const selectNotificationsWithViewed = createSelector(\n [selectNotifications, selectNotificationsViewedTime],\n (notifications, notificationsLastViewedTime) =>\n notifications.map(notification =>\n notification.set(\n 'isNew',\n !notificationsLastViewedTime ||\n notification.get('createdDate') > notificationsLastViewedTime\n )\n )\n)\n","/**\n *\n * NotificationManager\n *\n */\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { useAuth0 } from 'react-auth0-wrapper'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { compose, bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\n\nimport { getDisplayName } from 'utils/hocHelpers'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport sagas from './sagas'\nimport notificationManagerReducer from './reducer'\n\nimport {\n startNotificationPoll,\n stopNotificationPoll,\n setNotificationsViewedTime,\n} from './actions'\nimport { selectNotificationsWithViewed } from './selectors'\n\nconst notificationManager = WrappedComponent => {\n const comp = props => {\n const { initialTokenLoad } = useAuth0()\n useEffect(() => {\n initialTokenLoad.then(() => {\n props.startNotificationPoll()\n })\n\n return () => {\n props.stopNotificationPoll()\n }\n }, [])\n\n return (\n \n )\n }\n\n comp.displayName = `NotificationManager(${getDisplayName(WrappedComponent)})`\n comp.propTypes = {\n setNotificationsViewedTime: PropTypes.func.isRequired,\n startNotificationPoll: PropTypes.func.isRequired,\n stopNotificationPoll: PropTypes.func.isRequired,\n notifications: ImmutablePropTypes.list,\n }\n return comp\n}\n\nconst withSaga = injectSaga({ key: 'notificationManager', saga: sagas })\nconst withReducer = injectReducer({\n key: 'notificationManager',\n reducer: notificationManagerReducer,\n})\n\nconst mapStateToProps = createStructuredSelector({\n notifications: selectNotificationsWithViewed,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n startNotificationPoll,\n stopNotificationPoll,\n setNotificationsViewedTime,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withSaga,\n withConnect,\n withReducer,\n notificationManager\n)\n","/*\n * Notification Messages\n *\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n 'app.core.notification.newData': {\n id: 'app.core.notification.newData',\n defaultMessage: '{count} {type} discovered',\n },\n new: {\n id: 'app.core.notification.new',\n defaultMessage: 'NEW',\n },\n 'app.core.notification.failedPolicyEval': {\n id: 'app.core.notification.failedPolicyEval',\n defaultMessage: 'Policy {title} failed to evaluate',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\n\nconst styles = {\n timestampLabel: {\n color: '#aaaaaa',\n fontSize: '0.8em',\n },\n}\n\nclass NotificationTimestamp extends React.PureComponent {\n render() {\n return (\n
\n {moment(this.props.timestamp).fromNow()}\n
\n )\n }\n}\n\nNotificationTimestamp.propTypes = {\n timestamp: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.instanceOf(Date),\n ]),\n}\n\nexport default NotificationTimestamp\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport messages from './messages'\nimport { pluralize } from 'utils/sonraiUtils'\n\nclass DiscoveryNotification extends React.PureComponent {\n render() {\n const count = this.props.notification.getIn(['msgData', 'count']) || ''\n const type = this.props.notification.getIn(['msgData', 'type']) || ''\n\n return (\n
\n \n {this.props.timestamp}\n
\n )\n }\n}\n\nDiscoveryNotification.propTypes = {\n notification: ImmutablePropTypes.contains({\n msgKey: PropTypes.string,\n msg: PropTypes.string,\n msgData: ImmutablePropTypes.map,\n }),\n timestamp: PropTypes.node,\n}\n\nexport default DiscoveryNotification\n","export default {\n actionButton: {\n backgroundColor: '#f5f5f5',\n border: '1px solid #dddddd',\n display: 'flex',\n justifyContent: 'center',\n marginTop: '0.5em',\n padding: '0.3em 0',\n label: {\n paddingLeft: '0.3em',\n },\n },\n borderedNotification: {\n borderBottom: '1px solid #eeeeee',\n display: 'flex',\n padding: '0.5em 0',\n width: '100%',\n },\n dismissButton: {\n justifySelf: 'end',\n alignSelf: 'start',\n },\n iconWrapper: {\n alignItems: 'center',\n display: 'flex',\n height: '40px',\n justifyContent: 'center',\n position: 'relative',\n width: '40px',\n },\n newBadge: {\n position: 'absolute',\n top: '-0.3em',\n left: '-0.3em',\n },\n notificationBody: {\n flexGrow: '1',\n padding: '0 0.5em',\n },\n iconStyle: {\n opacity: 0.6,\n },\n}\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport Icon from 'components/Icon'\nimport IconLayer from 'components/IconLayer'\nimport { themeShape } from 'containers/ThemeManager/Themeable'\nimport { DISCOVERY_TYPES } from 'appConstants'\n\nimport styles from './styles'\n\nconst DiscoveryIcon = ({ notification, theme }) => {\n let icon = 'box'\n let color = '#777777'\n let transform = 'shrink-5'\n\n switch (notification.getIn(['msgData', 'type'])) {\n case DISCOVERY_TYPES.USER:\n case DISCOVERY_TYPES.ACCOUNT:\n case DISCOVERY_TYPES.ROLE:\n color = theme.chartColors[0]\n icon = 'users'\n transform = transform + ' left-2'\n break\n case DISCOVERY_TYPES.NETWORK:\n color = theme.chartColors[1]\n icon = 'sitemap'\n break\n case DISCOVERY_TYPES.ACTION:\n case DISCOVERY_TYPES.ACTION_TYPE:\n color = theme.chartColors[2]\n icon = 'location-arrow'\n transform = 'shrink-3 left-1 down-1'\n break\n case DISCOVERY_TYPES.REGION:\n color = theme.chartColors[3]\n icon = 'globe'\n transform = 'shrink-3'\n break\n case DISCOVERY_TYPES.POLICY:\n case DISCOVERY_TYPES.POLICY_VERSION:\n case DISCOVERY_TYPES.POLICY_ENTRY:\n case DISCOVERY_TYPES.PERMISSION:\n case DISCOVERY_TYPES.PERMISSION_LIST:\n color = theme.chartColors[4]\n icon = 'lock'\n transform = 'shrink-3 right-1 up-1'\n break\n case DISCOVERY_TYPES.DATA_OBJECT:\n case DISCOVERY_TYPES.DATA_CONTAINER:\n color = theme.chartColors[5]\n icon = 'data'\n transform = 'shrink-3'\n break\n }\n\n return (\n \n \n \n \n )\n}\n\nDiscoveryIcon.propTypes = {\n notification: ImmutablePropTypes.map.isRequired,\n theme: themeShape,\n}\n\nexport default DiscoveryIcon\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { bindActionCreators } from 'redux'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport messages from './messages'\n\nclass FailedPolicyNotification extends React.PureComponent {\n render() {\n const title = this.props.notification.getIn(['msgData', 'title']) || ''\n\n return (\n
\n {title},\n }}\n />\n {this.props.timestamp}\n
\n )\n }\n}\n\nFailedPolicyNotification.propTypes = {\n notification: ImmutablePropTypes.contains({\n msgKey: PropTypes.string,\n msg: PropTypes.string,\n msgData: ImmutablePropTypes.map,\n }),\n push: PropTypes.func,\n timestamp: PropTypes.node,\n}\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n undefined,\n mapDispatchToProps\n)\n\nexport default withConnect(FailedPolicyNotification)\n","import React from 'react'\nimport Icon from 'components/Icon'\nimport { themeShape } from 'containers/ThemeManager/Themeable'\n\nconst CriticalAlertIcon = ({ theme }) => {\n return \n}\n\nCriticalAlertIcon.propTypes = {\n theme: themeShape,\n}\n\nexport default CriticalAlertIcon\n","/**\n *\n * Notification\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Badge } from 'reactstrap'\nimport { FormattedMessage } from 'react-intl'\n\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\nimport { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport messages from './messages'\nimport NotificationTimestamp from './NotificationTimestamp'\nimport DiscoveryNotification from './DiscoveryNotification'\nimport DiscoveryIcon from './DiscoveryIcon'\nimport FailedPolicyNotification from './FailedPolicyNotification'\nimport CriticalAlertIcon from './CriticalAlertIcon'\nimport styles from './styles'\n\n/* eslint react/display-name: 0 */\n\nclass Notification extends ImmutablePureComponent {\n removeNotification = notificationId => {\n this.props.removeNotification(notificationId)\n }\n\n renderNotification = () => {\n const timestampNode = (\n \n )\n\n if (\n this.props.notification.getIn(['msgData', 'subject']) === 'policyEngine'\n ) {\n return (\n \n )\n }\n\n return (\n \n )\n }\n\n renderIcon = () => {\n if (\n this.props.notification.getIn(['msgData', 'subject']) === 'policyEngine'\n ) {\n return \n }\n\n return (\n \n )\n }\n\n render() {\n return (\n
\n
\n
\n
{this.renderIcon()}
\n {this.props.notification.get('isNew') && (\n \n \n \n )}\n
\n
\n\n
{this.renderNotification()}
\n
\n )\n }\n}\n\nNotification.propTypes = {\n notification: ImmutablePropTypes.contains({\n isNew: PropTypes.bool,\n msg: PropTypes.string,\n msgData: ImmutablePropTypes.map.isRequired,\n createdDate: PropTypes.date,\n }).isRequired,\n theme: themeShape,\n}\n\nexport default Notification\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n none: {\n id: 'app.components.NotificationList.none',\n defaultMessage: 'You have no new notifications',\n },\n})\n","/**\n *\n * NotificationList\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { FormattedMessage } from 'react-intl'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\nimport Popover, { PopoverAnchor, PopoverBody } from 'components/Popover'\nimport Notification from 'components/Notification'\nimport Icon from 'components/Icon'\nimport IconCount from 'components/IconCount'\nimport IconLayer from 'components/IconLayer'\n\nimport messages from './messages'\n\nconst styles = {\n container: {\n backgroundColor: '#ffffff',\n width: '30vw',\n maxWidth: '500px',\n height: '80vh',\n overflow: 'auto',\n },\n buttonWrapper: {\n display: 'flex',\n height: '100%',\n alignItems: 'center',\n },\n emptyNotifications: {\n fontWeight: '300',\n color: '#666',\n },\n}\n\nclass NotificationList extends ImmutablePureComponent {\n render() {\n const newNotifications = this.props.notifications.filter(notification =>\n notification.get('isNew')\n )\n\n return (\n \n \n \n
\n \n \n {!newNotifications.isEmpty() && (\n \n )}\n \n
\n
\n \n \n {!this.props.notifications.isEmpty() ? (\n this.props.notifications.map((notification, index) => (\n \n ))\n ) : (\n
\n \n
\n )}\n \n
\n
\n \n )\n }\n}\n\nNotificationList.propTypes = {\n notifications: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n id: PropTypes.string,\n isNew: PropTypes.bool,\n message: PropTypes.string,\n type: PropTypes.string,\n timestamp: PropTypes.string,\n })\n ),\n onToggle: PropTypes.func,\n theme: themeShape,\n}\n\nexport default themeable(NotificationList)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { compose } from 'redux'\n\nimport notificationManager from 'containers/NotificationManager'\nimport NotificationList from 'components/NotificationList'\n\nexport class GlobalNotifications extends React.PureComponent {\n onToggle = () => {\n this.props.setNotificationsViewedTime(Date.now())\n }\n\n render() {\n return (\n \n )\n }\n}\n\nGlobalNotifications.propTypes = {\n notifications: ImmutablePropTypes.list.isRequired,\n setNotificationsViewedTime: PropTypes.func.isRequired,\n}\n\nexport default compose(notificationManager)(GlobalNotifications)\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\nconst selectDeployDomain = state => state.get('deploy', Map())\n\nexport const selectAzureConf = createSelector(\n selectDeployDomain,\n state => state.get('azureConfs', Map())\n)\n\nexport const selectError = createSelector(\n selectDeployDomain,\n state => state.get('error')\n)\n\nexport const selectDataSources = createSelector(\n selectDeployDomain,\n state => state.get('dataSources', List())\n)\n\nexport const selectCreatingAccount = createSelector(\n selectDeployDomain,\n state => state.get('creatingAccount')\n)\n\nexport const selectDeployingRoles = createSelector(\n selectDeployDomain,\n state => state.get('deployingRoles')\n)\n\nexport const selectDeployingCollector = createSelector(\n selectDeployDomain,\n state => state.get('deployingCollector')\n)\n\nexport const selectAddingAccount = createSelector(\n selectDeployDomain,\n state => state.get('addingAccount')\n)\n\nexport const selectFetchingAzureClusterConfig = createSelector(\n selectDeployDomain,\n state => state.get('fetchingAzureClusterConf')\n)\n\nexport const selectFetchingGcpClusterConfig = createSelector(\n selectDeployDomain,\n state => state.get('fetchingGcpClusterConf')\n)\n\nexport const selectAzureClusterConfs = createSelector(\n selectDeployDomain,\n state => state.get('azureClusterConfs')\n)\n\nexport const selectAwsClusterConfs = createSelector(\n selectDeployDomain,\n state => state.get('awsClusterConfs') || Map()\n)\n\nexport const selectGcpClusterConfs = createSelector(\n selectDeployDomain,\n state => state.get('gcpClusterConfs') || Map()\n)\n\nexport const selectDeletingCloudAccountIds = createSelector(\n selectDeployDomain,\n state => state.get('deletingCloudAccountIds') || Map()\n)\n\nexport const selectLoading = createSelector(\n selectDeployDomain,\n state => state.get('loading')\n)\n\nexport const selectCreatingIntegration = createSelector(\n selectDeployDomain,\n state => state.get('creatingIntegration')\n)\n\nexport const selectEditingCloudAccount = createSelector(\n selectDeployDomain,\n state => state.get('editingCloudAccount')\n)\n","/*\n *\n * DeployManager constants\n *\n */\n\nexport const INTEGRATION_TYPES = {\n VAULT: 'vault',\n}\n\nexport const DEPLOY_ERROR = 'app/DeployManager/DEPLOY_ERROR'\nexport const SET_DATA_SOURCES = 'app/DeployManager/SET_DATA_SOURCES'\nexport const CREATE_PLATFORM_ACCOUNT =\n 'app/DeployManager/CREATE_PLATFORM_ACCOUNT'\nexport const CREATE_PLATFORM_ACCOUNT_SUCCESS =\n 'app/DeployManager/CREATE_PLATFORM_ACCOUNT_SUCCESS'\nexport const DEPLOY_ROLES = 'app/DeployManager/DEPLOY_ROLES'\nexport const DEPLOY_ROLES_SUCCESS = 'app/DeployManager/DEPLOY_ROLES_SUCCESS'\nexport const DEPLOY_COLLECTOR = 'app/DeployManager/DEPLOY_COLLECTOR'\nexport const DEPLOY_COLLECTOR_SUCCESS =\n 'app/DeployManager/DEPLOY_COLLECTOR_SUCCESS'\nexport const CLEAR_ERROR = 'app/DeployManager/CLEAR_ERROR'\nexport const ADD_ACCOUNT = 'app/DeployManager/ADD_ACCOUNT'\nexport const ADD_ACCOUNT_SUCCESS = 'app/DeployManager/ADD_ACCOUNT_SUCCESS'\nexport const FETCH_PLATFORM_ACCOUNTS =\n 'app/DeployManager/FETCH_PLATFORM_ACCOUNTS'\nexport const FETCH_AZURE_CLUSTER_CONF =\n 'app/DeployManager/FETCH_AZURE_CLUSTER_CONF'\nexport const SET_AZURE_CLUSTER_CONF = 'app/DeployManager/SET_AZURE_CLUSTER_CONF'\nexport const CHECK_AWS_ROLES = 'app/DeployManager/CHECK_AWS_ROLES'\nexport const FETCH_AWS_CLUSTER_CONF = 'app/DeployManager/FETCH_AWS_CLUSTER_CONF'\nexport const SET_AWS_CLUSTER_CONF = 'app/DeployManager/SET_AWS_CLUSTER_CONF'\nexport const DELETE_PLATFORM_CLOUD_ACCOUNT =\n 'app/DeployManager/DELETE_PLATFORM_CLOUD_ACCOUNT'\nexport const DELETE_PLATFORM_CLOUD_ACCOUNT_SUCCESS =\n 'app/DeployManager/DELETE_PLATFORM_CLOUD_ACCOUNT_SUCCESS'\nexport const SET_GCP_CLUSTER_CONF = 'app/DeployManager/SET_GCP_CLUSTER_CONF'\nexport const FETCH_GCP_CLUSTER_CONF = 'app/DeployManager/FETCH_GCP_CLUSTER_CONF'\nexport const CREATE_VAULT_INTEGRATION =\n 'app/DeployManager/CREATE_VAULT_INTEGRATION'\nexport const CREATE_INTEGRATION_SUCCESS =\n 'app/DeployManager/CREATE_INTEGRATION_SUCCESS'\nexport const CHECK_AWS_BOT_ROLE = 'app/DeployManager/CHECK_AWS_BOT_ROLE'\nexport const UPDATE_PLATFORM_CLOUD_ACCOUNT =\n 'app/DeployManager/UPDATE_PLATFORM_CLOUD_ACCOUNT'\nexport const UPDATE_PLATFORM_CLOUD_ACCOUNT_SUCCESS =\n 'app/DeployManager/UPDATE_PLATFORM_CLOUD_ACCOUNT_SUCCESS'\n","/*\n *\n * DeployManager actions\n *\n */\n\nimport {\n DEPLOY_ERROR,\n SET_DATA_SOURCES,\n CREATE_PLATFORM_ACCOUNT,\n CREATE_PLATFORM_ACCOUNT_SUCCESS,\n DEPLOY_ROLES,\n DEPLOY_ROLES_SUCCESS,\n DEPLOY_COLLECTOR,\n DEPLOY_COLLECTOR_SUCCESS,\n CLEAR_ERROR,\n ADD_ACCOUNT,\n ADD_ACCOUNT_SUCCESS,\n FETCH_PLATFORM_ACCOUNTS,\n FETCH_AZURE_CLUSTER_CONF,\n SET_AZURE_CLUSTER_CONF,\n CHECK_AWS_ROLES,\n CHECK_AWS_BOT_ROLE,\n FETCH_AWS_CLUSTER_CONF,\n FETCH_GCP_CLUSTER_CONF,\n SET_GCP_CLUSTER_CONF,\n SET_AWS_CLUSTER_CONF,\n DELETE_PLATFORM_CLOUD_ACCOUNT,\n DELETE_PLATFORM_CLOUD_ACCOUNT_SUCCESS,\n CREATE_VAULT_INTEGRATION,\n CREATE_INTEGRATION_SUCCESS,\n UPDATE_PLATFORM_CLOUD_ACCOUNT,\n UPDATE_PLATFORM_CLOUD_ACCOUNT_SUCCESS,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const deployError = createAction(DEPLOY_ERROR)\nexport const setDataSources = createAction(SET_DATA_SOURCES)\nexport const createPlatformAccount = createAction(CREATE_PLATFORM_ACCOUNT)\nexport const createPlatformAccountSuccess = createAction(\n CREATE_PLATFORM_ACCOUNT_SUCCESS\n)\nexport const deployRoles = createAction(DEPLOY_ROLES)\nexport const deployRolesSuccess = createAction(DEPLOY_ROLES_SUCCESS)\nexport const deployCollector = createAction(DEPLOY_COLLECTOR)\nexport const deployCollectorSuccess = createAction(DEPLOY_COLLECTOR_SUCCESS)\nexport const clearError = createAction(CLEAR_ERROR)\nexport const addAccount = createAction(ADD_ACCOUNT)\nexport const addAccountSuccess = createAction(ADD_ACCOUNT_SUCCESS)\nexport const fetchPlatformAccounts = createAction(FETCH_PLATFORM_ACCOUNTS)\nexport const fetchAzureClusterConf = createAction(FETCH_AZURE_CLUSTER_CONF)\nexport const fetchGcpClusterConf = createAction(FETCH_GCP_CLUSTER_CONF)\nexport const setAzureClusterConf = createAction(SET_AZURE_CLUSTER_CONF)\nexport const setGcpClusterConf = createAction(SET_GCP_CLUSTER_CONF)\nexport const checkAwsRoles = createAction(CHECK_AWS_ROLES)\nexport const checkAwsBotRole = createAction(CHECK_AWS_BOT_ROLE)\nexport const fetchAwsClusterConf = createAction(FETCH_AWS_CLUSTER_CONF)\nexport const setAwsClusterConf = createAction(SET_AWS_CLUSTER_CONF)\nexport const deletePlatformCloudAccount = createAction(\n DELETE_PLATFORM_CLOUD_ACCOUNT\n)\nexport const deletePlatformCloudAccountSuccess = createAction(\n DELETE_PLATFORM_CLOUD_ACCOUNT_SUCCESS\n)\nexport const createVaultIntegration = createAction(CREATE_VAULT_INTEGRATION)\nexport const createIntegrationSuccess = createAction(CREATE_INTEGRATION_SUCCESS)\n\nexport const updatePlatformCloudAccount = createAction(\n UPDATE_PLATFORM_CLOUD_ACCOUNT\n)\nexport const updatePlatformCloudAccountSuccess = createAction(\n UPDATE_PLATFORM_CLOUD_ACCOUNT_SUCCESS\n)\n","/*\n *\n * DeployManager reducer\n *\n */\n\nimport { fromJS, List, Map } from 'immutable'\nimport {\n DEPLOY_ERROR,\n SET_DATA_SOURCES,\n CREATE_PLATFORM_ACCOUNT,\n CREATE_PLATFORM_ACCOUNT_SUCCESS,\n DEPLOY_ROLES,\n DEPLOY_ROLES_SUCCESS,\n DEPLOY_COLLECTOR,\n DEPLOY_COLLECTOR_SUCCESS,\n CLEAR_ERROR,\n ADD_ACCOUNT,\n ADD_ACCOUNT_SUCCESS,\n SET_AZURE_CLUSTER_CONF,\n FETCH_AZURE_CLUSTER_CONF,\n FETCH_AWS_CLUSTER_CONF,\n SET_AWS_CLUSTER_CONF,\n DELETE_PLATFORM_CLOUD_ACCOUNT,\n DELETE_PLATFORM_CLOUD_ACCOUNT_SUCCESS,\n FETCH_PLATFORM_ACCOUNTS,\n FETCH_GCP_CLUSTER_CONF,\n SET_GCP_CLUSTER_CONF,\n CREATE_VAULT_INTEGRATION,\n CREATE_INTEGRATION_SUCCESS,\n UPDATE_PLATFORM_CLOUD_ACCOUNT_SUCCESS,\n UPDATE_PLATFORM_CLOUD_ACCOUNT,\n} from './constants'\nimport { handleActions } from 'redux-actions'\n\nconst initialState = fromJS({\n addingAccount: false,\n editingAccount: false,\n error: null,\n dataSources: [],\n creatingAccount: false,\n deployingRoles: false,\n deployingCollector: false,\n azureClusterConfs: {},\n gcpClusterConfs: {},\n fetchingAzureClusterConf: false,\n fetchingGcpClusterConf: false,\n awsClusterConfs: {},\n fetchingAwsClusterConf: false,\n deletingCloudAccountIds: Map(),\n loading: true,\n creatingIntegration: false,\n})\n\nconst deployReducer = handleActions(\n {\n [ADD_ACCOUNT]: state => state.set('addingAccount', true),\n [ADD_ACCOUNT_SUCCESS]: (state, { payload }) =>\n state.set('addingAccount', false).update('dataSources', dataSources => {\n const index = dataSources.findIndex(ds => ds.get('srn') === payload.srn)\n return dataSources.updateIn(\n [index, 'containsCloudAccount', 'items'],\n (cloudAccounts = List()) =>\n cloudAccounts.push(fromJS(payload.cloudAccount))\n )\n }),\n [CLEAR_ERROR]: state =>\n state\n .set('error', null)\n .set('deployingRoles', false)\n .set('deployingCollector', false)\n .set('creatingAccount', false)\n .set('addingAccount', false)\n .set('fetchingAzureClusterConf', false)\n .set('fetchingAwsClusterRoleUrl', false)\n .set('deletingCloudAccountIds', Map()),\n [CREATE_PLATFORM_ACCOUNT]: state => state.set('creatingAccount', true),\n [CREATE_PLATFORM_ACCOUNT_SUCCESS]: (state, { payload }) =>\n state\n .update('dataSources', ds => ds.push(fromJS(payload)))\n .set('creatingAccount', false),\n [CREATE_VAULT_INTEGRATION]: state => state.set('creatingIntegration', true),\n [CREATE_INTEGRATION_SUCCESS]: state =>\n state.set('creatingIntegration', false),\n [DELETE_PLATFORM_CLOUD_ACCOUNT]: (state, { payload }) =>\n state.set(\n 'deletingCloudAccountIds',\n state.get('deletingCloudAccountIds').set(payload.cloudAccountId, true)\n ),\n [DELETE_PLATFORM_CLOUD_ACCOUNT_SUCCESS]: (state, { payload }) => {\n return state\n .set(\n 'deletingCloudAccountIds',\n state.get('deletingCloudAccountIds').delete(payload.cloudAccountId)\n )\n .update('dataSources', dataSources => {\n const index = dataSources.findIndex(\n ds => ds.get('srn') === payload.platformAccountId\n )\n\n return dataSources.updateIn(\n [index, 'containsCloudAccount', 'items'],\n (cloudAccounts = List()) => {\n const cloudAccountIndex = cloudAccounts.findIndex(\n ca => ca.get('srn') === payload.cloudAccountId\n )\n\n return cloudAccounts.delete(cloudAccountIndex)\n }\n )\n })\n },\n [DEPLOY_ERROR]: (state, { payload }) => state.set('error', payload),\n [FETCH_AWS_CLUSTER_CONF]: state =>\n state.set('fetchingAwsClusterConf', true),\n [FETCH_AZURE_CLUSTER_CONF]: state =>\n state.set('fetchingAzureClusterConf', true),\n [FETCH_GCP_CLUSTER_CONF]: state =>\n state.set('fetchingGcpClusterConf', true),\n [FETCH_PLATFORM_ACCOUNTS]: state => state.set('loading', true),\n [SET_AZURE_CLUSTER_CONF]: (state, { payload }) =>\n state\n .setIn(\n ['azureClusterConfs', payload.accountId],\n fromJS(payload.scriptUrl)\n )\n .set('fetchingAzureClusterConf', false),\n [SET_AWS_CLUSTER_CONF]: (state, { payload }) =>\n state\n .setIn(['awsClusterConfs', payload.accountId], fromJS(payload.config))\n .set('fetchingAwsClusterConf', false),\n [SET_GCP_CLUSTER_CONF]: (state, { payload }) =>\n state\n .setIn(\n ['gcpClusterConfs', payload.accountId],\n fromJS(payload.scriptUrl)\n )\n .set('fetchingGcpClusterConf', false),\n [SET_DATA_SOURCES]: (state, { payload }) =>\n state.set('dataSources', fromJS(payload)).set('loading', false),\n [DEPLOY_ROLES]: state => state.set('deployingRoles', true),\n [DEPLOY_ROLES_SUCCESS]: state => state.set('deployingRoles', false),\n [DEPLOY_COLLECTOR]: state => state.set('deployingCollector', true),\n [DEPLOY_COLLECTOR_SUCCESS]: state => state.set('deployingCollector', false),\n [UPDATE_PLATFORM_CLOUD_ACCOUNT]: state =>\n state.set('editingCloudAccount', true),\n [UPDATE_PLATFORM_CLOUD_ACCOUNT_SUCCESS]: (state, { payload }) => {\n return state\n .update('dataSources', dataSources => {\n const index = dataSources.findIndex(\n ds => ds.get('srn') === payload.platformAccountId\n )\n\n return dataSources.updateIn(\n [index, 'containsCloudAccount', 'items'],\n (cloudAccounts = List()) => {\n const cloudAccountIndex = cloudAccounts.findIndex(\n ca => ca.get('srn') === payload.cloudAccount.srn\n )\n\n return cloudAccounts.set(\n cloudAccountIndex,\n fromJS(payload.cloudAccount)\n )\n }\n )\n })\n .set('editingCloudAccount', false)\n },\n },\n initialState\n)\n\nexport default deployReducer\n","import { put, all, takeLatest, call, select } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport { PLATFORM_ACCOUNT_TYPES } from 'appConstants'\nimport { Map } from 'immutable'\nimport { FETCH_PLATFORM_ACCOUNTS_QUERY } from 'static-queries'\n\nimport { setHasCollectors } from 'containers/SonraiData/actions'\n\nimport {\n CREATE_PLATFORM_ACCOUNT,\n DEPLOY_ROLES,\n DEPLOY_COLLECTOR,\n ADD_ACCOUNT,\n FETCH_PLATFORM_ACCOUNTS,\n FETCH_AZURE_CLUSTER_CONF,\n FETCH_GCP_CLUSTER_CONF,\n CHECK_AWS_ROLES,\n CHECK_AWS_BOT_ROLE,\n DELETE_PLATFORM_CLOUD_ACCOUNT,\n INTEGRATION_TYPES,\n CREATE_VAULT_INTEGRATION,\n UPDATE_PLATFORM_CLOUD_ACCOUNT,\n} from './constants'\nimport {\n deployError,\n createPlatformAccountSuccess,\n setDataSources,\n deployRolesSuccess,\n deployCollectorSuccess,\n addAccountSuccess,\n setAzureClusterConf,\n setGcpClusterConf,\n setAwsClusterConf,\n deletePlatformCloudAccountSuccess,\n createIntegrationSuccess,\n updatePlatformCloudAccountSuccess,\n} from './actions'\nimport { getClient } from 'apolloClient'\nimport { selectAwsClusterConfs } from './selectors'\n\nexport function* fetchPlatformAccounts() {\n try {\n const client = getClient()\n const dataSourceResults = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${FETCH_PLATFORM_ACCOUNTS_QUERY}\n `,\n })\n\n const dataSources = dataSourceResults.data.PlatformAccounts.items\n\n if (dataSources === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setDataSources(dataSources))\n } catch (err) {\n const message = err.message || 'Error in fetchDataSources'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nexport function* createPlatformAccount(action) {\n try {\n const client = getClient()\n const addAccountResult = yield client.mutate({\n mutation: gql`\n mutation addPlatformAcct($accountName: String!, $cloudType: String!) {\n CreatePlatformaccount(\n value: { name: $accountName, cloudType: $cloudType }\n ) {\n srn\n sid\n name\n createdDate\n cloudType\n }\n }\n `,\n variables: {\n accountName: action.payload.accountName,\n cloudType: action.payload.cloudType,\n },\n })\n\n yield put(\n createPlatformAccountSuccess(addAccountResult.data.CreatePlatformaccount)\n )\n } catch (err) {\n const message = err.message || 'Error Creating Platform Account'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nexport function* deployRoles(payload) {\n try {\n let { accountId, type } = payload.payload\n\n if (type.toLowerCase() === PLATFORM_ACCOUNT_TYPES.AWS.toLowerCase()) {\n const win = window.open('', '_blank')\n const loadingUrl = `${window.location.origin}/Loading`\n win.location.href = loadingUrl\n win.focus()\n\n const clusterConf = yield call(fetchAwsClusterConf, accountId)\n if (!clusterConf) {\n yield put(\n deployError(\n 'Could not fetch the template url. The environment may not be configured correctly.'\n )\n )\n return\n }\n\n const deployUrl = clusterConf.roleTemplateUrl\n win.location.href = deployUrl\n\n yield put(deployRolesSuccess())\n }\n } catch (err) {\n const message = err.message || 'Error deploying roles'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nexport function* fetchAzureClusterConf(payload) {\n try {\n let { accountId } = payload.payload\n\n const client = getClient()\n\n const deployResults = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n context: {\n headers: {\n 'Cache-Control': 'no-cache',\n },\n },\n query: gql`\n query getAzureConfig {\n LaunchStackAzureClusterConfig (\n accountId: \"${accountId}\"\n ) {\n scriptUrl\n }\n }\n `,\n })\n\n const scriptUrl = deployResults.data.LaunchStackAzureClusterConfig.scriptUrl\n\n yield put(setAzureClusterConf({ accountId, scriptUrl }))\n } catch (err) {\n const message = err.message || 'Error getting azure cluster conf'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nexport function* fetchGcpClusterConf(action) {\n try {\n let { accountId } = action.payload\n const client = getClient()\n\n const deployResults = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n context: {\n headers: {\n 'Cache-Control': 'no-cache',\n },\n },\n query: gql`\n query getGcpConfig {\n LaunchStackGcpClusterConfig (\n accountId: \"${accountId}\"\n ) {\n scriptUrl\n }\n }\n `,\n })\n\n const scriptUrl = deployResults.data.LaunchStackGcpClusterConfig.scriptUrl\n\n yield put(setGcpClusterConf({ accountId, scriptUrl }))\n } catch (err) {\n const message = err.message || 'Error getting gcp cluster conf'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nexport function* deployCollector(payload) {\n try {\n let { accountId, type } = payload.payload\n\n if (type.toLowerCase() === PLATFORM_ACCOUNT_TYPES.AWS.toLowerCase()) {\n const win = window.open('', '_blank')\n const loadingUrl = `${window.location.origin}/Loading`\n win.location.href = loadingUrl\n win.focus()\n\n const clusterConf = yield call(fetchAwsClusterConf, accountId)\n const deployUrl = clusterConf.clusterTemplateUrl\n win.location.href = deployUrl\n\n yield put(deployCollectorSuccess())\n }\n } catch (err) {\n const message = err.message || 'Error deploying collector'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nexport function* addAccount(action) {\n try {\n let {\n accountId,\n platformAccountId,\n role,\n cloudType,\n subscriptionId,\n tenantId,\n resourceType,\n resourceId,\n delegate,\n botRole,\n } = action.payload\n\n const client = getClient()\n let results\n\n if (cloudType === PLATFORM_ACCOUNT_TYPES.AWS) {\n results = yield client.mutate({\n mutation: gql`\n mutation createSubAccount($account: PlatformcloudaccountCreator!) {\n CreatePlatformcloudaccount(value: $account) {\n srn\n blob\n cloudType\n name\n organizationId\n resourceId\n }\n }\n `,\n variables: {\n account: {\n containedByAccount: {\n add: platformAccountId,\n },\n cloudType: cloudType,\n blob: {\n accountNumber: accountId,\n roleArn: role,\n runDateTime: Date.now(),\n botRoleArn: botRole,\n },\n },\n },\n })\n } else if (cloudType === PLATFORM_ACCOUNT_TYPES.AZURE) {\n results = yield client.mutate({\n mutation: gql`\n mutation createSubAccount($account: PlatformcloudaccountCreator!) {\n CreatePlatformcloudaccount(value: $account) {\n srn\n blob\n cloudType\n name\n resourceId\n }\n }\n `,\n variables: {\n account: {\n containedByAccount: {\n add: platformAccountId,\n },\n cloudType: cloudType,\n blob: {\n subscriptionId: subscriptionId,\n tenantId: tenantId,\n runDateTime: Date.now(),\n },\n },\n },\n })\n } else if (cloudType === PLATFORM_ACCOUNT_TYPES.GCP) {\n results = yield client.mutate({\n mutation: gql`\n mutation createSubAccount($account: PlatformcloudaccountCreator!) {\n CreatePlatformcloudaccount(value: $account) {\n srn\n blob\n cloudType\n name\n resourceId\n }\n }\n `,\n variables: {\n account: {\n containedByAccount: {\n add: platformAccountId,\n },\n cloudType: cloudType,\n blob: {\n resourceType: resourceType,\n resourceId: resourceId,\n delegate: delegate,\n runDateTime: Date.now(),\n },\n },\n },\n })\n } else {\n throw new Error('Invalid cloudType')\n }\n\n yield put(\n addAccountSuccess({\n srn: platformAccountId,\n cloudAccount: results.data.CreatePlatformcloudaccount,\n })\n )\n\n yield put(setHasCollectors(true))\n } catch (err) {\n const message = err.message || 'Error adding a sub account'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nexport function* editAccount(action) {\n try {\n let { platformAccountId, srn, blob } = action.payload\n\n const client = getClient()\n let results\n\n results = yield client.mutate({\n mutation: gql`\n mutation createSubAccount(\n $srn: ID!\n $cloudAccount: PlatformcloudaccountUpdater!\n ) {\n UpdatePlatformcloudaccount(srn: $srn, value: $cloudAccount) {\n srn\n blob\n cloudType\n name\n organizationId\n resourceId\n }\n }\n `,\n variables: {\n srn: srn,\n cloudAccount: {\n blob: blob,\n },\n },\n })\n\n yield put(\n updatePlatformCloudAccountSuccess({\n platformAccountId: platformAccountId,\n cloudAccount: results.data.UpdatePlatformcloudaccount,\n })\n )\n\n yield put(setHasCollectors(true))\n } catch (err) {\n const message = err.message || 'Error adding a sub account'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nfunction* checkAwsRoles(action) {\n const accountId = action.payload\n const confs = yield select(selectAwsClusterConfs)\n const conf = confs.get(accountId, Map())\n\n const win = window.open('', '_blank')\n\n if (!conf.isEmpty()) {\n win.location.href = conf.get('customerRoleUrl')\n win.focus()\n } else {\n const loadingUrl = `${window.location.origin}/Loading`\n win.location.href = loadingUrl\n win.focus()\n\n const clusterConf = yield call(fetchAwsClusterConf, accountId)\n const checkRoleUrl = clusterConf.customerRoleUrl\n win.location.href = checkRoleUrl\n }\n}\n\nfunction* checkAwsBotRole(action) {\n const accountId = action.payload\n const confs = yield select(selectAwsClusterConfs)\n const conf = confs.get(accountId, Map())\n\n const win = window.open('', '_blank')\n\n if (!conf.isEmpty()) {\n win.location.href = conf.get('customerBotRoleUrl')\n win.focus()\n } else {\n const loadingUrl = `${window.location.origin}/Loading`\n win.location.href = loadingUrl\n win.focus()\n\n const clusterConf = yield call(fetchAwsClusterConf, accountId)\n const checkRoleUrl = clusterConf.customerBotRoleUrl\n win.location.href = checkRoleUrl\n }\n}\n\nfunction* fetchAwsClusterConf(accountId) {\n const client = getClient()\n\n try {\n const configResults = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n context: {\n headers: {\n 'Cache-Control': 'no-cache',\n },\n },\n query: gql`\n query getAwsClusterConfig {\n LaunchStackAwsClusterConfig (\n accountId: \"${accountId}\"\n ) {\n clusterTemplateUrl\n roleTemplateUrl\n customerRoleUrl\n customerBotRoleUrl\n bootstrapScriptUrl\n }\n }\n `,\n })\n\n const config = configResults.data.LaunchStackAwsClusterConfig\n\n yield put(\n setAwsClusterConf({\n accountId,\n config,\n })\n )\n\n return config\n } catch (err) {\n const message = err.message || 'Error fetching aws deploy config'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nfunction* deletePlatformCloudAccount(action) {\n const client = getClient()\n\n try {\n yield client.mutate({\n mutation: gql`\n mutation deletePlatformCloudAccount {\n DeletePlatformcloudaccount(srn: \"${action.payload.cloudAccountId}\")\n }\n `,\n })\n\n yield put(\n deletePlatformCloudAccountSuccess({\n cloudAccountId: action.payload.cloudAccountId,\n platformAccountId: action.payload.platformAccountId,\n })\n )\n } catch (err) {\n const message = err.message || 'Error deleting platform cloud account'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nexport function* createVaultIntegration(action) {\n try {\n const {\n name,\n platformAccountId,\n vaultId,\n vaultUri,\n vaultServerCert,\n vaultAuthPath,\n vaultAuthRole,\n vaultClientCert,\n vaultClientKey,\n vaultAuditContainer,\n vaultAuditContainerPrefix,\n applicationIdURI,\n } = action.payload\n\n const blob = {\n vaultId,\n vaultUri,\n vaultServerCert,\n vaultAuthPath,\n vaultAuthRole,\n vaultClientCert,\n vaultClientKey,\n vaultAuditContainer,\n vaultAuditContainerPrefix,\n applicationIdURI,\n }\n\n const client = getClient()\n const results = yield client.mutate({\n mutation: gql`\n mutation createVaultIntegration(\n $integration: PlatformcloudaccountCreator!\n ) {\n CreatePlatformcloudaccount(value: $integration) {\n srn\n blob\n cloudType\n name\n }\n }\n `,\n variables: {\n integration: {\n name,\n containedByAccount: {\n add: platformAccountId,\n },\n cloudType: INTEGRATION_TYPES.VAULT,\n blob: blob,\n },\n },\n })\n\n yield put(\n addAccountSuccess({\n srn: platformAccountId,\n cloudAccount: results.data.CreatePlatformcloudaccount,\n })\n )\n\n yield put(createIntegrationSuccess())\n } catch (err) {\n const message = err.message || 'Error adding an integration'\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(deployError(message))\n }\n}\n\nfunction* mySaga() {\n yield all([\n takeLatest(CREATE_PLATFORM_ACCOUNT, createPlatformAccount),\n takeLatest(DEPLOY_ROLES, deployRoles),\n takeLatest(DEPLOY_COLLECTOR, deployCollector),\n takeLatest(ADD_ACCOUNT, addAccount),\n takeLatest(FETCH_PLATFORM_ACCOUNTS, fetchPlatformAccounts),\n takeLatest(FETCH_AZURE_CLUSTER_CONF, fetchAzureClusterConf),\n takeLatest(FETCH_GCP_CLUSTER_CONF, fetchGcpClusterConf),\n takeLatest(CHECK_AWS_ROLES, checkAwsRoles),\n takeLatest(CHECK_AWS_BOT_ROLE, checkAwsBotRole),\n takeLatest(DELETE_PLATFORM_CLOUD_ACCOUNT, deletePlatformCloudAccount),\n takeLatest(CREATE_VAULT_INTEGRATION, createVaultIntegration),\n takeLatest(UPDATE_PLATFORM_CLOUD_ACCOUNT, editAccount),\n ])\n}\n\nexport default mySaga\n","/**\n *\n * DeployManager\n *\n */\n\nimport React from 'react'\nimport { compose } from 'redux'\n\nimport { DAEMON } from 'utils/constants'\nimport { getDisplayName } from 'utils/hocHelpers'\nimport deployReducer from './reducer'\nimport sagas from './sagas'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\n\nconst deployManager = WrappedComponent => {\n return class extends React.Component {\n displayName = `DeployManager(${getDisplayName(WrappedComponent)})`\n render() {\n return \n }\n }\n}\n\nconst withReducer = injectReducer({ key: 'deploy', reducer: deployReducer })\nconst withSaga = injectSaga({ key: 'deploy', saga: sagas, mode: DAEMON })\n\nexport default compose(\n withReducer,\n withSaga,\n deployManager\n)\n","import { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\n\nimport {\n CREATE_PLATFORM_ACCOUNT_SUCCESS,\n SET_DATA_SOURCES,\n} from 'containers/DeployManager/constants'\nimport { SET_CURRENT_PLATFORM_ACCOUNT } from './constants'\n\nconst initialState = fromJS({\n currentPlatformAccountId: null,\n loading: true,\n})\n\nconst deployReducer = handleActions(\n {\n [CREATE_PLATFORM_ACCOUNT_SUCCESS]: (state, { payload }) =>\n state.set('currentPlatformAccountId', payload.srn),\n [SET_CURRENT_PLATFORM_ACCOUNT]: (state, { payload }) =>\n state.set('currentPlatformAccountId', payload),\n [SET_DATA_SOURCES]: state => state.set('loading', false),\n },\n initialState\n)\n\nexport default deployReducer\n","export const SET_CURRENT_PLATFORM_ACCOUNT =\n 'app/Deploy/SET_CURRENT_PLATFORM_ACCOUNT'\n","/*\n * Config Messages\n *\n * This contains all the text for the Config component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n cancel: {\n id: 'app.containers.Deploy.cancel',\n defaultMessage: 'Cancel',\n },\n confirm: {\n id: 'app.containers.Deploy.confirm',\n defaultMessage: 'Confirm',\n },\n dataSourcesTitle: {\n id: 'app.containers.Deploy.dataSourcesTitle',\n defaultMessage: 'Configured Collectors',\n },\n deleteCollector: {\n id: 'app.containers.Deploy.deleteCollector',\n defaultMessage: 'Delete Collector',\n },\n deletingCollector: {\n id: 'app.containers.Deploy.deleteCollector',\n defaultMessage: 'Deleting Collector',\n },\n deleteCollectorConfirmMessage: {\n id: 'app.containers.Deploy.deleteCollectorConfirmMessage',\n defaultMessage: 'Are you sure you want to delete the collector {name}?',\n },\n deleteCollectorError: {\n id: 'app.containers.Deploy.error',\n defaultMessage: 'There was an error deleting the collector.',\n },\n readOnly: {\n id: 'app.containers.Deploy.readOnly',\n defaultMessage: 'Read Only',\n },\n tooManyCloudAccountsToDelete: {\n id: 'app.containers.Deploy.tooManyCloudAccountsToDelete',\n defaultMessage:\n 'Collector {name} has {number} accounts configured. Please delete account configuration before deleting collector.',\n },\n vault: {\n id: 'app.containers.Deploy.vault',\n defaultMessage: 'HashiCorp Vault',\n },\n awsAccountInfo: {\n id: 'app.containers.Deploy.awsAccountInfo',\n defaultMessage:\n 'This will be the account of the ARN Role it is installed in (will be visible in the middle of the ARN role like the number 123456789012 in the example here arn:aws:iam::<123456789012>:role/sonrai-collector',\n },\n awsArnInfo: {\n id: 'app.containers.Deploy.awsArnInfo',\n defaultMessage:\n 'This is a required role. Most companies give it \"ReadOnly\" permissions which allows for Data Discovery and Data Classification. However it can be limited in its permissions to list and describe style permissions like the AWS Managed \"SecurityAudit\" role with the addition to be able to read audit data from CloudTrail and other sources (usually S3 resources with GetObject permissions to be added to the role). This set of permissions will limit the use of data classification features.',\n },\n awsBotInfo: {\n id: 'app.containers.Deploy.awsBotInfo',\n defaultMessage:\n 'This is the optional role the collector will use to implement Protection BOTs in your AWS environment.',\n },\n})\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\nimport { selectDataSources } from 'containers/DeployManager/selectors'\nimport { INTEGRATION_TYPES } from 'containers/DeployManager/constants'\n\nconst selectConfigDomain = state => state.get('deployConfig')\n\nexport const selectCurrentPlatformAccountId = createSelector(\n selectConfigDomain,\n state => state.get('currentPlatformAccountId')\n)\n\nexport const selectCurrentPlatformAccount = createSelector(\n [selectCurrentPlatformAccountId, selectDataSources],\n (id, dataSources) =>\n dataSources.find(source => source.get('srn') === id, null, Map())\n)\n\nexport const selectCurrentSubAccounts = createSelector(\n [selectCurrentPlatformAccount],\n platformAccount =>\n platformAccount\n .getIn(['containsCloudAccount', 'items'], List())\n .filter(account => account.get('cloudType') !== INTEGRATION_TYPES.VAULT)\n)\n\nexport const selectCurrentIntegrations = createSelector(\n [selectCurrentPlatformAccount],\n platformAccount =>\n platformAccount\n .getIn(['containsCloudAccount', 'items'], List())\n .filter(account => account.get('cloudType') === INTEGRATION_TYPES.VAULT)\n)\n\nexport const selectLoading = createSelector(\n selectConfigDomain,\n state => state.get('loading')\n)\n","import { SET_CURRENT_PLATFORM_ACCOUNT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const setCurrentPlatformAccount = createAction(\n SET_CURRENT_PLATFORM_ACCOUNT\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport SectionHeader from 'components/SectionHeader'\nimport BorderedCard from 'components/BorderedCard'\n\nconst ConfSection = ({ children, title }) => {\n const styles = {\n marginTop: '2em',\n }\n\n return (\n
\n {title}\n {children}\n
\n )\n}\n\nConfSection.propTypes = {\n children: PropTypes.node,\n title: PropTypes.node,\n}\n\nexport default ConfSection\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Icon from 'components/Icon'\n\nimport { INTEGRATION_TYPES } from 'containers/DeployManager/constants'\n\nconst IntegrationBadge = props => {\n if (props.type === INTEGRATION_TYPES.VAULT) {\n return \n }\n\n return null\n}\n\nIntegrationBadge.propTypes = {\n type: PropTypes.oneOf([INTEGRATION_TYPES.VAULT, '']),\n style: PropTypes.object,\n}\n\nexport default IntegrationBadge\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n inline: PropTypes.bool,\n tag: tagPropType,\n color: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar defaultProps = {\n tag: 'small',\n color: 'muted'\n};\n\nvar FormText = function FormText(props) {\n var className = props.className,\n cssModule = props.cssModule,\n inline = props.inline,\n color = props.color,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, [\"className\", \"cssModule\", \"inline\", \"color\", \"tag\"]);\n\n var classes = mapToCssModules(classNames(className, !inline ? 'form-text' : false, color ? \"text-\" + color : false), cssModule);\n return React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nFormText.propTypes = propTypes;\nFormText.defaultProps = defaultProps;\nexport default FormText;","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\n\nimport IconDivider from 'components/IconDivider'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\n\nexport class HideShow extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n expanded: false,\n }\n\n this.styles = {\n expandButton: {\n fontSize: '0.8em',\n marginTop: '1em',\n display: 'block',\n },\n label: {\n whiteSpace: 'noWrap',\n },\n }\n }\n\n toggleExpand = () => {\n this.setState(oldState => ({\n expand: !oldState.expand,\n }))\n }\n\n render() {\n return (\n \n \n \n {this.state.expand ? (\n
\n {this.props.hideLabel}\n
\n ) : (\n
\n {this.props.showLabel}\n
\n )}\n
\n \n
{this.state.expand && this.props.children}
\n
\n )\n }\n}\n\nHideShow.defaultProps = {\n color: 'primary',\n showLabel: ' Show More',\n hideLabel: 'Show Less',\n}\n\nHideShow.propTypes = {\n color: PropTypes.string,\n children: PropTypes.node,\n hideLabel: PropTypes.node,\n showLabel: PropTypes.node,\n}\n\nexport default HideShow\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Input, FormGroup, FormText, FormFeedback } from 'reactstrap'\nimport { compose, bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\n\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\nimport Button from 'components/Button'\nimport FormLabel from 'components/FormLabel'\nimport { createVaultIntegration } from 'containers/DeployManager/actions'\nimport { selectCreatingIntegration } from 'containers/DeployManager/selectors'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport HideShow from 'components/HideShow'\nimport TextLink from 'components/TextLink'\nimport { PLATFORM_ACCOUNT_TYPES } from 'appConstants'\n\nimport {\n selectCurrentIntegrations,\n selectCurrentPlatformAccountId,\n selectCurrentPlatformAccount,\n} from './selectors'\n\nexport class VaultIntegrationForm extends ImmutablePureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n addIntegrationButtonWrapper: {\n gridArea: 'submit',\n marginTop: '2em',\n },\n formGroupingTitle: {\n fontSize: '0.9em',\n color: props.theme.neutralDark,\n marginTop: '2em',\n fontWeight: 'bold',\n textTransform: 'uppercase',\n },\n formGroup: {\n margin: 0,\n },\n }\n }\n\n state = {\n vaultId: {\n value: '',\n invalid: false,\n },\n vaultUri: {\n value: '',\n invalid: false,\n },\n vaultServerCert: {\n value: '',\n invalid: false,\n },\n vaultAuthPath: {\n value: '',\n invalid: false,\n },\n vaultAuthRole: {\n value: '',\n invalid: false,\n },\n vaultClientCert: {\n value: '',\n invalid: false,\n },\n applicationIdURI: {\n value: '',\n invalid: false,\n },\n vaultClientKey: {\n value: '',\n invalid: false,\n },\n vaultAuditContainer: {\n value: '',\n invalid: false,\n },\n vaultAuditContainerPrefix: {\n value: '',\n invalid: false,\n },\n }\n\n vaultConfigurationIsInvalid = () => {\n return (\n !this.state.vaultId.value ||\n this.state.vaultId.invalid ||\n !this.state.vaultUri.value ||\n this.state.vaultUri.invalid ||\n !this.state.vaultAuthRole.value ||\n this.state.vaultAuthRole.invalid ||\n !this.state.vaultAuditContainer.value ||\n !this.state.vaultAuditContainerPrefix.value\n )\n }\n\n addVaultIntegration = () => {\n this.props.createVaultIntegration({\n name: this.props.name,\n platformAccountId: this.props.platformAccountId,\n vaultId: this.state.vaultId.value,\n vaultUri: this.state.vaultUri.value,\n vaultServerCert: this.state.vaultServerCert.value,\n vaultAuthPath: this.state.vaultAuthPath.value,\n vaultAuthRole: this.state.vaultAuthRole.value,\n vaultClientCert: this.state.vaultClientCert.value,\n vaultClientKey: this.state.vaultClientKey.value,\n vaultAuditContainer: this.state.vaultAuditContainer.value,\n vaultAuditContainerPrefix: this.state.vaultAuditContainerPrefix.value,\n applicationIdURI: this.state.applicationIdURI.value,\n })\n }\n\n setVaultId = e => {\n const newId = e.target.value\n\n const re = /^[a-zA-Z0-9]+$/i\n\n this.setState({\n vaultId: {\n value: newId,\n invalid: !re.test(newId),\n },\n })\n }\n\n setVaultUri = e => {\n const address = e.target.value\n\n this.setState({\n vaultUri: {\n value: address,\n invalid: !address.startsWith('https://'),\n },\n })\n }\n\n setVaultServerCert = e => {\n const cert = e.target.value\n\n this.setState({\n vaultServerCert: {\n value: cert,\n },\n })\n }\n\n setVaultAuthPath = e => {\n const newId = e.target.value\n\n const re = /^\\S+$/\n\n this.setState({\n vaultAuthPath: {\n value: newId,\n invalid: !re.test(newId),\n },\n })\n }\n\n setVaultAuthRole = e => {\n const newId = e.target.value\n\n const re = /^[a-zA-Z0-9_][a-zA-Z0-9.\\-_]*$/g\n\n this.setState({\n vaultAuthRole: {\n value: newId,\n invalid: !re.test(newId),\n },\n })\n }\n\n setVaultClientCert = e => {\n const cert = e.target.value\n\n this.setState({\n vaultClientCert: {\n value: cert,\n },\n })\n }\n\n setVaultClientKey = e => {\n const key = e.target.value\n\n this.setState({\n vaultClientKey: {\n value: key,\n },\n })\n }\n\n setVaultAuditContainer = e => {\n const val = e.target.value\n\n this.setState({\n vaultAuditContainer: {\n value: val,\n invalid: !val,\n },\n })\n }\n\n setApplicationIdURI = e => {\n const val = e.target.value\n\n this.setState({\n applicationIdURI: {\n value: val,\n invalid: !val,\n },\n })\n }\n\n setVaultAuditContainerPrefix = e => {\n const val = e.target.value\n\n this.setState({\n vaultAuditContainerPrefix: {\n value: val,\n invalid: !val,\n },\n })\n }\n\n renderSetup = () => {\n return (\n
\n
Setup
\n \n \n Vault ID\n \n \n \n An alphanumeric identifier for the vault instance.\n \n {this.state.vaultId.invalid && (\n \n Must contain only numbers and letters. Spaces and special\n characters are not allowed. This field is required.\n \n )}\n \n\n \n \n Vault URI\n \n \n The address of the vault instance\n {this.state.vaultUri.invalid && (\n Must start with "https://"\n )}\n \n
\n )\n }\n\n renderAuth = () => {\n return (\n
\n
Authentication
\n \n Vault Server Certificate\n \n Required only if your server is self-signed\n \n\n \n \n Vault Auth Provider Role\n \n \n {this.state.vaultAuthRole.invalid && (\n \n This field is required. May contain dashes, periods, and\n underscores, but must start with an alphanumeric character.\n \n )}\n \n\n {this.props.platformAccount.get('cloudType') ===\n PLATFORM_ACCOUNT_TYPES.AZURE && (\n \n \n Azure Application ID URI\n \n \n {this.state.applicationIdURI.invalid && (\n This field is required.\n )}\n \n )}\n\n \n \n Vault Auth Provider Path\n \n The path of the auth engine\n {this.state.vaultAuthPath.invalid && (\n Cannot contain whitespace\n )}\n \n\n \n Client Certificate\n \n \n\n \n Client Key\n \n \n \n
\n )\n }\n\n renderLogSource = () => {\n return (\n
\n
Log Source
\n \n \n Audit Log Source Bucket\n \n \n {this.state.vaultAuditContainer.invalid && (\n This field is required\n )}\n \n\n \n \n Audit Log Source Prefix\n \n \n {this.state.vaultAuditContainerPrefix.invalid && (\n This field is required\n )}\n \n
\n )\n }\n\n render() {\n const isDisabled = !this.props.name || this.vaultConfigurationIsInvalid()\n\n return (\n
\n {this.renderSetup()}\n {this.renderAuth()}\n {this.renderLogSource()}\n\n
\n {!this.props.creatingIntegration && (\n \n \n Add Vault Integration\n \n \n Cancel\n \n \n )}\n
\n
\n )\n }\n}\n\nVaultIntegrationForm.propTypes = {\n creatingIntegration: PropTypes.bool,\n createVaultIntegration: PropTypes.func.isRequired,\n currentIntegrations: ImmutablePropTypes.list.isRequired,\n name: PropTypes.string,\n platformAccount: ImmutablePropTypes.map.isRequired,\n platformAccountId: PropTypes.string.isRequired,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n creatingIntegration: selectCreatingIntegration,\n currentIntegrations: selectCurrentIntegrations,\n platformAccountId: selectCurrentPlatformAccountId,\n platformAccount: selectCurrentPlatformAccount,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators({ createVaultIntegration }, dispatch)\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n themeable\n)(VaultIntegrationForm)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport Color from 'color'\n\nimport { PLATFORM_ACCOUNT_TYPES } from 'appConstants'\nimport { exists } from 'utils/sonraiUtils'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\nimport FormLabel from 'components/FormLabel'\nimport HideShow from 'components/HideShow'\nimport TextLink from 'components/TextLink'\n\nexport class VaultIntegrationPropertiesModal extends ImmutablePureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n formGroupingTitle: {\n fontSize: '0.9em',\n color: props.theme.neutralDark,\n marginTop: '2em',\n fontWeight: 'bold',\n textTransform: 'uppercase',\n },\n formGroup: {\n margin: 0,\n },\n empty: {\n fontStyle: 'italic',\n color: props.theme.neutralDark,\n },\n value: {\n backgroundColor: Color(props.theme.light).darken(0.03),\n fontFamily: 'monospace',\n maxHeight: '150px',\n overflow: 'auto',\n padding: '0.5em',\n },\n }\n }\n\n getValue = propName => {\n const value = this.props.integration.getIn(['blob', propName])\n\n if (!exists(value)) {\n return (Not set)\n }\n\n return
{value}
\n }\n\n render() {\n return (\n \n \n Configuration of Vault Integration{' '}\n {this.props.integration.get('name')}\n \n \n
\n Setup\n
\n Vault ID\n
{this.getValue('vaultId')}
\n\n Vault URI\n
{this.getValue('vaultUri')}
\n\n
\n
Authentication
\n Vault Server Certificate\n
{this.getValue('vaultServerCert')}
\n\n Vault Auth Provider Role\n
{this.getValue('vaultAuthRole')}
\n\n {this.props.platformAccount.get('cloudType') ==\n PLATFORM_ACCOUNT_TYPES.AZURE && (\n \n Azure Application ID URI\n
{this.getValue('applicationIdURI')}
\n
\n )}\n\n \n Vault Auth Provider Path\n
{this.getValue('vaultAuthPath')}
\n\n Client Certificate\n
{this.getValue('vaultClientCert')}
\n\n Client Key\n
{this.getValue('vaultClientKey')}
\n \n
\n\n
\n
Log Source
\n Audit Log Source Bucket\n
{this.getValue('vaultAuditContainer')}
\n\n Audit Log Source Prefix\n
{this.getValue('vaultAuditContainerPrefix')}
\n
\n
\n \n \n Close\n \n \n
\n )\n }\n}\n\nVaultIntegrationPropertiesModal.propTypes = {\n platformAccount: ImmutablePropTypes.map.isRequired,\n integration: ImmutablePropTypes.map.isRequired,\n isOpen: PropTypes.bool,\n toggle: PropTypes.func,\n theme: themeShape,\n}\n\nexport default themeable(VaultIntegrationPropertiesModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Input, Table, Modal, ModalHeader, ModalBody } from 'reactstrap'\nimport { compose, bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport Select from 'components/SelectBar'\nimport { INTEGRATION_TYPES } from 'containers/DeployManager/constants'\nimport { deletePlatformCloudAccount } from 'containers/DeployManager/actions'\nimport {\n selectCreatingIntegration,\n selectDeletingCloudAccountIds,\n} from 'containers/DeployManager/selectors'\nimport TextLink from 'components/TextLink'\n\nimport messages from './messages'\nimport IntegrationBadge from './IntegrationBadge'\nimport VaultIntegrationForm from './VaultIntegrationForm'\nimport VaultIntegrationPropertiesModal from './VaultIntegrationPropertiesModal'\nimport {\n selectCurrentIntegrations,\n selectCurrentPlatformAccount,\n} from './selectors'\n\nexport class Integrations extends ImmutablePureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n addIntegrationForm: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto auto auto auto',\n gridColumnGap: '1em',\n gridRowGap: '1em',\n marginBottom: '2em',\n gridTemplateAreas: '\". .\" \". .\" \". .\" \". submit\"',\n maxWidth: '900px',\n },\n addIntegrationButtonWrapper: {\n gridArea: 'submit',\n },\n tableTitle: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n marginBottom: '1em',\n },\n }\n }\n\n state = {\n name: '',\n integrationType: null,\n showForm: false,\n viewingIntegrationConfig: null,\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.creatingIntegration && !this.props.creatingIntegration) {\n this.setState({\n name: '',\n integrationType: null,\n showForm: false,\n })\n }\n }\n\n deleteIntegration = integrationId => {\n this.props.deletePlatformCloudAccount({\n cloudAccountId: integrationId,\n platformAccountId: this.props.platformAccount.get('srn'),\n })\n }\n\n setIntegrationName = e => {\n this.setState({\n name: e.target.value,\n })\n }\n\n setIntegrationType = option => {\n this.setState({\n integrationType: option.value,\n })\n }\n\n getTypeOptions = () => {\n return [{ label: 'HashiCorp Vault', value: INTEGRATION_TYPES.VAULT }]\n }\n\n showForm = () => {\n this.setState({\n showForm: true,\n })\n }\n\n cancelAdd = () => {\n this.setState({\n showForm: false,\n integrationType: null,\n name: '',\n })\n }\n\n toggleViewingIntegrationConfig = () => {\n this.setState(currentState => ({\n viewingIntegrationConfig: !currentState.viewingIntegrationConfig,\n }))\n }\n\n setViewingIntegrationConfig = id => {\n this.setState({\n viewingIntegrationConfig: id,\n })\n }\n\n render() {\n const viewingIntegrationConfig = this.state.viewingIntegrationConfig\n ? this.props.currentIntegrations.find(\n integration =>\n integration.get('srn') === this.state.viewingIntegrationConfig\n )\n : Map()\n\n return (\n
\n

Add additional third-party data sources and enhancements

\n\n {this.props.currentIntegrations.isEmpty() ? (\n \n Add Integration\n \n ) : (\n
\n \n
\n
{`Configured Integrations (${\n this.props.currentIntegrations.size\n })`}
\n
\n \n Add Integration\n \n
\n
\n \n \n \n \n \n \n \n \n {this.props.currentIntegrations.map(item => (\n \n \n \n \n \n \n ))}\n \n
TypeName\n \n
\n {' '}\n \n {item.get('name')}\n \n this.setViewingIntegrationConfig(item.get('srn'))\n }\n >\n (View Configuration)\n \n \n this.deleteIntegration(item.get('srn'))}\n disabled={this.props.deletingCloudAccountIds.get(\n item.get('srn')\n )}\n >\n \n \n
\n
\n )}\n\n {this.state.showForm && (\n \n Add Integration\n \n
\n Integration Type\n \n\n \n Display Name\n \n \n\n Configuration\n {!this.state.integrationType && (\n \n Select an integration type for configuration options\n \n )}\n {this.state.integrationType === INTEGRATION_TYPES.VAULT && (\n \n )}\n\n {!this.state.integrationType && (\n
\n \n \n Cancel\n \n
\n )}\n\n {this.props.creatingIntegration && (\n
\n \n
\n )}\n
\n
\n
\n )}\n
\n )\n }\n}\n\nIntegrations.propTypes = {\n creatingIntegration: PropTypes.bool,\n currentIntegrations: ImmutablePropTypes.list.isRequired,\n deletingCloudAccountIds: ImmutablePropTypes.map.isRequired,\n platformAccount: ImmutablePropTypes.map.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n creatingIntegration: selectCreatingIntegration,\n currentIntegrations: selectCurrentIntegrations,\n deletingCloudAccountIds: selectDeletingCloudAccountIds,\n platformAccount: selectCurrentPlatformAccount,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators({ deletePlatformCloudAccount }, dispatch)\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(withConnect)(Integrations)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport {\n Input,\n FormGroup,\n FormFeedback,\n Label,\n Modal,\n ModalHeader,\n ModalBody,\n ModalFooter,\n} from 'reactstrap'\nimport { List } from 'immutable'\n\nimport { GLOBAL_SWIMLANE_NAME } from 'appConstants'\nimport SelectBar from 'components/SelectBar'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport CenterContent from 'components/CenterContent'\nimport ConfSection from './ConfSection'\nimport Expandable from 'components/Expandable'\nimport Integrations from './Integrations'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport _ from 'lodash'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport WithoutPermission from 'containers/PermissionChecker/WithoutPermission'\nimport DataTable from 'components/DataTable'\nimport permissionChecker from 'containers/PermissionChecker'\nimport messages from './messages'\nimport IHelp from 'containers/IHelp'\n\nconst invalidAccountMsgs = [\n 'The Account Number should be 12 digits',\n 'This Account has already been added',\n]\n\nexport class ConfigureAws extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n didRoleDeploy: props.platformAccount.isEmpty(),\n cloudAccountId: '',\n cloudRole: '',\n botRole: '',\n swimlaneModal: false,\n selectedSwimlane: null,\n showAccountModal: false,\n editingAccount: null,\n accountInvalidMessage: null,\n }\n\n this.styles = {\n addAccountForm: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto auto auto auto',\n gridColumnGap: '1em',\n gridRowGap: '1em',\n marginBottom: '2em',\n gridTemplateAreas: '\". .\" \". .\" \". .\" \". submit\"',\n },\n labelInfo: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridRowGap: '5px',\n },\n addAccountButtonWrapper: {\n gridArea: 'submit',\n },\n subList: {\n listStyleType: 'circle',\n listStylePosition: 'inside',\n },\n }\n }\n\n componentDidUpdate = oldProps => {\n if (\n oldProps.platformAccount.get('srn') !==\n this.props.platformAccount.get('srn')\n ) {\n this.setState({\n didRoleDeploy: !this.props.creatingNew,\n cloudAccountId: '',\n cloudRole: '',\n })\n }\n\n if (oldProps.deployingRoles && !this.props.deployingRoles) {\n this.setState({\n didRoleDeploy: true,\n })\n }\n\n if (\n (oldProps.addingAccount && !this.props.addingAccount) ||\n (oldProps.editingCloudAccount && !this.props.editingCloudAccount)\n ) {\n this.setState({\n cloudAccountId: '',\n cloudRole: '',\n botRole: '',\n showAccountModal: false,\n editingAccount: null,\n })\n }\n }\n\n setCloudAccountId = ({ target: { value } }) => {\n const cloudAccountId = value && value !== '' ? value.trim() : ''\n this.setState({\n cloudAccountId,\n })\n }\n\n setCloudRole = ({ target: { value } }) => {\n const cloudRole = value && value !== '' ? value.trim() : ''\n this.setState({\n cloudRole,\n })\n }\n\n setBotRole = ({ target: { value } }) => {\n const botRole = value && value !== '' ? value.trim() : ''\n this.setState({\n botRole,\n })\n }\n\n getSwimlaneOptions = () => {\n return this.props.swimlanes\n .toList()\n .filter(swimlane => swimlane.get('title') !== GLOBAL_SWIMLANE_NAME)\n .toJS()\n .map(swimlane => ({\n label: swimlane.title,\n value: swimlane.srn,\n }))\n }\n\n renderAddToSwimlaneModal = () => {\n const options = this.getSwimlaneOptions()\n\n return (\n \n Swimlanes\n \n \n this.setState({ selectedSwimlane: params })}\n options={options}\n />\n \n \n \n No, Thanks.\n \n \n Continue\n \n \n \n )\n }\n\n handleAddToSwimlane = () => {\n const existingAccounts =\n this.props.swimlanes.getIn([\n this.state.selectedSwimlane.label,\n 'accounts',\n ]) || List()\n const accounts = existingAccounts.push(this.state.cloudAccountId).toJS()\n\n this.props.updateSwimlane({\n srn: this.state.selectedSwimlane.value,\n swimlane: {\n accounts,\n },\n })\n this.addCloudAccount()\n }\n\n addCloudAccount = () => {\n this.setState({ swimlaneModal: false })\n this.props.addAccount({\n accountId: this.state.cloudAccountId,\n role: this.state.cloudRole,\n botRole: this.state.botRole,\n platformAccountId: this.props.platformAccount.get('srn'),\n cloudType: this.props.platformAccount.get('cloudType'),\n })\n }\n\n deleteSubAccount = data => {\n this.props.deletePlatformCloudAccount({\n data: data,\n platformAccountId: this.props.platformAccount.get('srn'),\n })\n }\n\n renderDeploy = () => {\n return (\n
\n

\n The Deploy process redirects to your cloud account and goes through\n the process of adding the Sonrai Intel Collector into\n your account.\n

\n

\n If you are managing multiple cloud accounts, ensure you are signed\n into the desired cloud account before you run this step.\n

\n \n {this.props.deployingRoles ? (\n \n ) : (\n \n Deploy\n \n )}\n \n
\n )\n }\n\n renderCheckAwsRoles = () => {\n return (\n
\n

\n Before your account can be scanned, you must create a role that the\n Sonrai Collector can assume. You may also create a role for Sonrai\n Bots to use.\n

\n \n \n
\n \n Create Read-only Role\n \n
\n\n
\n \n Create Write Role\n \n

\n Required for Bots\n

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

\n In the AWS web console that was opened by the above button, perform\n the following steps:\n

\n
    \n
  1. \n Specify accounts that can use this role\n
      \n
    • \n Enter the account ID that the collectors are deployed into\n (This is often the same account that is going to be scanned )\n
    • \n
    • Click "Next: Permissions"
    • \n
    \n
  2. \n
  3. \n Create Role\n
      \n
    • \n If Readonly, the policy ReadOnlyAccess is\n already selected in the list.\n
    • \n
    • Click "Next: Tags"
    • \n
    • Add tags, if you wish to.
    • \n
    • Click "Next: Review"
    • \n
    • Add any notes in the review that you wish
    • \n
    • Click "Save Role"
    • \n
    \n
  4. \n
\n
\n \n )\n }\n\n arnIsValid = () => {\n if (this.state.cloudRole === '') {\n return true\n }\n if (this.state.cloudRole.length > 24 && this.state.cloudAccountId !== '') {\n if (\n this.state.cloudRole.substring(13, 25) !== this.state.cloudAccountId\n ) {\n return false\n }\n }\n\n return /arn:aws:iam::(\\d{12}:role\\/sonrai)/.test(this.state.cloudRole)\n }\n\n botArnIsValid = () => {\n return (\n this.state.botRole === '' ||\n (this.state.botRole.includes('sonrai-') &&\n this.state.botRole.startsWith('arn:'))\n )\n }\n\n accountIsValid = () => {\n if (this.state.cloudAccountId === '') {\n if (this.state.accountInvalidMessage) {\n this.setState({ accountInvalidMessage: null })\n }\n return true\n }\n\n if (\n this.props.currentSubAccounts.findIndex(\n sub => sub.getIn(['blob', 'accountNumber']) == this.state.cloudAccountId\n ) !== -1\n ) {\n if (\n this.state.accountInvalidMessage !==\n 'This Account has already been added'\n ) {\n this.setState({\n accountInvalidMessage: 'This Account has already been added',\n })\n }\n return false\n }\n\n if (\n this.state.cloudAccountId.length === 12 &&\n /^\\d+$/.test(this.state.cloudAccountId)\n ) {\n if (this.state.accountInvalidMessage) {\n this.setState({ accountInvalidMessage: null })\n }\n return true\n } else {\n if (\n this.state.accountInvalidMessage !==\n 'The Account Number should be 12 digits'\n ) {\n this.setState({\n accountInvalidMessage: 'The Account Number should be 12 digits',\n })\n }\n return false\n }\n }\n\n showAddAccountModal = () => {\n this.setState({\n showAccountModal: true,\n })\n }\n\n closeAddAccountModal = () => {\n this.setState({\n showAccountModal: false,\n editingAccount: null,\n cloudRole: '',\n botRole: '',\n cloudAccountId: '',\n })\n }\n\n showEditAccountModal = cloudAccount => {\n this.setState({\n showAccountModal: true,\n editingAccount: cloudAccount,\n cloudRole: _.get(cloudAccount, ['blob', 'roleArn']) || '',\n botRole: _.get(cloudAccount, ['blob', 'botRoleArn']) || '',\n cloudAccountId: _.get(cloudAccount, ['blob', 'accountNumber']) || '',\n })\n }\n\n updateCloudAccount = () => {\n this.props.updatePlatformCloudAccount({\n platformAccountId: this.props.platformAccount.get('srn'),\n srn: this.state.editingAccount.srn,\n blob: {\n accountNumber: this.state.cloudAccountId,\n roleArn: this.state.cloudRole,\n runDateTime: _.get(this.state.editingAccount, ['blob', 'runDateTime']),\n botRoleArn: this.state.botRole,\n },\n })\n }\n\n renderSubAccountModal = () => {\n return (\n \n \n {this.state.editingAccount ? 'Update Account' : 'Add Account'}\n \n \n {!this.state.editingAccount && (\n

\n Enter the Account Number, the collector{' '}\n Role ARN and the Bot Role ARN{' '}\n (created in the previous step) to complete your configuration and\n begin collecting information.\n

\n )}\n\n
\n {!this.state.editingAccount && (\n \n \n \n \n Account Number  \n \n \n \n \n \n {this.state.accountInvalidMessage}\n \n \n \n )}\n\n \n \n Role ARN  \n \n \n \n \n \n \n The Role ARN should start with arn:aws:iam::<Your Account\n Number>:role/sonrai\n \n \n\n \n \n Bot Role ARN  \n \n \n \n \n \n \n The Bot Role ARN should start with "arn:" and contain\n "sonrai-"\n \n \n
\n
\n \n \n Cancel\n \n {this.props.addingAccount || this.props.editingCloudAccount ? (\n \n ) : (\n this.setState({ swimlaneModal: true })\n }\n disabled={\n !this.state.cloudAccountId ||\n !this.state.cloudRole ||\n !this.arnIsValid() ||\n !this.botArnIsValid() ||\n !this.accountIsValid()\n }\n >\n {this.state.editingAccount ? 'Update Account' : 'Add Account'}\n \n )}\n \n
\n )\n }\n\n renderSubAccounts = () => {\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.collectors',\n resourceId: this.props.platformAccount.get('resourceId'),\n })\n\n return (\n \n \n

\n Now that your collector is deployed, you must enter the account(s)\n to scan.\n

\n\n \n \n Add Account\n \n \n {this.state.showAccountModal && this.renderSubAccountModal()}\n {this.renderAddToSwimlaneModal()}\n \n \n {this.props.currentSubAccounts.isEmpty() ? (\n

There are no accounts configured to be scanned.

\n ) : (\n

These are the accounts that will be scanned.

\n )}\n \n {!this.props.currentSubAccounts.isEmpty() && (\n
\n ({\n srn: item.get('srn'),\n account: item.getIn(['blob', 'accountNumber']),\n accountNumber: item.getIn(['blob', 'accountNumber']),\n roleArn: item.getIn(['blob', 'roleArn']),\n botRoleArn: item.getIn(['blob', 'botRoleArn']),\n addedOn: item.getIn(['blob', 'runDateTime']),\n edit: item,\n delete: '',\n }))\n .toJS()}\n customColumnConfig={{\n srn: {\n hide: true,\n },\n edit: {\n cellStyle: { padding: '0 7px' },\n hide: !canEdit,\n width: 40,\n minWidth: 40,\n maxWidth: 40,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!canEdit) {\n return null\n }\n\n if (!params.data) {\n return null\n }\n return (\n \n this.showEditAccountModal(params.data.edit)\n }\n >\n \n \n )\n },\n },\n delete: {\n hide: !canEdit,\n cellStyle: { padding: '0 7px' },\n width: 40,\n minWidth: 40,\n maxWidth: 40,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!canEdit) {\n return null\n }\n\n if (!params.data) {\n return null\n }\n\n return (\n this.deleteSubAccount(params.data)}\n disabled={this.props.deletingCloudAccountIds.get(\n params.data.srn\n )}\n >\n \n \n )\n },\n },\n }}\n />\n
\n )}\n
\n )\n }\n\n render() {\n const { creatingNew } = this.props\n const numberOfAccounts = this.props.currentSubAccounts.size\n\n return (\n \n \n \n {this.renderDeploy()}\n \n \n {this.renderCheckAwsRoles()}\n \n \n\n \n {this.renderSubAccounts()}\n \n\n \n \n \n \n \n \n )\n }\n}\n\nConfigureAws.propTypes = {\n addAccount: PropTypes.func,\n addingAccount: PropTypes.bool,\n checkAwsRoles: PropTypes.func.isRequired,\n checkAwsBotRole: PropTypes.func.isRequired,\n creatingNew: PropTypes.bool,\n currentSubAccounts: ImmutablePropTypes.list.isRequired,\n deletingCloudAccountIds: ImmutablePropTypes.map,\n deletePlatformCloudAccount: PropTypes.func.isRequired,\n deployRoles: PropTypes.func.isRequired,\n deployingRoles: PropTypes.bool,\n editingCloudAccount: PropTypes.bool,\n platformAccount: ImmutablePropTypes.contains({\n resourceId: PropTypes.string.isRequired,\n }).isRequired,\n swimlanes: ImmutablePropTypes.iterable,\n updateSwimlane: PropTypes.func,\n updatePlatformCloudAccount: PropTypes.func,\n userHasPermission: PropTypes.func,\n}\n\nexport default permissionChecker(ConfigureAws)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\n\nclass InstructionStep extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.contentRef = React.createRef()\n this.state = {\n copied: false,\n }\n }\n\n componentWillUnmount() {\n if (this.timeout) {\n clearTimeout(this.timeout)\n }\n }\n\n copyToClipboard = () => {\n this.contentRef.current.select()\n document.execCommand('copy')\n\n this.setState({\n copied: true,\n })\n\n this.timeout = setTimeout(() => {\n this.setState({\n copied: false,\n })\n }, 3000)\n }\n\n render() {\n const { step, label, content, theme } = this.props\n const styles = {\n codeblock: {\n border: '1px solid #ccc',\n backgroundColor: '#eee',\n fontFamily: 'monospace',\n width: '600px',\n overflowX: 'auto',\n padding: '0.3em 1em',\n whiteSpace: 'nowrap',\n margin: 0,\n resize: 'none',\n },\n wrapper: {\n margin: '1.5em 0',\n },\n labelWrapper: {\n display: 'flex',\n },\n number: {\n color: theme.secondary,\n fontWeight: 400,\n border: `1.5px solid ${theme.secondary}`,\n borderRadius: '50%',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '23px',\n height: '23px',\n },\n label: {\n marginLeft: '0.5em',\n },\n copyButton: {\n margin: '0 0.5em',\n height: '2.7em',\n },\n codeWrapper: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: '2em',\n },\n copiedNotice: {\n color: theme.neutralMedium,\n fontSize: '0.8em',\n },\n }\n\n return (\n
\n

\n {step}\n {label}\n

\n {content && (\n
\n \n \n \n Copy\n \n {this.state.copied && (\n \n Copied!\n \n )}\n
\n )}\n
\n )\n }\n}\n\nInstructionStep.propTypes = {\n theme: themeShape,\n step: PropTypes.number,\n content: PropTypes.string,\n label: PropTypes.node,\n}\n\nexport default themeable(InstructionStep)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Input, FormFeedback, FormGroup } from 'reactstrap'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport WithoutPermission from 'containers/PermissionChecker/WithoutPermission'\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport CenterContent from 'components/CenterContent'\nimport DataTable from 'components/DataTable'\nimport permissionChecker from 'containers/PermissionChecker'\n\nimport ConfSection from './ConfSection'\nimport InstructionStep from './InstructionStep'\nimport Integrations from './Integrations'\n\nexport class ConfigureAzure extends ImmutablePureComponent {\n styles = {\n addAccountForm: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto auto auto',\n gridColumnGap: '1em',\n gridRowGap: '1em',\n marginBottom: '2em',\n gridTemplateAreas: '\". .\" \". .\" \". submit\"',\n },\n addAccountButtonWrapper: {\n gridArea: 'submit',\n },\n }\n\n state = {\n subscriptionId: '',\n tenantId: '',\n }\n\n componentDidUpdate = oldProps => {\n if (\n oldProps.platformAccount.get('srn') !==\n this.props.platformAccount.get('srn')\n ) {\n this.setState({\n subscriptionId: '',\n tenantId: '',\n })\n }\n\n if (oldProps.addingAccount && !this.props.addingAccount) {\n this.setState({\n subscriptionId: '',\n tenantId: '',\n })\n }\n }\n\n setSubscriptionId = e => {\n this.setState({\n subscriptionId: e.target.value,\n })\n }\n\n setTenantId = e => {\n this.setState({\n tenantId: e.target.value,\n })\n }\n\n addCloudAccount = () => {\n this.props.addAccount({\n platformAccountId: this.props.platformAccount.get('srn'),\n cloudType: this.props.platformAccount.get('cloudType'),\n subscriptionId: this.state.subscriptionId,\n tenantId: this.state.tenantId,\n })\n }\n\n deleteSubAccount = data => {\n this.props.deletePlatformCloudAccount({\n data: data,\n platformAccountId: this.props.platformAccount.get('srn'),\n })\n }\n\n renderAzureDeploy = () => {\n const templateUrl = this.props.azureClusterConfs.get(\n this.props.platformAccount.get('sid')\n )\n\n if (!templateUrl) {\n return (\n
\n

Click "Get Command" to generate the template URL

\n \n {this.props.fetchingAzureClusterConf ? (\n \n ) : (\n \n Get Command\n \n )}\n \n
\n )\n }\n\n return (\n
\n \n Open the Bash Cloud Shell in the Azure portal (\n \n https://docs.microsoft.com/en-us/azure/cloud-shell/quickstart\n \n ).\n \n }\n />\n\n \n\n \n\n \n
\n )\n }\n\n isSubscriptionInvalid = () => {\n return (\n this.props.currentSubAccounts.findIndex(\n sub =>\n sub.getIn(['blob', 'subscriptionId'], null) ==\n this.state.subscriptionId\n ) !== -1\n )\n }\n\n renderAzureSubAccounts = () => {\n const disabled = this.props.creatingNew\n ? this.props.platformAccount.isEmpty()\n : false\n\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.collectors',\n resourceId: this.props.platformAccount.get('resourceId'),\n })\n\n return (\n \n \n
\n \n ActiveDirectory ID/Tenant ID\n \n \n\n \n Subscription ID\n \n \n \n Subscription has already been added\n \n\n
\n {this.props.addingAccount ? (\n \n ) : (\n \n Add Account\n \n )}\n
\n
\n \n \n {this.props.currentSubAccounts.isEmpty() ? (\n

There are no accounts configured to be scanned.

\n ) : (\n

These are the accounts that will be scanned.

\n )}\n \n\n {!this.props.currentSubAccounts.isEmpty() && (\n
\n ({\n srn: item.get('srn'),\n account: item.getIn(['blob', 'tenantId']),\n tenantId: item.getIn(['blob', 'tenantId']),\n subscriptionId: item.getIn(['blob', 'subscriptionId']),\n addedOn: item.getIn(['blob', 'runDateTime']),\n delete: '',\n }))\n .toJS()}\n customColumnConfig={{\n tenantId: {\n headerName: 'ActiveDirectory ID/Tenant ID',\n },\n srn: {\n hide: true,\n },\n delete: {\n hide: !canEdit,\n width: 60,\n minWidth: 60,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!canEdit) {\n return null\n }\n\n if (!params.data) {\n return null\n }\n return (\n this.deleteSubAccount(params.data)}\n disabled={this.props.deletingCloudAccountIds.get(\n params.data.srn\n )}\n >\n \n \n )\n },\n },\n }}\n />\n
\n )}\n
\n )\n }\n\n render() {\n const { creatingNew } = this.props\n const numberOfAccounts = this.props.currentSubAccounts.size\n\n return (\n \n `/org/${org}/`\n : this.props.platformAccount.get('resourceId')\n }\n >\n \n {this.renderAzureDeploy()}\n \n \n\n \n {this.renderAzureSubAccounts()}\n \n\n \n \n \n \n \n \n )\n }\n}\n\nConfigureAzure.propTypes = {\n addAccount: PropTypes.func,\n addingAccount: PropTypes.bool,\n azureClusterConfs: ImmutablePropTypes.map.isRequired,\n creatingNew: PropTypes.bool,\n currentSubAccounts: ImmutablePropTypes.list.isRequired,\n deletingCloudAccountIds: PropTypes.string,\n deletePlatformCloudAccount: PropTypes.func.isRequired,\n fetchAzureClusterConf: PropTypes.func,\n fetchingAzureClusterConf: PropTypes.bool,\n platformAccount: ImmutablePropTypes.map,\n}\n\nexport default permissionChecker(ConfigureAzure)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Input, FormGroup, FormFeedback } from 'reactstrap'\nimport Select from 'react-select'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport WithoutPermission from 'containers/PermissionChecker/WithoutPermission'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport CenterContent from 'components/CenterContent'\nimport DataTable from 'components/DataTable'\nimport permissionChecker from 'containers/PermissionChecker'\n\nimport ConfSection from './ConfSection'\nimport InstructionStep from './InstructionStep'\nimport Integrations from './Integrations'\n\nexport class ConfigureGcp extends React.Component {\n constructor(props) {\n super(props)\n\n this.resourceOptions = [\n { value: 'project', label: 'Project' },\n { value: 'organization', label: 'Organization' },\n { value: 'gsuite', label: 'GSuite' },\n ]\n\n this.state = {\n resourceType: null,\n resourceId: '',\n }\n\n this.styles = {\n resourceTypeArea: {\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: 'auto',\n gridColumnGap: '1em',\n marginBottom: '1em',\n },\n resourceIdArea: {\n display: 'grid',\n gridTemplateColumns: '125px 1fr',\n gridTemplateRows: 'auto auto',\n gridColumnGap: '1em',\n gridTemplateAreas: '\". .\" \". submit\"',\n marginBottom: '1em',\n },\n addAccountButtonWrapper: {\n gridArea: 'submit',\n },\n subList: {\n listStyleType: 'circle',\n listStylePosition: 'inside',\n },\n }\n }\n\n setResourceId = e => {\n this.setState({\n resourceId: e.target.value,\n })\n }\n\n addCloudAccount = () => {\n // if gsuite type slide those bad bois a few more props\n let gsuite = {}\n if (this.state.resourceType === 'gsuite') {\n const index = this.state.resourceId.indexOf('@') + 1\n gsuite.resourceId = this.state.resourceId.substr(index)\n gsuite.delegate = this.state.resourceId\n }\n\n this.props.addAccount({\n resourceId: this.state.resourceId,\n resourceType: this.state.resourceType,\n platformAccountId: this.props.platformAccount.get('srn'),\n cloudType: this.props.platformAccount.get('cloudType'),\n ...gsuite,\n })\n }\n\n deleteSubAccount = data => {\n this.props.deletePlatformCloudAccount({\n data: data,\n platformAccountId: this.props.platformAccount.get('srn'),\n })\n }\n\n renderGcpDeploy = () => {\n const templateUrl = this.props.gcpClusterConfs.get(\n this.props.platformAccount.get('sid')\n )\n\n if (!templateUrl) {\n return (\n
\n

Click "Get Command" to generate the template URL

\n \n {this.props.fetchingGcpClusterConf ? (\n \n ) : (\n \n Get Command\n \n )}\n \n
\n )\n }\n\n return (\n
\n \n Open the Google Cloud Shell in (\n \n https://cloud.google.com/shell/docs/quickstart\n \n ).\n \n }\n />\n\n \n\n \n
\n )\n }\n\n resourceIdIsValid = () => {\n let id = this.state.resourceId\n const errors = []\n\n if (this.state.resourceType === 'project') {\n if (\n this.state.resourceId.length < 6 ||\n this.state.resourceId.length > 30\n ) {\n errors.push('Project ID must be between 6 and 30 characters.')\n }\n if (\n !(\n id.charAt(0) === id.charAt(0).toLowerCase() &&\n id.charAt(0) !== id.charAt(0).toUpperCase()\n ) ||\n !/^[0-9a-zA-Z]+$/.test(id.charAt(id.length - 1))\n ) {\n errors.push(\n 'Project ID must start with a lowercase letter and end with a letter or number.'\n )\n }\n if (\n this.props.currentSubAccounts.findIndex(\n sub =>\n sub.getIn(['blob', 'resourceId'], null) == this.state.resourceId\n ) !== -1\n ) {\n errors.push('ID already exists.')\n }\n } else if (this.state.resourceType === 'organization') {\n if (!/^\\d+$/.test(id)) {\n errors.push('Organization ID must only contain numbers.')\n }\n if (\n this.props.currentSubAccounts.findIndex(\n sub =>\n sub.getIn(['blob', 'resourceId'], null) == this.state.resourceId\n ) !== -1\n ) {\n errors.push('ID already exists.')\n }\n } else if (this.state.resourceType === 'gsuite') {\n if (!/(.+)@(([a-z]|[A-Z]))+\\.(.+)/.test(id)) {\n errors.push('Username must be a valid email.')\n }\n if (\n this.props.currentSubAccounts.findIndex(\n sub =>\n sub.getIn(['blob', 'resourceId'], null) == this.state.resourceId\n ) !== -1\n ) {\n errors.push('ID already exists.')\n }\n }\n\n if (errors.length > 0 && this.state.resourceId !== '') {\n return errors\n } else {\n return []\n }\n }\n\n changeType = type => {\n this.setState(oldState => {\n if (oldState.resourceType !== type.value) {\n return { resourceType: type.value, errors: [], resourceId: '' }\n }\n })\n }\n\n getResourceStep = () => {\n if (this.state.resourceType === 'project') {\n return 'Enter the collector Project ID (created in the step above) to complete your configuration and begin collecting information.'\n } else if (this.state.resourceType === 'organization') {\n return 'Enter the collector Organization ID (created in the step above) to complete your configuration and begin collecting information.'\n } else if (this.state.resourceType === 'gsuite') {\n return 'Enter the collector GSuite User Email (created in the step above) to complete your configuration and begin collecting information.'\n }\n }\n\n getResourceIdLabel = () => {\n if (this.state.resourceType === 'project') {\n return 'Project ID'\n } else if (this.state.resourceType === 'organization') {\n return 'Organization ID'\n } else if (this.state.resourceType === 'gsuite') {\n return 'GSuite Email'\n }\n }\n\n renderSubAccounts = () => {\n const errors = this.resourceIdIsValid()\n let errorCount = 0\n\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.collectors',\n resourceId: this.props.platformAccount.get('resourceId'),\n })\n\n return (\n \n \n \n Organization and Projects\n \n

\n Once the collector is deployed and configured, enter GCP projects\n and the organization account to scan and monitor.\n

\n

\n {' '}\n Note: GCP Folder hierarchy is automatically\n included as part of Organization monitoring. Each project you wish\n to monitor must be entered separately - it is not currently\n supported to enter a folder ID and monitor the projects contained in\n that folder.\n

\n\n
\n \n \n \n
\n
{this.getResourceStep()}
\n
 
\n {this.state.resourceType && (\n
\n \n {this.getResourceIdLabel()}\n \n \n 0}\n />\n \n {errors.map(msg => {\n errorCount++\n return
{msg}
\n })}\n
\n
\n\n
\n {this.props.addingAccount ? (\n \n ) : (\n 0 ||\n this.props.platformAccount.isEmpty()\n }\n >\n Add Account\n \n )}\n
\n
\n )}\n \n \n {this.props.currentSubAccounts.isEmpty() ? (\n

There are no accounts configured to be scanned.

\n ) : (\n

These are the accounts that will be scanned.

\n )}\n \n {!this.props.currentSubAccounts.isEmpty() && (\n
\n ({\n srn: item.get('srn'),\n account: item.getIn(['blob', 'resourceId']),\n resourceId: item.getIn(['blob', 'resourceId']),\n resourceType: item.getIn(['blob', 'resourceType']),\n delegate: item.getIn(['blobl', 'delegate']),\n addedOn: item.getIn(['blob', 'runDateTime']),\n delete: '',\n }))\n .toJS()}\n customColumnConfig={{\n srn: {\n hide: true,\n },\n delete: {\n hide: !canEdit,\n width: 60,\n minWidth: 60,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!canEdit) {\n return null\n }\n\n if (!params.data) {\n return null\n }\n return (\n this.deleteSubAccount(params.data)}\n disabled={this.props.deletingCloudAccountIds.get(\n params.data.srn\n )}\n >\n \n \n )\n },\n },\n }}\n />\n
\n )}\n
\n )\n }\n\n render() {\n const { creatingNew } = this.props\n const numberOfAccounts = this.props.currentSubAccounts.size\n\n return (\n \n `/org/${org}/`\n : this.props.platformAccount.get('resourceId')\n }\n >\n \n {this.renderGcpDeploy()}\n \n \n\n \n {this.renderSubAccounts()}\n \n\n \n \n \n \n \n \n )\n }\n}\n\nConfigureGcp.propTypes = {\n addAccount: PropTypes.func,\n addingAccount: PropTypes.bool,\n creatingNew: PropTypes.bool,\n currentSubAccounts: ImmutablePropTypes.list.isRequired,\n deletingCloudAccountIds: ImmutablePropTypes.map,\n deletePlatformCloudAccount: PropTypes.func.isRequired,\n platformAccount: ImmutablePropTypes.map,\n gcpClusterConfs: ImmutablePropTypes.map,\n fetchingGcpClusterConf: PropTypes.bool,\n fetchGcpClusterConf: PropTypes.func,\n userHasPermission: PropTypes.func,\n}\n\nexport default permissionChecker(ConfigureGcp)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport gql from 'graphql-tag'\nimport { Mutation } from 'react-apollo'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\n\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\n\nimport messages from './messages'\nimport { List } from 'immutable'\n\nconst DELETE_COLLECTOR = gql`\n mutation deleteCollector($srn: ID!) {\n DeletePlatformaccount(srn: $srn)\n }\n`\n\n/**\n * This method gets the message to show on the modal, and also returns a flag\n * for whether the delete action can be performed in the current state\n */\nfunction getMessages(queryState, props) {\n let canPerformAction = true\n let { loading, error } = queryState\n\n let title = \n let message = (\n \n )\n\n if (loading) {\n canPerformAction = false\n title = \n message = (\n
\n \n
\n )\n }\n\n // cannot delete if there are more than one platform account\n const accounts = props.platformAccount.getIn([\n 'containsCloudAccount',\n 'items',\n ])\n if (!accounts || !(accounts instanceof List)) {\n error = true // fall thru to error handler\n // eslint-disable-next-line no-console\n console.warn(\n `platform account had invalid value for containsCloudAccount`,\n props.platformAccount.toJS()\n )\n } else if (accounts.size > 0) {\n canPerformAction = false\n message = (\n \n )\n }\n\n if (error) {\n canPerformAction = false\n message = (\n \n )\n }\n return { canPerformAction, title, message }\n}\n\nexport default function DeleteCollectorAction(props) {\n return (\n \n \n \n {(deleteCollector, { data, error, loading }) => {\n const { canPerformAction, title, message } = getMessages(\n { error, loading },\n props\n )\n\n if (data) {\n // if received some data - mutation success, so reset the page\n props.fetchPlatformAccounts()\n props.setCurrentPlatformAccount(null)\n props.close()\n }\n\n return (\n \n {title}\n {message}\n \n {\n deleteCollector({\n variables: { srn: props.platformAccount.get('srn') },\n })\n }}\n >\n \n {' '}\n \n \n \n \n \n )\n }}\n \n \n \n )\n}\n\nDeleteCollectorAction.propTypes = {\n fetchPlatformAccounts: PropTypes.func,\n open: PropTypes.boolean,\n close: PropTypes.func.isRequired,\n platformAccount: ImmutablePropTypes.map.isRequired,\n setCurrentPlatformAccount: PropTypes.func,\n}\n","import React, { Fragment, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport Dropdown, {\n DropdownMenu,\n DropdownAnchor,\n DropdownItem,\n} from 'components/Dropdown'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport DeleteCollectorAction from './DeleteCollectorAction'\n\nimport messages from './messages'\n\nexport default function ConfigureCollectorActions(props) {\n const [deleteModalOpen, setDeleteModalOpen] = useState(false)\n\n // this is actions that could be performed on the collector\n const actions = []\n\n // if user can edit the collector, add some edit actions\n if (props.canEdit) {\n actions.push()\n }\n\n return (\n \n \n \n \n \n {actions}\n \n \n \n )\n}\n\nConfigureCollectorActions.defaultProps = {\n canEdit: false,\n}\n\nConfigureCollectorActions.propTypes = {\n canEdit: PropTypes.bool.isRequired,\n fetchPlatformAccounts: PropTypes.func,\n platformAccount: ImmutablePropTypes.map.isRequired,\n setCurrentPlatformAccount: PropTypes.func,\n}\n\nfunction DeleteActionDropdownItem({ setModalOpen }) {\n const label = \n return (\n {\n setModalOpen(true)\n }}\n />\n )\n}\n\nDeleteActionDropdownItem.propTypes = {\n setModalOpen: PropTypes.func,\n}\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { compose, bindActionCreators } from 'redux'\nimport { Input, Label, Modal, ModalBody, ModalFooter } from 'reactstrap'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport moment from 'moment'\nimport qs from 'query-string'\n\nimport { SUPPORT_EMAIL } from 'appConstants'\nimport IHelp from 'containers/IHelp'\nimport BorderedCard from 'components/BorderedCard'\nimport {\n selectCreatingAccount,\n selectDeployingRoles,\n selectDeployingCollector,\n selectAddingAccount,\n selectFetchingAzureClusterConfig,\n selectAzureClusterConfs,\n selectGcpClusterConfs,\n selectDeletingCloudAccountIds,\n selectFetchingGcpClusterConfig,\n selectEditingCloudAccount,\n} from 'containers/DeployManager/selectors'\nimport {\n addAccount,\n createPlatformAccount,\n deployRoles,\n deployCollector,\n fetchPlatformAccounts,\n fetchAzureClusterConf,\n fetchGcpClusterConf,\n checkAwsRoles,\n checkAwsBotRole,\n deletePlatformCloudAccount,\n updatePlatformCloudAccount,\n} from 'containers/DeployManager/actions'\nimport { setCurrentPlatformAccount } from './actions'\nimport {\n selectCurrentPlatformAccount,\n selectCurrentSubAccounts,\n} from './selectors'\nimport { updateSwimlane } from 'containers/SwimlaneDetails/actions'\nimport { PLATFORM_ACCOUNT_TYPES } from 'appConstants'\nimport SectionHeader from 'components/SectionHeader'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport CloudBadge from 'components/CloudBadge'\nimport CloudAccount from 'components/CloudAccount'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport permissionChecker from 'containers/PermissionChecker'\n\nimport ConfSection from './ConfSection'\nimport ConfigureAws from './ConfigureAws'\nimport ConfigureAzure from './ConfigureAzure'\nimport ConfigureGcp from './ConfigureGcp'\nimport ConfActions from './ConfigureCollectorActions'\nimport TextLink from 'components/TextLink'\nimport { selectSwimlanes } from 'containers/SonraiData/selectors'\n\nimport './styles.css'\n\nexport class ConfigureCollector extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n cloudType: props.platformAccount.get('cloudType', ''),\n inputName: props.platformAccount.get('name', ''),\n deleteModalItem: null,\n }\n\n this.styles = {\n container: {\n overflow: 'auto',\n },\n cloudTypes: {\n display: 'flex',\n justifyContent: 'center',\n },\n cloudTypeButton: {\n display: 'flex',\n alignItems: 'center',\n minWidth: '150px',\n justifyContent: 'center',\n margin: '0 1em',\n },\n cloudIcon: { marginRight: '0.5em' },\n nameInput: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n gridColumnGap: '1em',\n alignItems: 'center',\n },\n nameLabel: {\n marginTop: 0,\n },\n addAccountForm: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto auto auto',\n gridColumnGap: '1em',\n gridRowGap: '1em',\n marginBottom: '2em',\n gridTemplateAreas: '\". .\" \". .\" \". submit\"',\n },\n addAccountButtonWrapper: {\n gridArea: 'submit',\n },\n propLabel: {\n fontSize: '1rem',\n fontWeight: '400',\n color: 'rgb(171, 171, 171)',\n paddingBottom: '0.25rem',\n },\n }\n }\n\n componentDidUpdate = oldProps => {\n if (\n oldProps.platformAccount.get('srn') !==\n this.props.platformAccount.get('srn')\n ) {\n this.setState({\n cloudType: this.props.platformAccount.get('cloudType'),\n inputName: this.props.platformAccount.get('name') || '',\n })\n }\n }\n\n setName = e => {\n this.setState({\n inputName: e.target.value,\n })\n }\n\n setCloudType = val => {\n this.setState({\n cloudType: val,\n })\n }\n\n deployRoles = () => {\n this.props.deployRoles({\n accountId: this.props.platformAccount.get('sid'),\n type: this.props.platformAccount.get('cloudType'),\n })\n }\n\n checkAwsRoles = () => {\n this.props.checkAwsRoles(this.props.platformAccount.get('sid'))\n }\n\n checkAwsBotRole = () => {\n this.props.checkAwsBotRole(this.props.platformAccount.get('sid'))\n }\n\n fetchAzureClusterConf = () => {\n this.props.fetchAzureClusterConf({\n accountId: this.props.platformAccount.get('sid'),\n type: this.props.platformAccount.get('cloudType'),\n })\n }\n\n fetchGcpClusterConf = () => {\n this.props.fetchGcpClusterConf({\n accountId: this.props.platformAccount.get('sid'),\n })\n }\n\n createAccount = () => {\n this.props.createPlatformAccount({\n accountName: this.state.inputName,\n cloudType: this.state.cloudType,\n })\n }\n\n renderEdit = () => {\n const isOld = moment(\n this.props.platformAccount.get('lastModified')\n ).isBefore(moment().subtract(30, 'minutes'))\n\n const type = this.props.platformAccount.get('cloudType')\n\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.collectors',\n resourceId: this.props.platformAccount.get('resourceId'),\n })\n return (\n \n \n \n \n \n {this.props.platformAccount.get('name')}\n \n \n View Collector Installation Guide\n \n \n \n \n
\n
\n
\n Last Seen Date{' '}\n \n
\n
\n {this.props.platformAccount.get('lastModified') ? (\n \n {isOld && (\n \n {' '}\n \n )}\n {moment(\n this.props.platformAccount.get('lastModified')\n ).format('lll')}\n \n ) : (\n '-'\n )}\n
\n
\n
\n
\n Last Status{' '}\n \n
\n
\n {this.props.platformAccount.get('status') ? (\n this.props.platformAccount.get('status').includes('ERROR') ? (\n \n Error\n \n ) : (\n 'OK'\n )\n ) : (\n 'Unknown'\n )}\n
\n
\n
\n
\n )\n }\n\n renderNew = () => {\n const isCreated = !!this.props.platformAccount.get('name')\n\n return (\n \n \n Add New Sonrai Intelligence Collector\n \n View Collector Installation Guides\n \n \n \n
\n this.setCloudType(PLATFORM_ACCOUNT_TYPES.AWS)}\n style={this.styles.cloudTypeButton}\n disabled={isCreated}\n >\n \n Amazon\n \n\n this.setCloudType(PLATFORM_ACCOUNT_TYPES.AZURE)}\n style={this.styles.cloudTypeButton}\n disabled={isCreated}\n >\n \n Azure\n \n\n this.setCloudType(PLATFORM_ACCOUNT_TYPES.GCP)}\n style={this.styles.cloudTypeButton}\n disabled={isCreated}\n >\n \n GCP\n \n
\n
\n\n \n \n Name\n \n\n
\n \n {this.props.platformAccount.get('name') ? (\n \n ) : (\n \n {this.props.creatingAccount ? (\n \n ) : (\n 'Save'\n )}\n \n )}\n
\n
\n
\n )\n }\n\n openDeleteAccountModal = data => {\n this.setState({\n deleteModalItem: {\n platformAccountId: data.platformAccountId,\n cloudAccountId: data.data.srn,\n account: data.data.account,\n },\n })\n }\n\n closeDeleteAccountModal = () => {\n this.setState({ deleteModalItem: null })\n }\n\n deletePlatformCloudAccount = () => {\n this.props.deletePlatformCloudAccount(this.state.deleteModalItem)\n this.closeDeleteAccountModal()\n }\n\n render() {\n const orderedSubAccounts = this.props.currentSubAccounts.sortBy(item =>\n moment(item.getIn(['blob', 'runDateTime'])).unix()\n )\n return (\n
\n {this.props.creatingNew ? this.renderNew() : this.renderEdit()}\n {this.state.cloudType === PLATFORM_ACCOUNT_TYPES.AWS ? (\n \n ) : this.state.cloudType === PLATFORM_ACCOUNT_TYPES.AZURE ? (\n \n ) : this.state.cloudType === PLATFORM_ACCOUNT_TYPES.GCP ? (\n \n ) : null}\n {this.state.deleteModalItem && (\n \n \n \n \n \n Cancel\n \n \n Delete\n \n \n \n \n )}\n
\n )\n }\n}\n\nConfigureCollector.propTypes = {\n addAccount: PropTypes.func,\n addingAccount: PropTypes.bool,\n azureClusterConfs: ImmutablePropTypes.map.isRequired,\n gcpClusterConfs: ImmutablePropTypes.map.isRequired,\n checkAwsRoles: PropTypes.func.isRequired,\n checkAwsBotRole: PropTypes.func.isRequired,\n creatingAccount: PropTypes.bool,\n creatingNew: PropTypes.bool,\n createPlatformAccount: PropTypes.func.isRequired,\n currentSubAccounts: ImmutablePropTypes.list.isRequired,\n deletingCloudAccountIds: ImmutablePropTypes.map,\n deletePlatformCloudAccount: PropTypes.func.isRequired,\n deployRoles: PropTypes.func.isRequired,\n deployingRoles: PropTypes.bool,\n editingCloudAccount: PropTypes.bool,\n fetchAzureClusterConf: PropTypes.func,\n fetchingAzureClusterConf: PropTypes.bool,\n fetchingGcpClusterConf: PropTypes.bool,\n fetchGcpClusterConf: PropTypes.func,\n fetchPlatformAccounts: PropTypes.func,\n platformAccount: ImmutablePropTypes.map.isRequired,\n theme: themeShape,\n setCurrentPlatformAccount: PropTypes.func.isRequired,\n swimlanes: ImmutablePropTypes.iterable,\n updateSwimlane: PropTypes.func,\n updatePlatformCloudAccount: PropTypes.func,\n userHasPermission: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n addingAccount: selectAddingAccount,\n creatingAccount: selectCreatingAccount,\n deletingCloudAccountIds: selectDeletingCloudAccountIds,\n platformAccount: selectCurrentPlatformAccount,\n currentSubAccounts: selectCurrentSubAccounts,\n deployingCollector: selectDeployingCollector,\n deployingRoles: selectDeployingRoles,\n editingCloudAccount: selectEditingCloudAccount,\n fetchingAzureClusterConf: selectFetchingAzureClusterConfig,\n azureClusterConfs: selectAzureClusterConfs,\n gcpClusterConfs: selectGcpClusterConfs,\n fetchingGcpClusterConf: selectFetchingGcpClusterConfig,\n swimlanes: selectSwimlanes,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n addAccount,\n checkAwsRoles,\n checkAwsBotRole,\n deletePlatformCloudAccount,\n updatePlatformCloudAccount,\n fetchPlatformAccounts,\n fetchAzureClusterConf,\n fetchGcpClusterConf,\n createPlatformAccount,\n deployRoles,\n deployCollector,\n setCurrentPlatformAccount,\n updateSwimlane,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(\n withConnect,\n permissionChecker,\n themeable\n)(ConfigureCollector)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport moment from 'moment'\n\nimport Icon from 'components/Icon'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport const CollectorStatus = ({ collector, theme }) => {\n if (!collector.get('status') || !collector.get('lastModified')) {\n return (\n \n \n \n )\n }\n\n if (collector.get('status').includes('ERROR')) {\n return (\n \n \n \n )\n }\n\n if (\n moment(collector.get('lastModified')).isBefore(\n moment().subtract(30, 'minutes')\n )\n ) {\n return (\n \n \n \n )\n }\n\n return (\n \n \n \n )\n}\n\nCollectorStatus.propTypes = {\n collector: ImmutablePropTypes.contains({\n status: PropTypes.string,\n lastModified: PropTypes.string,\n }),\n theme: themeShape,\n}\n\nexport default themeable(CollectorStatus)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Alert } from 'reactstrap'\nimport { FormattedMessage } from 'react-intl'\n\nimport GlobalNotifications from 'containers/GlobalNotifications'\nimport RedirectWithoutPermission from 'containers/PermissionChecker/RedirectWithoutPermission'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport WithoutPermission from 'containers/PermissionChecker/WithoutPermission'\n\nimport Hoverable from 'components/Hoverable'\nimport CenterContent from 'components/CenterContent'\nimport CloudBadge from 'components/CloudBadge'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\nimport EmptySection from 'components/EmptySection'\nimport Button from 'components/Button'\nimport BorderedCard from 'components/BorderedCard'\nimport Icon from 'components/Icon'\nimport SectionHeader from 'components/SectionHeader'\nimport injectReducer from 'utils/injectReducer'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport {\n selectDataSources,\n selectError,\n selectLoading as selectLoadingPlatformAccounts,\n} from 'containers/DeployManager/selectors'\nimport {\n fetchPlatformAccounts,\n clearError,\n} from 'containers/DeployManager/actions'\nimport deployManager from 'containers/DeployManager'\n\nimport reducer from './reducer'\nimport messages from './messages'\nimport { selectCurrentPlatformAccount, selectLoading } from './selectors'\nimport { setCurrentPlatformAccount } from './actions'\nimport ConfigureCollector from './ConfigureCollector'\nimport CollectorStatus from './CollectorStatus'\nconst styles = {\n container: {\n display: 'grid',\n gridTemplateColumns: '30% 1fr',\n gridColumnGap: '1em',\n gridRowGap: '0.5em',\n gridTemplateRows: 'auto auto 1fr',\n gridTemplateAreas: '\"header header\" \"error error\" \"left right\"',\n minHeight: '100%',\n padding: '1em',\n overflow: 'hidden',\n height: '100%',\n },\n error: {\n gridArea: 'error',\n },\n launchContainer: {\n gridArea: 'right',\n },\n header: {\n gridArea: 'header',\n display: 'grid',\n gridTemplateColumns: '1fr auto auto',\n gridColumnGap: '1em',\n },\n sourceList: {\n gridArea: 'left',\n overflow: 'auto',\n },\n cloudBadge: {\n marginRight: '0.3em',\n },\n platformAccount: {\n borderTop: '1px solid #eee',\n display: 'flex',\n alignItems: 'center',\n padding: '0.7em',\n },\n}\n\nexport class Deploy extends React.Component {\n state = {\n creatingNew: false,\n }\n\n componentDidMount() {\n this.props.fetchPlatformAccounts()\n }\n\n renderDeployError = () => {\n if (!this.props.deployError) {\n return null\n }\n\n return (\n \n {this.props.deployError}\n \n )\n }\n\n selectPlatformAccount = id => {\n this.props.setCurrentPlatformAccount(id)\n this.setState({\n creatingNew: false,\n })\n }\n\n createNew = () => {\n this.props.setCurrentPlatformAccount(null)\n this.setState({\n creatingNew: true,\n })\n }\n\n renderDataSource = dataSource => {\n return (\n \n this.selectPlatformAccount(dataSource.get('srn'))}\n style={{\n ...styles.platformAccount,\n display: 'grid',\n gridTemplateColumns: '1fr auto auto',\n backgroundColor:\n this.props.currentPlatformAccount.get('srn') ===\n dataSource.get('srn')\n ? this.props.theme.highlight\n : 'transparent',\n }}\n >\n
\n \n \n \n {dataSource.get('name')}\n
\n\n \n \n {'('}\n \n {')'}\n \n \n
\n \n
\n \n
\n )\n }\n\n renderSourceList = () => {\n if (this.props.loading || this.props.loadingPlatformAccounts) {\n return (\n \n \n \n )\n }\n\n if (this.props.dataSources.isEmpty()) {\n return (\n \n

No collectors are configured

\n
\n )\n }\n\n return this.props.dataSources\n .sortBy(row => row.get('createdDate'))\n .map(this.renderDataSource)\n }\n\n render() {\n return (\n
\n \n
\n \n {' '}\n {!this.props.loading && (\n ({this.props.dataSources.size})\n )}\n \n\n
\n \n
\n
\n `/org/${org}/`}\n >\n \n \n
\n
\n
{this.renderDeployError()}
\n \n {this.renderSourceList()}\n \n\n {(this.state.creatingNew ||\n !this.props.currentPlatformAccount.isEmpty()) && (\n \n )}\n
\n )\n }\n}\n\nDeploy.propTypes = {\n clearError: PropTypes.func,\n currentPlatformAccount: ImmutablePropTypes.map.isRequired,\n dataSources: ImmutablePropTypes.list.isRequired,\n deployError: PropTypes.string,\n fetchPlatformAccounts: PropTypes.func.isRequired,\n loading: PropTypes.bool,\n loadingPlatformAccounts: PropTypes.bool,\n setCurrentPlatformAccount: PropTypes.func.isRequired,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n currentPlatformAccount: selectCurrentPlatformAccount,\n dataSources: selectDataSources,\n deployError: selectError,\n loading: selectLoading,\n loadingPlatformAccounts: selectLoadingPlatformAccounts,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n clearError,\n fetchPlatformAccounts,\n setCurrentPlatformAccount,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\nconst withReducer = injectReducer({ key: 'deployConfig', reducer })\n\nexport default compose(\n withReducer,\n withConnect,\n deployManager,\n themeable\n)(Deploy)\n"],"sourceRoot":""}