{"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/BotManagement/BotManagementFilterPanel.js","webpack:///./app/containers/BotManagement/CreateBotModal.js","webpack:///./app/containers/BotManagement/ExemptedIdentityModal.js","webpack:///./app/containers/BotManagement/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","BotManagementFilterPanel","state","cloud","filters","botStatus","status","style","padding","width","display","alignItems","justifyContent","fontWeight","fontSize","TextLink","cursor","color","onClick","handleClearFilters","hasFiltersApplied","margin","SelectBar","isClearable","placeholder","value","onChange","setState","options","label","closeFilterPanel","Button","_","isEqual","handleFilterChange","Label","for","Icon","fa","name","spin","CreateBotModal","sourceUrl","modalBody","maxHeight","overflow","error","theme","red","success","validateSourceUrl","url","isURLFormatted","isValidURL","canSubmit","warningText","endOfStr","substr","lastIndexOf","includes","warn","sourceType","clearSourceUrlValidation","prevProps","prevState","isValid","handleClose","toggle","focused","checkURL","isValidating","canAdd","isNotValid","Modal","isOpen","size","onClosed","ModalHeader","ModalBody","styles","Input","onFocus","onBlur","type","e","target","ModalFooter","handleAddBot","themeable","cloudOptions","IHelp","info","infoMsg","SquareLoadingAnimation","ExemptedIdentityModal","newExemptedIds","params","newCloudType","errorMsg","msg","setError","setTimeout","length","newExemptItems","trim","split","add","resourceIds","cloudType","exemptedIdentities","toJS","map","id","delete","deleting","startsWith","isEmpty","getExemptedIdentities","adding","Alert","closeError","gridTemplateColumns","columnGap","invalid","idsAreValid","handleCloudChange","isDisabled","marginTop","addExemptedIDs","height","loading","DataTable","autosize","customColumnConfig","flex","minWidth","pinned","headerName","enableRowGroup","menuTabs","suppressMenu","cellRendererFramework","primary","deleteExemptedIdentity","data","getData","SectionHeader","BotManagement","oldState","isModalOpen","isExemptedModalOpen","srn","pathname","search","qs","stringify","botId","currentState","showAddPopover","newVisibility","showFilterPanel","bots","bot","title","source","isCustom","lastSync","marginLeft","listStyleType","listStylePosition","preloadSearch","position","checkboxSelectedRows","item","handleDeleteBots","evnt","rows","api","getSelectedRows","getBots","container","gridTemplateRows","header","headerExt","flexDirection","description","content","buttonContainer","exists","keys","find","getHelpIcon","toggleExemptedModal","outline","isCreatingBot","WithPermission","org","toggleCreateBotModal","Card","supressSelectAll","hasCheckBoxes","selectionChanged","handleSelectionChange","bulkActions","iconName","bulkActionWorking","autoSize","customFilter","Popover","onToggle","onFilterPanelToggle","checkboxSelection","checkboxRowTest","hide","CloudBadge","toLowerCase","window","open","getStatusColor","hiddenColumns","onDoubleClickRow","handleNavToBotDetail","getFilteredBots","isLoading","sourceUrlValidation","createBot","exemptedIdentitiesLoading","exemptedIdentitiesError","addExemptedIdentities","exemptedIdentitiesAdding","exemptedIdentitiesDeleting","deleteExemptedIdentities","setExemptedIdentitiesError","mapStateToProps","createStructuredSelector","selectBots","selectIsCreatingBot","selectSourceUrlValidation","selectExemptedIdentities","selectExemptedIdentitiesLoading","selectExemptedIdentitiesError","selectExemptedIdentitiesAdding","selectExemptedIdentitiesDeleting"],"mappings":"87CAQO,IAAMA,0BAAb,qF,uJAAA,8I,KAAA,K,MAAA,qH,8FAAA,8B,MAS8B,WAC1B,IAAK,MAAKC,MAAMC,YAAYC,IAAI,WAC9B,GAAI,MAAKF,MAAMG,iBAAkB,CAC/B,IAAIC,QAAS,EACb,MAAKJ,MAAMG,iBAAiBE,SAAQ,SAAAC,YAEhC,MAAKN,MAAMO,kBAAkB,CAC3BC,eAAgBF,WAAWE,eAC3BC,WAAYH,WAAWG,WACvBC,UAAWJ,WAAWI,cAGxBN,QAAS,MAGRA,QACH,MAAKJ,MAAMW,KAAK,MAAKX,MAAMY,SAGP,MAAKZ,MAAMO,kBAAkB,CACjDC,eAAgB,MAAKR,MAAMQ,eAC3BC,WAAY,MAAKT,MAAMS,WACvBC,UAAW,MAAKV,MAAMU,aAGtB,MAAKV,MAAMW,KAAK,MAAKX,MAAMY,M,IAlCrC,+B,0GAAA,M,uCAAA,O,2UAAA,uC,YAAA,2B,WAAA,2CAEIC,KAAKC,8BAFT,2CAMID,KAAKC,8BANT,+BAyCI,OAAO,U,4GAzCX,2BAA+CC,8CA6C/ChB,0BAA0BiB,aAAe,CACvCJ,GAAI,uBA6BN,IAAMK,YAAcC,yDAAQ,MAAM,SAAAC,UAAQ,OACxCC,8DAAmB,CAAET,+DAAQQ,aAGhBE,yEACbC,sCACAL,YAFaI,CAGbtB,4B,2EC1FF,iwBAMIwB,UAAY,CACdC,SAAU,kDAAUC,KACpBC,IAAK,kDAAUC,KACfC,MAAO,kDAAUD,KACjBE,OAAQ,kDAAUF,KAClBG,SAAU,kDAAUH,KACpBI,IAAK,sCACLC,UAAW,kDAAUC,OACrBC,UAAW,kDAAUC,QAMnBC,UAAY,SAAmBpC,OACjC,IAAIgC,UAAYhC,MAAMgC,UAClBE,UAAYlC,MAAMkC,UAClBR,IAAM1B,MAAM0B,IACZI,SAAW9B,MAAM8B,SACjBF,MAAQ5B,MAAM4B,MACdC,OAAS7B,MAAM6B,OACfQ,IAAMrC,MAAM+B,IACZO,WAAa,+FAA8BtC,MAAO,CAAC,YAAa,YAAa,MAAO,WAAY,QAAS,SAAU,QAEnHuC,QAAU,8CAAgB,kDAAWP,YAAWN,KAAM,MAAeE,MAAQ,aAAe,gBAAcA,QAASC,SAAS,uBAA6BD,QAASE,WAAW,YAAqBI,WAMtM,MAJY,aAARG,MACFC,WAAWR,SAAWA,UAGjB,6CAAMU,cAAcH,IAAK,0EAAS,GAAIC,WAAY,CACvDN,UAAWO,YAIfH,UAAUb,UAAYA,UACtBa,UAAUpB,aA1BS,CACjBe,IAAK,OA0BQ,iC,2EC3Cf,iwBAMIR,UAAY,CACdC,SAAU,kDAAUC,KACpBM,IAAK,sCACLC,UAAW,kDAAUC,OACrBC,UAAW,kDAAUC,OACrBM,MAAO,kDAAUd,KACjBe,QAAS,kDAAUf,MAEjBX,aAAe,CACjBe,IAAK,MACLU,WAAOE,GAGLC,aAAe,SAAsB5C,OACvC,IAAIgC,UAAYhC,MAAMgC,UAClBE,UAAYlC,MAAMkC,UAClBO,MAAQzC,MAAMyC,MACdC,QAAU1C,MAAM0C,QAChBL,IAAMrC,MAAM+B,IACZO,WAAa,+FAA8BtC,MAAO,CAAC,YAAa,YAAa,QAAS,UAAW,QAEjG6C,UAAYH,QAAU,UAAY,WAClCH,QAAU,8CAAgB,kDAAWP,UAAWS,MAAQ,SAAWI,UAAY,WAAaA,WAAYX,WAC5G,OAAO,6CAAMM,cAAcH,IAAK,0EAAS,GAAIC,WAAY,CACvDN,UAAWO,YAIfK,aAAarB,UAAYA,UACzBqB,aAAa5B,aAAeA,aACb,oC,mxFCwEA8B,uC,qBAnGb,kCAAY9C,OAAO,iB,8HAAA,iCACjB,0FAAMA,SAED+C,MAAQ,CACXC,MAAOhD,MAAMiD,QAAQD,MACrBE,UAAWlD,MAAMiD,QAAQE,QALV,M,gfAQV,4BACsBtC,KAAKkC,MAA1BC,MADD,YACCA,MAAOE,UADR,YACQA,UACf,OACE,YAAKE,MAAO,CAAEC,QAAS,SAAUC,MAAO,eAAxC,EACE,YACEF,MAAO,CACLG,QAAS,OACTC,WAAY,SACZC,eAAgB,uBAJpB,EAOE,YAAKL,MAAO,CAAEM,WAAY,MAAOC,SAAU,gBAA3C,cACA,KAACC,SAAA,EAAD,CACER,MAAO,CAAEO,SAAU,SAAUE,OAAQ,WACrCC,MAAM,UACNC,QAASlD,KAAKb,MAAMgE,mBACpBlC,UAAWjB,KAAKb,MAAMiE,wBAJxB,oBASF,YAAKb,MAAO,CAAEc,OAAQ,mBAAtB,EACE,YAAKd,MAAO,CAAEM,WAAY,aAA1B,aACA,KAACS,UAAA,EAAD,CACEC,aAAW,EACXC,YAAY,oBACZC,MAAOzD,KAAKkC,MAAMC,MAClBuB,SAAU,SAAAvB,OAAK,OAAI,OAAKwB,SAAS,CAAExB,eACnCyB,QAAS,CACP,CAAEC,MAAO,MAAOJ,MAAO,OACvB,CAAEI,MAAO,QAASJ,MAAO,SACzB,CAAEI,MAAO,MAAOJ,MAAO,WAI7B,YAAKlB,MAAO,CAAEc,OAAQ,mBAAtB,EACE,YAAKd,MAAO,CAAEM,WAAY,aAA1B,cACA,KAACS,UAAA,EAAD,CACEC,aAAW,EACXC,YAAY,qBACZC,MAAOzD,KAAKkC,MAAMG,UAClBqB,SAAU,SAAArB,WAAS,OAAI,OAAKsB,SAAS,CAAEtB,uBACvCuB,QAAS,CACP,CAAEC,MAAO,KAAMJ,MAAO,MACtB,CAAEI,MAAO,iBAAkBJ,MAAO,sBAIxC,YACElB,MAAO,CACLG,QAAS,OACTE,eAAgB,WAChBD,WAAY,SACZF,MAAO,cALX,EAQE,KAACM,SAAA,EAAD,CACER,MAAO,CACLO,SAAU,SACVE,OAAQ,UACRC,MAAO,UACPI,OAAQ,0BAEVH,QAAS,kBAAM,OAAK/D,MAAM2E,0BAP5B,WAWA,KAACC,OAAA,EAAD,CACE9C,SAAU+C,iBAAEC,QAAQjE,KAAKb,MAAMiD,QAAS,CACtCD,YACAG,OAAQD,YAEVY,MAAM,UACNC,QAAS,kBAAM,OAAK/D,MAAM+E,mBAAmB,CAAE/B,YAAOE,6BANxD,kB,sIA5E6BnC,iB,67EC6G3B,mBAACiE,MAAA,EAAD,CAAOC,IAAI,mBAAX,gB,MAwCgB,mBAACC,KAAA,EAAD,CAAMC,IAAE,EAACC,KAAK,OAAOC,MAAI,IAnJ/CC,8B,wpBACI,CACNC,UAAW,K,qEAEJ,CACPC,UAAW,CACTC,UAAW,OACXC,SAAU,QAEZC,MAAO,CACLhC,SAAU,SACVD,WAAY,MACZQ,OAAQ,8BACRJ,MAAO,MAAK9D,MAAM4F,MAAMC,KAE1BC,QAAS,CACPnC,SAAU,SACVD,WAAY,MACZQ,OAAQ,iC,4EAIG,WACb,MAAKlE,MAAM+F,kBAAkB,CAAEC,IAAK,MAAKjD,MAAMwC,e,wEA6BtC,SAAAS,KACT,IAAMC,eAAiBC,sBAAWF,KAQlC,GAPKC,gBACH,MAAKzB,SAAS,CACZ2B,WAAW,EACXC,YAAa,sBACbtC,MAAO,MAAK9D,MAAM4F,MAAMC,MAGxBI,eAAgB,CAClB,IAAMI,SAAWL,IAAIM,OAAON,IAAIO,YAAY,KAAO,GAChCF,SAASG,SAAS,KAElB,kBAAbH,SACF,MAAK7B,SAAS,CAAE2B,WAAW,IAE3B,MAAK3B,SAAS,CACZ4B,YAAa,uCACbD,WAAW,EACXrC,MAAO,MAAK9D,MAAM4F,MAAMC,MAI5B,MAAKrB,SAAS,CACZ4B,YAAa,qDACbD,WAAW,EACXrC,MAAO,MAAK9D,MAAM4F,MAAMa,W,2EAMlB,WACZ,MAAKjC,SAAS,CACZkC,WAAY,KACZnB,UAAW,KAEb,MAAKvF,MAAM2G,8B,0fA/DMC,UAAWC,gBACDlE,IAAvB9B,KAAKb,MAAM8G,UACTD,UAAUtB,YAAc1E,KAAKkC,MAAMwC,WACrC1E,KAAKb,MAAM2G,2BAETC,UAAUE,UAAYjG,KAAKb,MAAM8G,SAAWjG,KAAKb,MAAM8G,UACzDjG,KAAKkG,cACLlG,KAAKb,MAAMgH,WAIbH,UAAUI,UACTpG,KAAKkC,MAAMkE,SACa,KAAzBpG,KAAKkC,MAAMwC,WAEX1E,KAAKqG,SAASrG,KAAKkC,MAAMwC,YAEtBsB,UAAUI,SAAWpG,KAAKkC,MAAMkE,SACnCpG,KAAK2D,SAAS,CACZ4B,iBAAazD,EACbwD,eAAWxD,EACXmB,WAAOnB,M,+BA6CJ,4BACgD9B,KAAKkC,MAApDwC,UADD,YACCA,UAAW0B,QADZ,YACYA,QAASb,YADrB,YACqBA,YAAaD,UADlC,YACkCA,UADlC,YAE2BtF,KAAKb,MAA/B8G,QAFD,YAECA,QAASK,aAFV,YAEUA,aACXC,OAAuB,KAAd7B,YAAqB4B,eAAiBF,SAAWd,UAC1DkB,gBAAyB1E,IAAZmE,UAAqC,IAAZA,QAC5C,OACE,mBAACQ,MAAA,EAAD,CACEC,OAAQ1G,KAAKb,MAAMuH,OACnBP,OAAQnG,KAAKb,MAAMgH,OACnBQ,KAAK,KACLC,SAAU5G,KAAKkG,kBAJjB,EAME,mBAACW,YAAA,EAAD,CAAaV,OAAQnG,KAAKb,MAAMgH,aAAhC,gBACA,mBAACW,UAAA,EAAD,CAAWvE,MAAOvC,KAAK+G,OAAOpC,gBAA9B,EACE,0BAAKpC,MAAO,CAAEc,OAAQ,6BAAtB,qBAEGkC,aACC,0BACEhD,MAAO,CACLU,MAAOjD,KAAKkC,MAAMe,MAClBH,SAAU,gBAHd,OAMKyC,aAGP,0BACEhD,MAAO,CACLG,QAAS,OACTC,WAAY,SACZC,eAAgB,uBAJpB,EAOE,mBAACoE,MAAA,EAAD,CACEC,QAAS,kBAAM,OAAKtD,SAAS,CAAEyC,SAAS,KACxCc,OAAQ,kBAAM,OAAKvD,SAAS,CAAEyC,SAAS,KACvCe,KAAK,OACLzD,SAAU,SAAA0D,GAAC,OAAI,OAAKzD,SAAS,CAAEe,UAAW0C,EAAEC,OAAO5D,SACnDA,MAAOzD,KAAKkC,MAAMwC,aAGrB8B,YACC,0BAAKjE,MAAOvC,KAAK+G,OAAOjC,YAAxB,iCAIN,mBAACwC,YAAA,EAAD,UACE,mBAACvE,SAAA,EAAD,CAAUE,MAAM,UAAUC,QAASlD,KAAKb,MAAMgH,aAA9C,YAGA,mBAACpC,OAAA,EAAD,CACE9C,UAAWsF,OACXtD,MAAM,UACNC,QAASlD,KAAKuH,mBAHhB,EAKGjB,aAAe,MAA+B,kB,wJAnJ9BpG,iBAqKdsH,iDAAU/C,+B,o4ECzJzB,I,iCAAMgD,aAAe,CAAC,CAAEhE,MAAO,MAAOI,MAAO,Q,0BAsHjC,oJ,2BAWE,yE,MACA,0CACE,0BAAC6D,MAAA,EAAD,CACEjF,MAAM,QACNkF,MAAI,EACJC,QAAO,+I,MA6DP,0BAACvD,KAAA,EAAD,CAAMC,IAAE,EAACE,MAAI,EAACD,KAAK,S,MAEnB,0BAACF,KAAA,EAAD,CAAMC,IAAE,EAACC,KAAK,S,MAKpB,yE,MAWM,0BAACsD,uBAAA,EAAD,IAnNZC,4C,qBAsBJ,+BAAY3I,OAAO,U,UAAA,O,8HAAA,6B,KACjB,K,KAAA,sEAAMA,OAAN,O,oIADiB,gGArBX,CACN4I,eAAgB,KAoBC,iGAlBV,CACPpD,UAAW,CACTC,UAAW,OACXC,SAAU,QAEZC,MAAO,CACLhC,SAAU,SACVD,WAAY,MACZQ,OAAQ,8BACRJ,MAAO,MAAK9D,MAAM4F,MAAMC,KAE1BC,QAAS,CACPnC,SAAU,SACVD,WAAY,MACZQ,OAAQ,iCAIO,6GAoBC,SAAA2E,QAClB,MAAKrE,SAAS,CAAEsE,aAAcD,YArBb,sGAwBN,WACX,MAAKrE,SAAS,CAAEuE,SAAU,UAzBT,oGA4BR,SAAAC,KACT,MAAKxE,SAAS,CACZuE,SAAUC,MAEZ,MAAKhJ,MAAMiJ,SAAS,CAAEtD,MAAO,OAC7BuD,YAAW,WACT,MAAK1E,SAAS,CAAEuE,SAAU,SACzB,QAnCc,0GAsCF,WACf,GAAI,MAAKhG,MAAM6F,eAAeO,OAAS,EAAG,CACxC,IAAMC,eAAiB,MAAKrG,MAAM6F,eAAeS,OAAOC,MAAM,KAC9D,MAAKtJ,MAAMuJ,IAAI,CACbC,YAAaJ,eACbK,UAAW,MAAK1G,MAAM+F,aAAaxE,YA3CtB,mGAgDT,WACR,OAAO,MAAKtE,MAAM0J,mBAAmBC,OAAOC,KAAI,SAAAC,IAAE,MAAK,CACrDpJ,WAAYoJ,GAAGpJ,WACfgJ,UAAWI,GAAG7G,MACd8G,OAAQD,GAAGpJ,kBApDI,kHAwDM,SAAAA,YAClB,MAAKT,MAAM+J,SAAS7J,IAAIO,aAC3B,MAAKT,MAAM8J,OAAO,CAAEN,YAAa,CAAC/I,iBA1DnB,uGA8DL,WACZ,IAAIqG,SAAU,EAEd,IAAK,MAAK/D,MAAM6F,eACd,OAAO9B,QAG6B,QAAlC,MAAK/D,MAAM+F,aAAaxE,OACH,MAAKvB,MAAM6F,eAAeS,OAAOC,MAAM,KAC/CjJ,SAAQ,SAAAwJ,IAChBA,GAAGG,WAAW,UACjBlD,SAAU,MAKhB,OAAOA,WA5EP,MAAK/D,MAAQ,CACXgG,SAAU,KACVD,aAAcR,aAAa,IAEzBtI,MAAM0J,mBAAmBO,WAC3BjK,MAAMkK,wBAPS,M,ygBAWAtD,UAAWC,YACxBD,UAAUuD,QAAWtJ,KAAKb,MAAMmK,QAAWtJ,KAAKb,MAAM2F,OACxD9E,KAAK2D,SAAS,CAAEoE,eAAgB,KAE9B/H,KAAKb,MAAM2F,QAAUkB,UAAUkC,UACjClI,KAAKoI,SAASpI,KAAKb,MAAM2F,S,+BAiEpB,gBACP,OACE,0BAAC2B,MAAA,EAAD,CAAOC,OAAQ1G,KAAKb,MAAMuH,OAAQP,OAAQnG,KAAKb,MAAMgH,OAAQQ,KAAK,WAAlE,EACE,0BAACE,YAAA,EAAD,CAAaV,OAAQnG,KAAKb,MAAMgH,aAAhC,2BAGA,0BAACW,UAAA,EAAD,CAAWvE,MAAOvC,KAAK+G,OAAOpC,gBAA9B,EACE,iCAAKpC,MAAO,CAAEc,OAAQ,6BAAtB,EACGrD,KAAKkC,MAAMgG,UACV,0BAACqB,MAAA,EAAD,CAAOtG,MAAM,SAASkD,OAAQnG,KAAKwJ,iBAAnC,EACGxJ,KAAKkC,MAAMgG,UAHlB,0BAUE,iCACE3F,MAAO,CACLG,QAAS,OACT+G,oBAAqB,WACrBC,UAAW,gBAJf,oCAmBA,iCACEnH,MAAO,CACLG,QAAS,OACT+G,oBAAqB,aACrBC,UAAW,cAJf,EAOE,0CACE,0BAACnI,UAAA,EAAD,UACE,0BAACyF,MAAA,EAAD,CACEG,KAAK,OACLzD,SAAU,SAAA0D,GAAC,OACT,OAAKzD,SAAS,CAAEoE,eAAgBX,EAAEC,OAAO5D,SAE3CA,MAAOzD,KAAKkC,MAAM6F,eAClB9G,SAAUjB,KAAKb,MAAMmK,OACrB9F,YAAW,+DACXmG,SAAU3J,KAAK4J,gBAEjB,0BAAC7H,aAAA,EAAD,CAAc4H,SAAO,QAArB,EACqC,QAAlC3J,KAAKkC,MAAM+F,aAAaxE,MACrB,0CACA,MAIV,0CACE,0BAAC,mCAAD,CACEG,QAAS6D,aACT/D,SAAU1D,KAAK6J,kBACfrG,YAAW,yBACXsG,WAAY9J,KAAKb,MAAMmK,OACvB7F,MAAOzD,KAAKkC,MAAM+F,iBAIxB,iCACE1F,MAAO,CACLG,QAAS,OACTE,eAAgB,WAChBmH,UAAW,eAJf,EAOE,0BAAChG,OAAA,EAAD,CACE9C,SACEjB,KAAKb,MAAMmK,SACVtJ,KAAKkC,MAAM6F,iBACX/H,KAAKkC,MAAM+F,eACXjI,KAAK4J,cAER3G,MAAM,UACNC,QAASlD,KAAKgK,qBARhB,EAUGhK,KAAKb,MAAMmK,OAAX,YAVH,oBAxEJ,MA2FE,iCAAK/G,MAAO,CAAE0H,OAAQ,QAASF,UAAW,aAA1C,EACG/J,KAAKb,MAAM+K,QACV,iCACE3H,MAAO,CACLG,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBqH,OAAQ,cALZ,SAWA,0BAACE,UAAA,EAAD,CACEC,UAAU,EACVC,mBAAoB,CAClBzK,WAAY,CACV0K,KAAM,GAERrB,OAAQ,CACNxG,MAAO,IACP8H,SAAU,IACVC,OAAQ,QACRC,WAAY,GACZC,gBAAgB,EAChBC,SAAU,GACVC,cAAc,EACdC,sBAAuB,SAAA7C,QACrB,OACE,0BAACjF,SAAA,EAAD,CACEE,MAAM,UACNV,MAAO,CACLU,MAAO,OAAK9D,MAAM4F,MAAM+F,SAE1B5H,QAAS,WACP,OAAK6H,uBAAuB/C,OAAOgD,KAAK/B,SAE1ChI,SAAU,OAAK9B,MAAM+J,SAAS7J,IAC5B2I,OAAOgD,KAAKpL,kBAThB,eAkBRoL,KAAMhL,KAAKiL,eAMrB,0BAAC3D,YAAA,EAAD,UACE,0BAACvE,SAAA,EAAD,CAAUE,MAAM,UAAUC,QAASlD,KAAKb,MAAMgH,aAA9C,kB,6KA/P0BjG,iBAuRrBsH,wDAAUM,6C,uhEClHb,gOAGkE,K,mBAW9D,qD,mBACA,oD,mBAGJ,gCACE,yDADF,6R,mBAOA,gCACE,wDADF,gT,MAiEJ,kBAAC5I,0BAAA,EAAD,CAA2BS,eAAe,c,MAIpC,kBAACuL,cAAA,EAAD,kB,OAmBE,mCACE,kBAAC7G,KAAA,EAAD,CAAMC,IAAE,EAACC,KAAK,SADhB,+B,OAmBE,mCACE,kBAACF,KAAA,EAAD,CAAMC,IAAE,EAACC,KAAK,SADhB,YA9QZ4G,4B,qBACJ,uBAAYhM,OAAO,U,UAAA,O,8HAAA,qB,KACjB,K,KAAA,sDAAMA,OAAN,O,oHADiB,gGAyDI,WACrB,MAAKwE,UAAS,SAAAyH,UAAQ,MAAK,CAAEC,aAAcD,SAASC,mBA1DnC,+FA6DG,WACpB,MAAK1H,UAAS,SAAAyH,UAAQ,MAAK,CACzBE,qBAAsBF,SAASE,2BA/DhB,gGAmEI,eAAa,IAAVC,IAAU,KAAVA,IACxB,MAAKpM,MAAMW,KAAK,CACd0L,SAAU,gCACVC,OAAQC,uBAAGC,UAAU,CACnBC,MAAOL,WAvEM,6FA4EC,WAClB,MAAK5H,UAAS,SAAAkI,cAAY,MAAK,CAC7BC,gBAAiBD,aAAaC,sBA9Ef,+FAkFG,SAAAC,eACpB,MAAKpI,SAAS,CACZqI,gBAAiBD,mBApFF,8FAwFE,gBAA0B,IACvC3J,QAAU,CAAED,MAD2B,MAAvBA,MACGG,OADoB,MAAhBD,WAE7B,MAAKsB,SAAS,CAAEvB,qBA1FC,8FA6FE,WAEnB,MAAKuB,SAAS,CACZvB,QAFc,CAAED,MAAO,KAAMG,OAAQ,MAGrC0J,iBAAiB,OAjGF,2FAqGD,WAGhB,OAFa,MAAK7M,MAAM8M,KAAK5M,IAAI,QAAQyJ,OAE7BC,KAAI,SAAAmD,KAAG,MAAK,CACtBC,MAAOD,IAAIC,MACXhF,KAAM+E,IAAI/E,KACVhF,MAAO+J,IAAI/J,MACXiK,OAAQF,IAAIG,SAAW,SAAW,SAClC/J,OAAQ4J,IAAI5J,OACZgK,SAAUJ,IAAII,SACd5H,UAAWwH,IAAI/G,IACfoG,IAAKW,IAAIX,IACT3L,WAAYsM,IAAItM,kBAjHD,0FAqHF,SAAA0C,QACf,MAAc,kBAAVA,OACK,MAAKnD,MAAM4F,MAAMC,IAEjB,MAAK7F,MAAM4F,MAAME,WAzHT,uFA6HL,kBACZ,yBAAK1C,MAAO,CAAEC,QAAS,MAAO+J,WAAY,gBAA1C,EACE,kBAAC7E,MAAA,EAAD,CACEsB,GAAE,oBACFvG,MAAM,QACNkF,MAAI,EACJC,QACE,yBACErF,MAAO,CACLC,QAAS,iBAFb,qBAUE,2DAEE,wBACED,MAAO,CACLiK,cAAe,OACfC,kBAAmB,SACnBpJ,OAAQ,sBAJZ,0CAZJ,sCAsCE,oGAGE,kBAACN,SAAA,EAAD,CACEhD,GAAI,CACFyL,SAAU,kBACVC,OAAQC,uBAAGC,UAAU,CACnBe,cAAe,gBAJrB,wBAHF,+BAiBJC,SAAS,cA3LI,4FAgMA,WAEjB,IAAMV,KAAO,MAAK/J,MAAM0K,qBAAqB7D,KAAI,SAAA8D,MAAI,OAAIA,KAAKtB,OAC9D,MAAK5H,SAAS,CACZiJ,qBAAsB,KAExB,MAAKzN,MAAM2N,iBAAiB,CAAEb,eAtMb,iGAyMK,SAAAc,MACtB,IAAMC,KAAOD,KAAKE,IAAIC,mBAAqB,GAC3C,MAAKvJ,SAAS,CAAEiJ,qBAAsBI,UA3MrB,2FA8MD,SAAAhF,QAEhB,QAAKA,OAAOgD,MAIL,MAAK7L,MAAMO,kBAAkB,CAClCC,eAAgB,YAChBC,WAAYoI,OAAOgD,KAAKpL,gBAnN1BT,MAAMgO,QAAQ,CAAE/K,QAAS,KAEzB,MAAKF,MAAQ,CACXmJ,aAAa,EACbC,qBAAqB,EACrBU,iBAAiB,EACjB5J,QAAS,CACPD,MAAO,KACPG,OAAQ,MAEVsK,qBAAsB,IAGxB,MAAK7F,OAAS,CACZqG,UAAW,CACT1K,QAAS,OACT2K,iBAAkB,WAClB7K,QAAS,OACTC,MAAO,OACPwH,OAAQ,QAEVqD,OAAQ,CACN5K,QAAS,OACT+G,oBAAqB,iBAEvB8D,UAAW,CACT7K,QAAS,OACT8K,cAAe,UAEjBrB,MAAO,CACLrJ,SAAU,SACVO,OAAQ,yBAEVoK,YAAa,CACXxK,MAAO,sBAETyK,QAAS,CACPrK,OAAQ,aAEVsK,gBAAiB,CACfjL,QAAS,OACTC,WAAY,aACZH,QAAS,wBA7CI,M,ifAkDAuD,UAAWC,WAC5B,IAAKhC,iBAAEC,QAAQ+B,UAAU5D,QAASpC,KAAKkC,MAAME,SAAU,KAC7CA,QAAYpC,KAAKkC,MAAjBE,QACRpC,KAAKb,MAAMgO,QAAQ,CAAE/K,qB,+BAqKhB,gBACDgB,kBAAoBwK,sBACxB5J,iBAAE6J,KAAK7N,KAAKkC,MAAME,SAAS0L,MACzB,SAAAvJ,MAAI,OAAKP,iBAAEoF,QAAQ,OAAKlH,MAAME,QAAQmC,WAI1C,OACE,yBAAKhC,MAAOvC,KAAK+G,OAAOqG,gBAAxB,QAEE,yBAAK7K,MAAOvC,KAAK+G,OAAOuG,aAAxB,EACE,yBAAK/K,MAAOvC,KAAK+G,OAAOwG,gBAAxB,EACE,yBAAKhL,MAAO,CAAEG,QAAS,cAAvB,QAEG1C,KAAK+N,eAER,yBAAKxL,MAAOvC,KAAK+G,OAAO0G,kBAAxB,oMAMF,yBAAKlL,MAAOvC,KAAK+G,OAAO4G,sBAAxB,EACE,kBAAC5J,OAAA,EAAD,CACEd,MAAM,UACNC,QAASlD,KAAKgO,oBACdC,SAAO,EACPhN,SAAUjB,KAAKb,MAAM+O,oBAJvB,EAMGlO,KAAKb,MAAM+O,cACV,kBAAC7J,KAAA,EAAD,CAAMC,IAAE,EAACE,MAAI,EAACD,KAAK,OAAOhC,MAAO,CAAEO,SAAU,YAD9C,SASL,yBAAKP,MAAOvC,KAAK+G,OAAO4G,sBAAxB,EACE,kBAACQ,eAAA,EAAD,CACExO,eAAe,YACfC,WAAY,qBAAGwO,IAAH,OAAGA,IAAH,qBAAqBA,IAArB,YAFd,EAIE,kBAACrK,OAAA,EAAD,CACEd,MAAM,UACNC,QAASlD,KAAKqO,qBACdpN,SAAUjB,KAAKb,MAAM+O,oBAHvB,EAKGlO,KAAKb,MAAM+O,cACV,kBAAC7J,KAAA,EAAD,CAAMC,IAAE,EAACE,MAAI,EAACD,KAAK,OAAOhC,MAAO,CAAEO,SAAU,YAD9C,WAWT,yBAAKP,MAAOvC,KAAK+G,OAAO2G,cAAxB,EACE,kBAACY,KAAA,EAAD,CAAMpE,QAASlK,KAAKb,MAAM8M,KAAK5M,IAAI,mBAAnC,EACE,kBAACiP,KAAA,EAAD,UACE,kBAACnE,UAAA,EAAD,CACEoE,kBAAgB,EAChBC,eAAa,EACbC,iBAAkBzO,KAAK0O,sBACvB9B,qBAAsB5M,KAAKkC,MAAM0K,qBACjC+B,YAAa,CACX,kBAAC,gBAAD,CAEEhP,eAAe,YACfiP,SAAU,QACV1L,QAASlD,KAAK8M,iBACd7L,SAAqD,IAA3CjB,KAAKkC,MAAM0K,qBAAqBtE,OAC1CrF,MAAM,QALF,SADN,kBAWF4L,mBAAmB,EACnBC,UAAQ,EACRC,aAAc,kBACZ,kBAACC,QAAA,EAAD,CACEtI,OAAQ,OAAKxE,MAAM8J,gBACnBiD,SAAU,OAAKC,oBACfvC,SAAS,oBAHX,EAKE,kBAACqC,QAAA,EAAD,UACE,yBAAKzM,MAAO,CAAEc,OAAQ,gCAAtB,EACE,kBAACgB,KAAA,EAAD,CACEC,IAAE,EACFC,KAAMnB,kBAAoB,eAAiB,SAC3Cb,MAAO,CAAEU,MAAO,OAAK9D,MAAM4F,MAAM+F,aAIvC,kBAACkE,QAAA,EAAD,UACE,kBAAC,uCAAD,CACE5L,kBAAmBA,kBACnBhB,QAAS,OAAKF,MAAME,QACpB8B,mBAAoB,OAAKA,mBACzBf,mBAAoB,OAAKA,mBACzBW,iBAAkB,kBAChB,OAAKH,SAAS,CACZqI,iBAAiB,UAO7B3B,mBAAoB,CAClB8B,MAAO,CACLgD,kBAAmBnP,KAAKoP,iBAE1BxP,WAAY,CACVyP,MAAM,GAERlN,MAAO,CACL0I,sBAAuB,iBAAe,IAAZpH,MAAY,OAAZA,MACxB,OAAKA,MAKH,mCACE,kBAAC6L,WAAA,EAAD,CAAYnI,KAAM1D,MAAQA,MAAM8L,cAAgB,KAAO,IACtD9L,OANI,OAWbiB,UAAW,CACTjC,MAAO,IACP8H,SAAU,IACVM,sBAAuB,iBAAe,IAAZpH,MAAY,OAAZA,MACxB,OAAKA,MAKH,kBAACV,SAAA,EAAD,CACEE,MAAM,UACNV,MAAO,CACLU,MAAO,OAAK9D,MAAM4F,MAAM+F,SAE1B5H,QAAS,kBAAMsM,OAAOC,KAAKhM,MAAO,iBALpC,EAOGA,OAXI,OAgBbnB,OAAQ,CACNuI,sBAAuB,iBAAe,IAAZpH,MAAY,OAAZA,MACxB,OAAKA,MAKH,yBACElB,MAAO,CACLU,MAAO,OAAKyM,eAAejM,OAC3BZ,WAAY,aAHhB,EAMGY,OAVI,QAgBfkM,cAAe,CAAC,MAAO,WACvBC,iBAAkB5P,KAAK6P,qBACvB7E,KAAMhL,KAAK8P,kBACXC,UAAW/P,KAAKb,MAAM8M,KAAK5M,IAAI,kBAKvC,kBAAC,6BAAD,CACEyG,yBAA0B9F,KAAKb,MAAM2G,yBACrCQ,aAActG,KAAKb,MAAM6Q,oBAAoB3Q,IAAI,gBACjD4G,QAASjG,KAAKb,MAAM6Q,oBAAoB3Q,IAAI,WAC5C6F,kBAAmBlF,KAAKb,MAAM+F,kBAC9B+K,UAAWjQ,KAAKb,MAAM8Q,UACtBvJ,OAAQ1G,KAAKkC,MAAMmJ,YACnBlF,OAAQnG,KAAKqO,uBAEdrO,KAAKkC,MAAMoJ,qBACV,kBAAC,oCAAD,CACE5E,OAAQ1G,KAAKkC,MAAMoJ,oBACnBnF,OAAQnG,KAAKgO,oBACb3E,sBAAuBrJ,KAAKb,MAAMkK,sBAClCR,mBAAoB7I,KAAKb,MAAM0J,mBAC/BqB,QAASlK,KAAKb,MAAM+Q,0BACpBpL,MAAO9E,KAAKb,MAAMgR,wBAClBzH,IAAK1I,KAAKb,MAAMiR,sBAChB9G,OAAQtJ,KAAKb,MAAMkR,yBACnBnH,SAAUlJ,KAAKb,MAAMmR,2BACrBrH,OAAQjJ,KAAKb,MAAMoR,yBACnBnI,SAAUpI,KAAKb,MAAMqR,mC,qJApaLtQ,iBAmctBuQ,gBAAkBC,aAAyB,CAC/CzE,KAAM0E,YACNzC,cAAe0C,YACfZ,oBAAqBa,YACrBhI,mBAAoBiI,YACpBZ,0BAA2Ba,YAC3BZ,wBAAyBa,YACzBX,yBAA0BY,YAC1BX,2BAA4BY,cAqB9B,IAAM9Q,YAAcC,oBAAQoQ,iBAlB5B,SAA4BnQ,UAC1B,OAAOC,oCACL,CACET,qCACAqN,kBACA8C,oBACA/K,6BACAY,mCACAgH,2BACAzD,gCACA+G,gCACAG,mCACAC,sCAEFlQ,aAMWE,qDAAQJ,YAAaK,oBAAmB+G,YAAxChH,CAAmD2K","file":"33.ae9af4a559e7bc89131e.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;","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport SelectBar from 'components/SelectBar'\nimport TextLink from 'components/TextLink'\nimport _ from 'lodash'\nimport Button from 'components/Button'\n\nclass BotManagementFilterPanel extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n cloud: props.filters.cloud,\n botStatus: props.filters.status,\n }\n }\n render() {\n const { cloud, botStatus } = this.state\n return (\n
\n \n
Filters
\n \n Reset Filters\n \n
\n
\n
Cloud
\n this.setState({ cloud })}\n options={[\n { label: 'AWS', value: 'AWS' },\n { label: 'AZURE', value: 'Azure' },\n { label: 'GCP', value: 'GCP' },\n ]}\n />\n
\n
\n
Status
\n this.setState({ botStatus })}\n options={[\n { label: 'OK', value: 'OK' },\n { label: 'FAILED_TO_SYNC', value: 'FAILED_TO_SYNC' },\n ]}\n />\n
\n \n this.props.closeFilterPanel()}\n >\n Close\n \n this.props.handleFilterChange({ cloud, botStatus })}\n >\n Apply\n \n \n \n )\n }\n}\n\nBotManagementFilterPanel.propTypes = {\n handleClearFilters: PropTypes.func,\n filters: PropTypes.object,\n handleFilterChange: PropTypes.func,\n hasFiltersApplied: PropTypes.bool,\n closeFilterPanel: PropTypes.func,\n}\n\nexport default BotManagementFilterPanel\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport TextLink from 'components/TextLink'\nimport { Input, Label } from 'reactstrap'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport { isValidURL } from 'utils/sonraiUtils'\n\nclass CreateBotModal extends Component {\n state = {\n sourceUrl: '',\n }\n styles = {\n modalBody: {\n maxHeight: '80vh',\n overflow: 'auto',\n },\n error: {\n fontSize: '0.8rem',\n fontWeight: '400',\n margin: '0.25rem 0rem 0.5rem 0.25rem',\n color: this.props.theme.red,\n },\n success: {\n fontSize: '0.8rem',\n fontWeight: '400',\n margin: '0.25rem 0rem 0.5rem 0.25rem',\n },\n }\n\n handleAddBot = () => {\n this.props.validateSourceUrl({ url: this.state.sourceUrl })\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.props.isValid !== undefined) {\n if (prevState.sourceUrl !== this.state.sourceUrl) {\n this.props.clearSourceUrlValidation()\n }\n if (prevProps.isValid !== this.props.isValid && this.props.isValid) {\n this.handleClose()\n this.props.toggle()\n }\n }\n if (\n prevState.focused &&\n !this.state.focused &&\n this.state.sourceUrl !== ''\n ) {\n this.checkURL(this.state.sourceUrl)\n }\n if (!prevState.focused && this.state.focused) {\n this.setState({\n warningText: undefined,\n canSubmit: undefined,\n color: undefined,\n })\n }\n }\n\n checkURL = url => {\n const isURLFormatted = isValidURL(url)\n if (!isURLFormatted) {\n this.setState({\n canSubmit: false,\n warningText: 'Must be a valid URL',\n color: this.props.theme.red,\n })\n }\n if (isURLFormatted) {\n const endOfStr = url.substr(url.lastIndexOf('/') + 1)\n const hasFileExt = endOfStr.includes('.')\n if (hasFileExt) {\n if (endOfStr === 'manifest.yaml') {\n this.setState({ canSubmit: true })\n } else {\n this.setState({\n warningText: 'The filename must be \"manifest.yaml\"',\n canSubmit: false,\n color: this.props.theme.red,\n })\n }\n } else {\n this.setState({\n warningText: 'This directory must contain a \"manifest.yaml\" file',\n canSubmit: true,\n color: this.props.theme.warn,\n })\n }\n }\n }\n\n handleClose = () => {\n this.setState({\n sourceType: null,\n sourceUrl: '',\n })\n this.props.clearSourceUrlValidation()\n }\n\n render() {\n const { sourceUrl, focused, warningText, canSubmit } = this.state\n const { isValid, isValidating } = this.props\n const canAdd = sourceUrl !== '' && !isValidating && !focused && canSubmit\n const isNotValid = isValid !== undefined && isValid === false\n return (\n \n Add a Bot \n \n
\n \n {warningText && (\n \n * {warningText}\n
\n )}\n \n this.setState({ focused: true })}\n onBlur={() => this.setState({ focused: false })}\n type=\"text\"\n onChange={e => this.setState({ sourceUrl: e.target.value })}\n value={this.state.sourceUrl}\n />\n \n {isNotValid && (\n
Not a valid source URL.
\n )}\n \n
\n \n \n Cancel\n \n \n {isValidating ? : 'Add Bot'}\n \n \n \n )\n }\n}\n\nCreateBotModal.propTypes = {\n isOpen: PropTypes.bool,\n toggle: PropTypes.func,\n validateSourceUrl: PropTypes.func,\n isValid: PropTypes.bool,\n isValidating: PropTypes.bool,\n clearSourceUrlValidation: PropTypes.func,\n theme: themeShape,\n}\n\nexport default themeable(CreateBotModal)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport {\n Modal,\n ModalHeader,\n ModalBody,\n ModalFooter,\n Alert,\n Input,\n FormGroup,\n FormFeedback,\n} from 'reactstrap'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport TextLink from 'components/TextLink'\nimport Select from 'react-select'\nimport Button from 'components/Button'\nimport IHelp from 'containers/IHelp'\nimport DataTable from 'components/DataTable'\nimport Icon from 'components/Icon'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nconst cloudOptions = [{ value: 'aws', label: 'AWS' }]\n\nclass ExemptedIdentityModal extends Component {\n state = {\n newExemptedIds: '',\n }\n styles = {\n modalBody: {\n maxHeight: '80vh',\n overflow: 'auto',\n },\n error: {\n fontSize: '0.8rem',\n fontWeight: '400',\n margin: '0.25rem 0rem 0.5rem 0.25rem',\n color: this.props.theme.red,\n },\n success: {\n fontSize: '0.8rem',\n fontWeight: '400',\n margin: '0.25rem 0rem 0.5rem 0.25rem',\n },\n }\n\n constructor(props) {\n super(props)\n this.state = {\n errorMsg: null,\n newCloudType: cloudOptions[0],\n }\n if (props.exemptedIdentities.isEmpty()) {\n props.getExemptedIdentities()\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.adding && !this.props.adding && !this.props.error) {\n this.setState({ newExemptedIds: '' })\n }\n if (this.props.error && !prevState.errorMsg) {\n this.setError(this.props.error)\n }\n }\n\n handleCloudChange = params => {\n this.setState({ newCloudType: params })\n }\n\n closeError = () => {\n this.setState({ errorMsg: null })\n }\n\n setError = msg => {\n this.setState({\n errorMsg: msg,\n })\n this.props.setError({ error: null })\n setTimeout(() => {\n this.setState({ errorMsg: null })\n }, 10000)\n }\n\n addExemptedIDs = () => {\n if (this.state.newExemptedIds.length > 0) {\n const newExemptItems = this.state.newExemptedIds.trim().split(',')\n this.props.add({\n resourceIds: newExemptItems,\n cloudType: this.state.newCloudType.value,\n })\n }\n }\n\n getData = () => {\n return this.props.exemptedIdentities.toJS().map(id => ({\n resourceId: id.resourceId,\n cloudType: id.cloud,\n delete: id.resourceId,\n }))\n }\n\n deleteExemptedIdentity = resourceId => {\n if (!this.props.deleting.get(resourceId)) {\n this.props.delete({ resourceIds: [resourceId] })\n }\n }\n\n idsAreValid = () => {\n let isValid = true\n\n if (!this.state.newExemptedIds) {\n return isValid\n }\n\n if (this.state.newCloudType.value === 'aws') {\n const newExemptItems = this.state.newExemptedIds.trim().split(',')\n newExemptItems.forEach(id => {\n if (!id.startsWith('arn:')) {\n isValid = false\n }\n })\n }\n\n return isValid\n }\n\n render() {\n return (\n \n \n Manage Bot Exemptions\n \n \n
\n {this.state.errorMsg && (\n \n {this.state.errorMsg}\n \n )}\n

\n Exempted Identities are identities that are exempt from the\n policies enforced by Sonrai Prevention Bots.\n

\n \n
Add New Exempted Identities
\n
\n \n
\n
\n \n
\n \n \n this.setState({ newExemptedIds: e.target.value })\n }\n value={this.state.newExemptedIds}\n disabled={this.props.adding}\n placeholder={`Enter the Resource ID for the Identity you want to exempt...`}\n invalid={!this.idsAreValid()}\n />\n \n {this.state.newCloudType.value === 'aws'\n ? 'AWS resource IDs must start with \"arn:\"'\n : ''}\n \n \n
\n
\n \n
\n \n \n \n {this.props.adding ? (\n \n ) : (\n \n )}\n  Add Identities\n \n \n
Current Exempted Identities
\n
\n {this.props.loading ? (\n \n \n
\n ) : (\n {\n return (\n {\n this.deleteExemptedIdentity(params.data.delete)\n }}\n disabled={this.props.deleting.get(\n params.data.resourceId\n )}\n >\n Delete\n \n )\n },\n },\n }}\n data={this.getData()}\n />\n )}\n \n \n
\n \n \n Close\n \n \n
\n )\n }\n}\n\nExemptedIdentityModal.propTypes = {\n toggle: PropTypes.func,\n getExemptedIdentities: PropTypes.func,\n add: PropTypes.func,\n delete: PropTypes.func,\n setError: PropTypes.func,\n exemptedIdentities: ImmutablePropTypes.list,\n loading: PropTypes.bool,\n deleting: ImmutablePropTypes.map,\n adding: PropTypes.bool,\n error: PropTypes.string,\n isOpen: PropTypes.bool,\n theme: themeShape,\n}\n\nexport default themeable(ExemptedIdentityModal)\n","import React, { Component } 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 { push } from 'connected-react-router'\nimport _ from 'lodash'\nimport qs from 'query-string'\nimport { ToolbarItem } from 'components/ActionToolbar'\n\nimport CloudBadge from 'components/CloudBadge'\nimport Button from 'components/Button'\nimport DataTable from 'components/DataTable'\nimport Card, { CardBody } from 'components/Card'\nimport Icon from 'components/Icon'\nimport RedirectWithoutPermission from 'containers/PermissionChecker/RedirectWithoutPermission'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Popover, { PopoverBody, PopoverAnchor } from 'components/Popover'\nimport { exists } from 'utils/sonraiUtils'\nimport BotManagementFilterPanel from './BotManagementFilterPanel'\nimport TextLink from 'components/TextLink'\nimport IHelp from 'containers/IHelp'\nimport SectionHeader from 'components/SectionHeader'\nimport permissionChecker from 'containers/PermissionChecker'\n\nimport {\n getBots,\n createBot,\n validateSourceUrl,\n clearSourceUrlValidation,\n handleDeleteBots,\n getExemptedIdentities,\n addExemptedIdentities,\n deleteExemptedIdentities,\n setExemptedIdentitiesError,\n} from 'containers/SonraiData/actions'\nimport {\n selectBots,\n selectIsCreatingBot,\n selectSourceUrlValidation,\n selectExemptedIdentities,\n selectExemptedIdentitiesError,\n selectExemptedIdentitiesLoading,\n selectExemptedIdentitiesAdding,\n selectExemptedIdentitiesDeleting,\n} from 'containers/SonraiData/selectors'\nimport CreateBotModal from './CreateBotModal'\nimport ExemptedIdentityModal from './ExemptedIdentityModal'\n\nclass BotManagement extends Component {\n constructor(props) {\n super(props)\n\n props.getBots({ filters: {} })\n\n this.state = {\n isModalOpen: false,\n isExemptedModalOpen: false,\n showFilterPanel: false,\n filters: {\n cloud: null,\n status: null,\n },\n checkboxSelectedRows: [],\n }\n\n this.styles = {\n container: {\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n padding: '1rem',\n width: '100%',\n height: '100%',\n },\n header: {\n display: 'grid',\n gridTemplateColumns: '1fr auto auto',\n },\n headerExt: {\n display: 'flex',\n flexDirection: 'column',\n },\n title: {\n fontSize: '1.3rem',\n margin: '0rem 0rem 0.5rem 0rem',\n },\n description: {\n color: 'rgb(128, 124, 124)',\n },\n content: {\n margin: '1rem 0rem',\n },\n buttonContainer: {\n display: 'flex',\n alignItems: 'flex-start',\n padding: '0rem 0rem 0rem 1rem',\n },\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (!_.isEqual(prevState.filters, this.state.filters)) {\n const { filters } = this.state\n this.props.getBots({ filters })\n }\n }\n\n toggleCreateBotModal = () => {\n this.setState(oldState => ({ isModalOpen: !oldState.isModalOpen }))\n }\n\n toggleExemptedModal = () => {\n this.setState(oldState => ({\n isExemptedModalOpen: !oldState.isExemptedModalOpen,\n }))\n }\n\n handleNavToBotDetail = ({ srn }) => {\n this.props.push({\n pathname: '/App/BotManagement/BotDetails',\n search: qs.stringify({\n botId: srn,\n }),\n })\n }\n\n toggleFilterPanel = () => {\n this.setState(currentState => ({\n showAddPopover: !currentState.showAddPopover,\n }))\n }\n\n onFilterPanelToggle = newVisibility => {\n this.setState({\n showFilterPanel: newVisibility,\n })\n }\n\n handleFilterChange = ({ cloud, botStatus }) => {\n const filters = { cloud, status: botStatus }\n this.setState({ filters })\n }\n\n handleClearFilters = () => {\n const filters = { cloud: null, status: null }\n this.setState({\n filters,\n showFilterPanel: false,\n })\n }\n\n getFilteredBots = () => {\n const bots = this.props.bots.get('data').toJS()\n\n return bots.map(bot => ({\n title: bot.title,\n type: bot.type,\n cloud: bot.cloud,\n source: bot.isCustom ? 'Custom' : 'Sonrai',\n status: bot.status,\n lastSync: bot.lastSync,\n sourceUrl: bot.url,\n srn: bot.srn,\n resourceId: bot.resourceId,\n }))\n }\n\n getStatusColor = status => {\n if (status == 'FAILED_TO_SYNC') {\n return this.props.theme.red\n } else {\n return this.props.theme.success\n }\n }\n\n getHelpIcon = () => (\n
\n \n

\n Sonrai Bots are agents you can configure and deploy into your\n cloud accounts, that allow the Sonrai to effect changes in your\n cloud environment to address issues reported as outside policy.{' '}\n

\n

\n Bots come in two styles:\n \n

  • Remediation Bots
  • \n
  • Prevention Bots
  • \n \n

    \n

    \n Remediation Bots, upon being alerted to a\n violation of policy, will update a resource to bring that resource\n back in line with accepted policies. Changes can include things\n like network security group changes, resource creation, encryption\n setting changes, use of unauthorized cloud services, etc.\n

    \n

    \n Prevention Bots have the ability to update\n policies within your cloud account, to restrict access to cloud\n services, applying Service Control Policies in AWS, Policies in\n Azure and Service Usage in GCP. Bots are granted access to your\n cloud account with an appropriate role in each account you wish to\n have managed.\n

    \n

    \n For more details on the role configurations, please refer to\n the \n \n Bots Documentation\n \n  in the Knowledge Center .\n

    \n
    \n }\n position=\"right\"\n />\n \n )\n\n handleDeleteBots = () => {\n //arr of srns to delete\n const bots = this.state.checkboxSelectedRows.map(item => item.srn)\n this.setState({\n checkboxSelectedRows: [],\n })\n this.props.handleDeleteBots({ bots })\n }\n\n handleSelectionChange = evnt => {\n const rows = evnt.api.getSelectedRows() || []\n this.setState({ checkboxSelectedRows: rows })\n }\n\n checkboxRowTest = params => {\n //It's a grouped row\n if (!params.data) {\n return false\n }\n\n return this.props.userHasPermission({\n permissionName: 'edit.bots',\n resourceId: params.data.resourceId,\n })\n }\n\n render() {\n const hasFiltersApplied = exists(\n _.keys(this.state.filters).find(\n name => !_.isEmpty(this.state.filters[name])\n )\n )\n\n return (\n
    \n \n
    \n
    \n
    \n Bots\n {this.getHelpIcon()}\n
    \n
    \n Sonrai Bots are agents you can configure and deploy into your\n cloud accounts, that allow the Sonrai to effect changes in your\n cloud environment to address issues reported as outside policy.\n
    \n
    \n
    \n \n {this.props.isCreatingBot ? (\n \n ) : (\n \n Manage Exempted Identities\n \n )}\n \n
    \n
    \n `/org/${org}/`}\n >\n \n {this.props.isCreatingBot ? (\n \n ) : (\n \n New Bot\n \n )}\n \n \n
    \n
    \n
    \n \n \n \n Delete Bot(s)\n ,\n ]}\n bulkActionWorking={false}\n autoSize\n customFilter={() => (\n \n \n
    \n \n
    \n
    \n \n \n this.setState({\n showFilterPanel: false,\n })\n }\n />\n \n \n )}\n customColumnConfig={{\n title: {\n checkboxSelection: this.checkboxRowTest,\n },\n resourceId: {\n hide: true,\n },\n cloud: {\n cellRendererFramework: ({ value }) => {\n if (!value) {\n return null\n }\n\n return (\n \n {' '}\n {value}\n \n )\n },\n },\n sourceUrl: {\n width: 400,\n minWidth: 400,\n cellRendererFramework: ({ value }) => {\n if (!value) {\n return null\n }\n\n return (\n window.open(value, '_blank')}\n >\n {value}\n \n )\n },\n },\n status: {\n cellRendererFramework: ({ value }) => {\n if (!value) {\n return null\n }\n\n return (\n \n {value}\n
    \n )\n },\n },\n }}\n hiddenColumns={['srn', 'version']}\n onDoubleClickRow={this.handleNavToBotDetail}\n data={this.getFilteredBots()}\n isLoading={this.props.bots.get('isLoading')}\n />\n \n \n
    \n \n {this.state.isExemptedModalOpen && (\n \n )}\n \n )\n }\n}\n\nBotManagement.propTypes = {\n bots: ImmutablePropTypes.iterable,\n getBots: PropTypes.func,\n createBot: PropTypes.func,\n isCreatingBot: PropTypes.bool,\n push: PropTypes.func,\n theme: themeShape,\n userHasPermission: PropTypes.func,\n sourceUrlValidation: ImmutablePropTypes.map,\n validateSourceUrl: PropTypes.func,\n clearSourceUrlValidation: PropTypes.func,\n handleDeleteBots: PropTypes.func,\n getExemptedIdentities: PropTypes.func,\n addExemptedIdentities: PropTypes.func,\n deleteExemptedIdentities: PropTypes.func,\n setExemptedIdentitiesError: PropTypes.func,\n exemptedIdentities: ImmutablePropTypes.list,\n exemptedIdentitiesDeleting: ImmutablePropTypes.map,\n exemptedIdentitiesAdding: PropTypes.bool,\n exemptedIdentitiesLoading: PropTypes.bool,\n exemptedIdentitiesError: PropTypes.string,\n}\n\nconst mapStateToProps = createStructuredSelector({\n bots: selectBots,\n isCreatingBot: selectIsCreatingBot,\n sourceUrlValidation: selectSourceUrlValidation,\n exemptedIdentities: selectExemptedIdentities,\n exemptedIdentitiesLoading: selectExemptedIdentitiesLoading,\n exemptedIdentitiesError: selectExemptedIdentitiesError,\n exemptedIdentitiesAdding: selectExemptedIdentitiesAdding,\n exemptedIdentitiesDeleting: selectExemptedIdentitiesDeleting,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n getBots,\n createBot,\n validateSourceUrl,\n clearSourceUrlValidation,\n handleDeleteBots,\n getExemptedIdentities,\n addExemptedIdentities,\n deleteExemptedIdentities,\n setExemptedIdentitiesError,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, permissionChecker, themeable)(BotManagement)\n"],"sourceRoot":""}