vesta/web/static/js/main.96e25cf6.chunk.js.map
2021-10-29 11:30:04 +03:00

1 line
1.2 MiB

{"version":3,"sources":["reducers/MainNavigation/mainNavigationReducer.js","actions/MainNavigation/mainNavigationTypes.js","reducers/ControlPanelContent/controlPanelContentReducer.js","actions/ControlPanelContent/controlPanelContentTypes.js","reducers/Notification/notificationReducer.js","actions/Notification/notificationTypes.js","reducers/MenuCounters/menuCounterReducer.js","actions/MenuCounters/menuCounterTypes.js","reducers/Session/sessionReducer.js","actions/Session/sessionTypes.js","reducers/rootReducer.js","components/Spinner/Spinner.jsx","components/Path/Dropdown/Dropdown.jsx","components/Path/Path.jsx","components/Lists/Row/Row.jsx","components/Lists/DirectoryList/DirectoryList.jsx","components/ProgressBar/ProgressBar.jsx","components/Hotkeys/Hotkeys.jsx","components/Modal/AddFile.jsx","components/Modal/AddDirectory.jsx","components/Modal/Rename.jsx","components/Modal/Delete.jsx","components/Modal/NothingSelected.jsx","components/Modal/Permissions.jsx","components/Modal/Move.jsx","components/Modal/Archive.jsx","components/Modal/Extract.jsx","components/Modal/Copy.jsx","components/Modal/Replace.jsx","components/Modal/Modal.jsx","components/Menu/Menu.jsx","FileManagerHelper.js","containers/FileManager/FileManager.js","components/Preview/Editor/Editor.jsx","components/Preview/Photo/Photo.jsx","components/Preview/Video/Video.jsx","components/Preview/Preview.jsx","actions/MainNavigation/mainNavigationActions.js","utils/token.js","ControlPanelService/Ip.js","components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput.jsx","components/ControlPanel/AddItemLayout/Form/TextInput/TextInput.jsx","components/ControlPanel/AddItemLayout/Form/Checkbox/Checkbox.jsx","components/ControlPanel/Container/Container.jsx","components/ControlPanel/AddItemLayout/AddItemLayout.jsx","components/MainNav/Toolbar/Toolbar.jsx","services/session.js","actions/MenuCounters/menuCounterActions.js","components/InternetProtocol/Edit/EditInternetProtocol.jsx","components/InternetProtocol/Add/AddInternetProtocol.jsx","components/ControlPanel/AddItemLayout/Form/TextArea/TextArea.jsx","ControlPanelService/Server.js","components/Server/Edit/Nginx/EditServerNginx.jsx","components/Server/Edit/Postgresql/Postgresql.jsx","ControlPanelService/Backup.js","components/Backup/Exclusion/Edit/index.jsx","actions/ControlPanelContent/controlPanelContentActions.js","components/MainNav/Toolbar/DropdownFilter/DropdownFilter.jsx","components/MainNav/Toolbar/SearchInput/SearchInput.jsx","ControlPanelService/Favorites.js","components/ControlPanel/ListItem/ListItem.jsx","components/InternetProtocol/InternetProtocol.jsx","components/MainNav/Toolbar/LeftButton/LeftButton.jsx","components/MainNav/Toolbar/Checkbox/Checkbox.jsx","components/MainNav/Toolbar/Select/Select.jsx","ControlPanelService/Select.js","components/ControlPanel/Modal/Modal.jsx","containers/InternetProtocols/InternetProtocols.jsx","ControlPanelService/Web.js","components/ControlPanel/AddItemLayout/Form/Password/Password.jsx","components/WebDomain/Add/AdditionalFtpForEditing/AdditionalFtpForEditing.jsx","components/WebDomain/Add/AdditionalFtpWrapper/AdditionalFtpWrapper.jsx","components/WebDomain/Add/SslSupport/SslSupport.jsx","components/WebDomain/Add/AdvancedOptions/AdvancedOptions.jsx","components/WebDomain/Add/AddWebDomain.jsx","components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.jsx","ControlPanelService/Db.js","components/Database/Edit/EditDatabase.jsx","ControlPanelService/Firewalls.js","components/Firewall/Edit/EditFirewall.jsx","components/ControlPanel/Hotkeys/Hotkeys.jsx","components/Database/Add/AddDatabase.jsx","components/Firewall/Add/AddFirewall.jsx","ControlPanelService/Cron.js","ControlPanelService/GeneratorOptions.js","components/CronJob/Generator/RunCommandSelect/RunCommandSelect.jsx","components/CronJob/Generator/OtherSelects/SecondTabSelects.jsx","components/CronJob/Generator/OtherSelects/ThirdTabSelects.jsx","components/CronJob/Generator/OtherSelects/FourthTabSelects.jsx","components/CronJob/Generator/OtherSelects/FifthTabSelects.jsx","components/CronJob/Generator/OtherSelects/SelectsWrapper.jsx","components/CronJob/Generator/Generator.jsx","components/CronJob/Edit/EditCronJob.jsx","components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.jsx","components/ControlPanel/AddItemLayout/Form/NameServers/NameServers.jsx","ControlPanelService/Package.js","components/Package/Edit/EditPackage.jsx","components/Server/Edit/Httpd/EditHttpd.jsx","components/CronJob/Add/AddCronJob.jsx","components/Package/Add/AddPackage.jsx","components/Server/Edit/EditServerWebOption.jsx","components/Server/Edit/EditServerDnsOption.jsx","components/Server/Edit/EditVestaPlugins.jsx","components/Server/Edit/EditVestaSslOption.jsx","components/Server/Edit/EditDatabaseOption.jsx","components/Server/Edit/EditBackupOption.jsx","components/Server/Edit/EditMailOption.jsx","components/Server/Edit/EditServer.jsx","components/Server/Edit/Dovecot/Dovecot.jsx","ControlPanelService/Mail.js","components/MailAccount/MailInfoBlock/MailInfoBlock.jsx","components/MailAccount/Edit/EditMailAccount.jsx","components/Mail/Edit/EditMail.jsx","containers/EditMailWrapper/EditMailWrapper.jsx","components/Server/Edit/Service/Service.jsx","components/MailAccount/Add/AddMailAccount.jsx","components/Mail/Add/AddMail.jsx","containers/AddMailWrapper/AddMailWrapper.jsx","ControlPanelService/Dns.js","ControlPanelService/ResetPassword.js","actions/Session/sessionActions.js","components/DomainNameSystem/Edit/EditDomainNameSystem.jsx","components/DNSRecord/Edit/EditDNSRecord.jsx","containers/EditDNSWrapper/EditDNSWrapper.jsx","components/WebDomain/Edit/SslSupport/SslSupport.jsx","components/WebDomain/Edit/EditWeb.jsx","components/Server/Edit/PHP/EditPhp.jsx","components/Database/Database.jsx","containers/Databases/Databases.jsx","components/Firewall/Firewall.jsx","containers/Firewalls/Firewalls.jsx","ControlPanelService/Users.js","components/User/Edit/EditUser.jsx","components/Server/Edit/Bind9/Bind9.jsx","components/Server/Edit/Mysql/Mysql.jsx","ControlPanelService/UserNS.js","components/DomainNameSystem/Add/AdvancedOptions/AdvancedOptions.jsx","components/DomainNameSystem/Add/AddDomainNameSystem.jsx","components/DNSRecord/Add/AddDNSRecord.jsx","containers/AddDNSWrapper/AddDNSWrapper.jsx","components/Backup/RestoreSetting/RestoreSetting.jsx","components/Backup/RestoreSettings/BackupRestoreSettings.jsx","components/Backup/Backup.jsx","containers/Backups/Backups.jsx","containers/BackupWrapper/BackupWrapper.jsx","components/Firewall/Add/Banlist/index.jsx","components/CronJob/CronJob.jsx","containers/CronJobs/CronJobs.jsx","components/Package/Package.jsx","containers/Packages/Packages.jsx","ControlPanelService/Languages.js","components/User/Add/AddUser.jsx","ControlPanelService/Updates.js","components/Update/Update.jsx","containers/Updates/Updates.jsx","components/Server/ServerSys.jsx","components/Server/Server.jsx","containers/Servers/Servers.jsx","components/MainNav/Stat-menu/Menu.jsx","components/MainNav/Mobile/MobileTopNav.jsx","ControlPanelService/Notifications.js","components/MainNav/Panel/Notifications/Bell.jsx","components/MainNav/Panel/Notifications/BellUnread.jsx","components/MainNav/Panel/Notifications/Notifications.jsx","actions/Notification/notificationActions.js","components/MainNav/Panel/Panel.jsx","components/MainNav/MainNav.jsx","components/Backup/Exclusion/index.jsx","containers/Backups/Exclusions/index.jsx","components/MailAccount/MailAccount.jsx","containers/MailAccounts/MailAccounts.jsx","components/Mail/Mail.jsx","containers/Mails/Mails.jsx","containers/MailWrapper/MailWrapper.jsx","components/DNSRecord/DNSRecord.jsx","containers/DNSRecords/DNSRecords.jsx","components/DomainNameSystem/DomainNameSystem.jsx","containers/DomainNameSystems/DomainNameSystems.jsx","containers/DNSWrapper/DNSWrapper.jsx","ControlPanelService/Statistics.js","components/Statistic/Statistic.jsx","containers/Statistics/Statistics.jsx","components/User/User.jsx","containers/Users/Users.jsx","ControlPanelService/RRD.js","components/RRD/Timer/Timer.jsx","components/RRD/RRD.jsx","containers/RRDs/RRDs.jsx","components/Firewall/Ban/index.jsx","containers/Firewalls/Banlist/index.jsx","components/WebDomain/WebDomain.jsx","containers/Web/Web.jsx","ControlPanelService/Search.js","components/Searchitem/SearchItem.jsx","containers/Search/Search.jsx","ControlPanelService/Logs.js","components/Log/Log.jsx","containers/Logs/Logs.jsx","containers/ControlPanelContent/ControlPanelContent.jsx","components/TopPanel/TopPanel.jsx","ControlPanelService/WebLogs.js","containers/WebLogs/WebLogs.jsx","components/ControlPanel/LoginLayout/LoginLayout.jsx","components/Login/LoginForm.jsx","containers/ServiceInfo/index.jsx","components/ForgotPassword/index.jsx","containers/App/App.js","containers/App/serviceWorker.js","index.js","store.js"],"names":["INITIAL_STATE","focusedElement","activeElement","adminMenuTabs","userMenuTabs","reducer","state","action","type","value","controlPanelFocusedElement","notifications","notificationReducer","user","menuCounterReducer","token","error","session","i18n","userName","panel","sessionReducer","combineReducers","mainNavigation","mainNavigationReducer","controlPanelContent","controlPanelContentReducer","menuCounters","Spinner","className","role","aria-valuenow","aria-valuemin","aria-valuemax","style","width","Dropdown","props","sorting","useSelector","changeSorting","field","order","isActive","sort","size","date","name","class","data-toggle","aria-haspopup","aria-expanded","onClick","Path","path","openDirectory","openDirectoryHandler","index","pathArray","split","undefined","newPath","splice","join","HOME","splitPath","map","item","key","clickablePath","Row","componentDidMount","document","addEventListener","openOnEnter","componentWillUnmount","removeEventListener","e","activeRow","data","isActiveList","modalVisible","cursor","download","keyCode","isArchive","isFile","changePath","openItem","match","history","push","pathname","search","selectRow","permissions","selectMultiple","selectOnClick","ctrlKey","selected","length","sizeFormatter","bytes","decimals","dm","i","Math","floor","log","parseFloat","pow","toFixed","dateFormatter","fDate","Date","getDay","getDate","getMonth","glyph","icon","faJs","faHtml5","faPhp","faSass","faCss3","this","owner","time","Component","connect","withRouter","DirectoryList","orderType","sortingType","itemsSelected","UNSAFE_componentWillMount","localStorage","getItem","list","setState","handleLiSelection","moveBackOnButton","cacheSorting","setItem","moveBack","isHomeDirectory","rootDir","toggleActiveList","changePathAfterToggle","cacheActiveWindowAndPaths","passData","isSelected","indexOf","listing","shiftKey","addToSelection","resetData","addToPath","openCertainDirectory","sortByType","a","b","localeCompare","sortBySize","sortByDate","sortByName","sortData","rows","sortedData","result","duplicate","passSelection","loading","ProgressBar","progress","Hotkeys","useEffect","window","toggleShortcutsLit","reference","event","isSearchInputFocused","querySelector","toggleHotkeys","ref","Shortcuts","AddFile","close","Cancel","save","Create","AddDirectory","autoFocus","Rename","fName","defaultValue","onChange","Delete","items","NothingSelected","notAvailable","defaultPermissions","read","write","execute","group","others","Permissions","decodeSingleNumber","string","number","parseInt","inArray","onChangeForm","checkbox","target","permissionName","checked","inputRef","encode","changePermissions","handleInputChange","isValid","inputInvalid","decode","array","numbers","find","reduce","acc","permissionObject","roleObject","Object","values","n","inputClasses","classNames","id","maxLength","disabled","Move","Archive","Compress","onBlur","Extract","Copy","Replace","files","replace","Modal","closeOutside","hotkeys","closeModal","saveAndClose","onClose","onChangePermissions","file","onChangeValue","modal","getElementById","content","Menu","inputFile","createRef","hotKeys","newFile","openModal","newDirectory","deleteFile","selection","rename","move","archive","extract","copy","itemType","click","matchArchive","to","src","alt","aria-label","multiple","upload","current","UPLOAD","title","DOWNLOAD","RENAME","RIGHTS","COPY","MOVE","ARCHIVE","EXTRACT","DELETE","server","location","origin","validateAction","url","axios","get","getData","encodePath","deleteItems","promisesArray","then","Promise","all","moveItems","targetPath","copyItems","FileManager","currentUser","parsedQueryString","QueryString","parse","ignoreQueryPrefix","substring","FM","currentPath","changeDirectoryOnLoading","switchActiveList","toggleActiveListOnTab","hotkeysListener","activeWindow","cachePaths","leftList","rightList","setStateAsync","updater","resolve","side","changeDirectory","preventDefault","changeQuery","response","showError","message","toast","position","autoClose","hideProgressBar","closeOnClick","pauseOnHover","draggable","itemName","open","checkExistingFileName","selectedFiles","leftListData","rightListData","selectedFileNames","existingFileNames","newFiles","includes","replaceFiles","formData","FormData","append","post","onUploadProgress","progressEvent","uploadPercent","round","loaded","total","onDelete","inputElement","newDir","onRename","modalInputValue","itemPermissions","archiveItem","extractItem","moveItem","targetDir","copyItem","lastIndexOf","activeList","oldPath","changeInputValue","hotkeysPanel","available","modalWindow","inp","DirectoryLists","el","Helmet","onDeleteFileHandler","hotkeysList","classList","toggle","Editor","useHistory","useState","code","hotKey","checkFileType","res","showToast","catch","err","console","text","success","options","mode","pop","getModeFromFileName","lineNumbers","Save","Close","newCode","Photo","activeSlide","photoGallery","imgClass","formatPath","carouselIndicators","imageClasses","data-target","data-slide-to","carouselPhotos","setPhotoGallery","filter","setActiveImage","activeImage","activeImageIndex","data-ride","href","data-slide","aria-hidden","Video","autoPlay","loop","controls","Preview","lastOpenedDirectory","addFocusedElement","addActiveElement","setAuthToken","getAuthToken","BASE_URL","getIpList","SelectInput","optionalTitle","htmlFor","option","TextInput","inputValue","setInputValue","readOnly","Checkbox","defaultChecked","checkedState","setCheckedState","Container","children","AddItemLayout","status","newDate","day","month","year","getFullYear","renderDate","Toolbar","toolbarHeight","handleToolbar","documentElement","clientWidth","changeToolbarHeight","scrollTop","scrollY","max","mobile","marginTop","checkAuth","uri","refreshCounters","dispatch","getState","reject","EditInternetProtocol","useDispatch","dedicated","errorMessage","okMessage","ip","QS","params","getInternetProtocolInfo","submitFormHandler","updatedIP","entries","database","keys","constructor","formDataObject","updateInternetProtocol","error_msg","ok_msg","IP","HtmlParser","onSubmit","netmask","interface","users","nat","Back","AddInternetProtocol","interfaces","fetchData","newIp","addInternetProtocol","Add","TextArea","handleAction","updateService","getServiceInfo","service","services","EditServerNginx","basicOptions","advancedOptions","toggleOptions","SERVER","service_name","updatedService","worker_processes","worker_connections","client_max_body_size","send_timeout","proxy_connect_timeout","proxy_send_timeout","proxy_read_timeout","gzip","gzip_comp_level","charset","config","config_path","Postgresql","options_path","EditBackupExclusions","updatedExclusions","updateBackupExclusions","BACKUP","web","mail","db","userdir","addControlPanelContentFocusedElement","DropdownFilter","usersList","Username","Disk","Bandwidth","Starred","webList","Domain","dnsList","Expire","Records","mailList","Accounts","mailAccountList","dbList","Database","User","Host","cronList","Command","packagesList","internetProtocolsList","Netmask","Interface","Owner","firewallList","Action","Protocol","Port","Comment","searchList","Name","filterClassName","renderFilters","SearchInput","searchTerm","setSearchTerm","useRef","handleClick","handleSearchTerm","focusInput","focus","addFavorite","unitId","section","deleteFavorite","ListItem","starred","hasOwnProperty","Boolean","toggleItem","checkItem","outdated","suspended","stopped","focused","sysInfo","printDate","leftNameText","toggleFav","InternetProtocol","NAME","FOCUSED","isChecked","DATE","STARRED","NETMASK","INTERFACE","Domains","U_WEB_DOMAINS","Status","STATUS","OWNER","Users","U_SYS_USERS","edit","handleModal","delete_conf","LeftButton","showLeftMenu","renderIcon","toggleAll","toggled","Select","cronReports","listValues","select","rebuild","suspend","unsuspend","delete","backupList","updatesList","update","serverList","stop","start","restart","backupDetailList","restore","banList","statisticsList","renderOptions","bulkAction","show","onSave","onCancel","showSaveButton","showCancelButton","tabindex","aria-labelledby","display","Confirmation","data-dismiss","OK","InternetProtocols","setLoading","visible","actionUrl","setModal","internetProtocols","ipFav","toggledAll","totalAmount","handleContentSelection","handleFocusedElementShortcuts","handleArrowUp","handleArrowDown","initFocusedElement","focusedElementPosition","findIndex","pack","nextFocusedElement","scrollIntoView","behavior","block","handleDelete","handleEdit","currentInternetProtocolData","displayModal","reformatData","internetProtocolsDuplicate","checkedItem","incomingItem","sortArray","sortingColumn","sortBy","ipFavDuplicate","ipNames","internetProtocol","refreshMenuCounters","modalCancelHandler","forEach","term","changeSearchTerm","Password","showGenerationButton","hidePassword","generatedPassword","passwordInputHandler","chars","randomNumber","random","substr","generatePassword","Generate","AdditionalFtpForEditing","domain","onDeleteAdditionalFtp","prefixI18N","prePath","username","v_ftp_user","deleted","is_new","v_ftp_password","v_ftp_path","FTP","v_ftp_email","renderForm","AdditionalFtpWrapper","ftps","unCheckAdditionalFtpBox","ftpUserPrePath","additionalFtp","onDeleteFtp","updatedAdditionalFtps","ftp","additionalFtpArrayLength","additionalFtpsDuplicate","addAdditionalFtp","SslSupport","letsEncrypt","setLetsEncrypt","AdvancedOptions","sslSupport","statisticsAuthCheckbox","statisticsAuth","aliases","updatedDomain","Aliases","renderSslSupport","webStats","stat","renderAdditionalFtp","AddWebDomain","dnsSupport","mailSupport","showAdvancedOptions","internetProtocolNames","getInternetProtocolNames","newWebDomain","addWeb","WEB","required","renderAdvancedOptions","TextInputWithTextOnTheRight","dbCharsets","EditDatabase","databaseUserInputValue","getDatabaseInfo","dbuser","updatedDatabase","updateDatabase","DB","password","host","addBanIpsUri","ips","banIps","banIp","EditFirewall","rule","getFirewallInfo","updateFirewall","FIREWALL","actions","protocols","protocol","port","comment","AddDatabase","memo","dbTypes","dbHosts","maxCharLength","databaseInputValue","newDatabase","addDatabase","Type","dbType","dbHost","Charset","dbCharset","AddFirewall","newFirewall","addFirewall","generatorOptions","minutesRunCommandsOptions","every","hoursRunCommandsOptions","daysRunCommandsOptions","hoursOptions","hourlyMinutesOptions","dailyMinutesOptions","weeklyRunCommandOptions","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","monthlyRunCommandOptions","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","dateOptions","RunCommandSelect","activeTab","selectName","SecondTabSelects","Minute","ThirdTabSelects","Hour","FourthTabSelects","FifthTabSelects","OtherSelects","renderSelects","Generator","formElement","activeClassName","tab","formatLink","job","Minutes","Hourly","Daily","Weekly","Monthly","generatedCronJob","iterableFormElement","EditMail","h_min","h_hour","h_day","h_wday","h_month","getCronJobInfo","min","hour","wday","updatedJob","updateCronJob","changeInput","input","updatedGeneratedCronJob","CRON","cmd","TextInputWithExtraButton","previousValue","NameServers","nameServersAmount","usersNS","initNameServersAmount","userNS","onDeleteNameServer","nameServersDuplicate","nameServer","nameServersLength","addNameServer","getPackageList","EditPackage","queryParams","package","toggleUnlimited","inputName","inputNameToUpdate","PACKAGE","updatedPackage","updatePackage","web_system","web_templates","web_template","web_backend","backend_templates","backend_template","proxy_system","proxy_templates","proxy_template","dns_system","dns_templates","dns_template","shells","shell","web_domains","web_aliases","dns_domains","dns_records","mail_domains","mail_accounts","databases","cron_jobs","backups","disk_quota","bandwidth","nameservers","EditHttpd","AddCronJob","newCronJob","addCronJob","Day","Month","AddPackage","webTemplates","webSystem","backendTemplates","backendSystem","proxySystem","proxyTemplates","dnsTemplates","dnsSystem","sshTemplates","webDomains","webAliases","dnsDomains","dnsRecords","mailDomains","mailAccounts","cronJobs","quota","ssh_access","newPackage","addPackage","EditServerWebOption","webBackend","webBackendPool","EditServerDnsOption","dnsCluster","cluster","EditVestaPluginsOption","sftpOptions","setSftpOptions","fmOptions","setFmOptions","sftpDescription","setSftpDescription","fmDescription","setFmDescription","softaculousDescription","setSoftaculousDescription","sftpOptionsArray","fmOptionsArray","sftpjail_key","fm_key","lead","softaculous","version","yes_no_options","firewall_system","http_host","fm_licence_key_option","rel","fontWeight","EditVestaSslOption","domainsVisible","setDomainsVisible","sslDomains","setSslDomains","ssl_domains","vesta_certificate","sys_ssl_crt","sys_ssl_key","sys_ssl_subject","sys_ssl_aliases","sys_ssl_not_before","sys_ssl_not_after","sys_ssl_signature","sys_ssl_pub_key","sys_ssl_issuer","EditDatabaseOption","mysql","db_pma_url","mysql_hosts","printPhpMyAdminHosts","pgsql","pgsql_url","pgsql_hosts","EditBackupOption","remoteBackup","setRemoteBackup","backup","backup_gzip","backup_dir","backup_remote_adv","backup_type","backup_host","backup_username","backup_password","backup_bpath","EditMailOption","mailCertificateSystem","setMailCertificateSystem","mail_certificate","mail_system","antivirus_system","antispam_system","mail_url","EditServer","webOption","dnsOption","mailOption","backupOption","sslOption","pluginsOption","dbOption","toggleOption","updatedServer","hostname","timezones","timezone","languages","language","web_backend_pool","v_dns_cluster","dns_cluster","EditVestaPlugins","Dovecot","config1","config_path1","config2","config_path2","config3","config_path3","config4","config_path4","config5","config_path5","config6","config_path6","config7","config_path7","config8","config_path8","getMailList","MailInfoBlock","webMail","hostName","selectedOption","setSelectedOption","imapHostName","smtpHostName","imapEncryption","smtpEncryption","imapPort","smtpPort","mailInfoBlockSelectOptions","EditMailAccount","autoreplyChecked","setAutoreplyChecked","quotaValue","newMailDomain","account","editMailAccount","autoreply","MAIL","fwd","fwd_only","transform","autoreply_message","send_email","webmail","getMailInfo","updateMail","antispam","antivirus","dkim","catchall","EditMailWrapper","isMailAccount","setIsMailAccount","Service","serviceName","AddMailAccount","addMailAccount","v_aliases","forward","AddMail","antiSpamChecked","antiVirusChecked","dkimChecked","addMail","AddMailWrapper","setDomain","updateDNS","recordId","record_id","resetPassword","confirmPassword","login","signIn","loginAs","loginas","signInAs","logout","logout_response","removeItem","EditDomainNameSystem","getDNSInfo","DNS","templates","template","exp","soa","ttl","EditDNSRecord","selectOptions","getDNSRecordInfo","updatedRecord","rec","val","priority","EditDNSWrapper","isDnsRecord","setIsDnsRecord","sslHomeOptions","sslHome","sslCertificate","sslKey","sslCertificateAuthority","sslSubject","sslAliases","sslNotBefore","sslNotAfter","sslSignature","sslPubKey","sslIssuer","EditWeb","webStat","statAuth","getDomainInfo","v_stats","ssl","letsencrypt","ftp_user","stats_user","updateWebDomain","onChangeAdditionalFtp","object","formatData","proxy_ext","ssl_subject","ssl_aliases","ssl_not_before","ssl_not_after","ssl_signature","ssl_pub_key","ssl_issuer","ssl_crt","ca","ssl_home","stats","ftp_users","ftp_user_prepath","EditPhp","max_execution_time","max_input_time","memory_limit","error_reporting","display_errors","post_max_size","upload_max_filesize","SUSPENDED","DATABASE","U_DISK","mb","DBUSER","CHARSET","HOST","TYPE","suspendedStatus","suspend_conf","handleSuspend","suspend_action","Databases","dbFav","dbAdmin","dbAdminLink","currentDatabaseData","db_admin","db_admin_link","dbDuplicate","dbFavDuplicate","databasesDuplicate","dbNames","domainNameSystems","domainNameSystem","Firewall","ACTION","PROTOCOL","COMMENT","PORT","Firewalls","firewalls","firewallFav","firewallExtension","firewall","currentFirewallData","firewallsDuplicate","firewallFavDuplicate","firewallNames","EditUser","updatedUser","updateUser","USER","email","convertObjectOfObjectsToArrayOfObjects","packages","fname","lname","Bind9","Mysql","max_connections","max_user_connections","wait_timeout","interactive_timeout","max_allowed_packet","dayjs","add","format","AddDomainNameSystem","addDomainNameSystem","AddDNSRecord","newDnsRecord","addDomainNameSystemRecord","AddDNSWrapper","RestoreSetting","checkItemFunc","restoreSetting","textTransform","displayBackupDetailName","restoreLinkParams","BackupRestoreSettings","backupDetailsData","setBackupDetailsData","backupDetails","handleRestore","restoreBackupSetting","reformattedData","cat","toLowerCase","backupDetailsDuplicate","backupDetail","backupDetailNames","udir","bulkRestore","listBackups","Backup","SIZE","RUNTIME","UPDATED","faFileDownload","Backups","backupFav","configureRestoreSettings","currentBackupData","backup_fav","backupDuplicate","backupFavDuplicate","backupsDuplicate","backupNames","ok","BackupWrapper","isBackupSettings","setIsBackupSettings","AddBanIP","userLanguage","getBanIps","chain","newUser","addBanIp","Banlist","CronJob","CMD","Min","MIN","HOUR","DAY","MONTH","WDAY","CronJobs","cronFav","cronJob","currentCronJobData","cron_reports","cron_fav","cronDuplicate","cronFavDuplicate","cronJobsDuplicate","cronJobNames","handleCronNotifications","Package","FNAME","LNAME","WEB_TEMPLATE","PROXY_TEMPLATE","DNS_TEMPLATE","SHELL","WEB_DOMAINS","WEB_ALIASES","DNS_DOMAINS","DNS_RECORDS","MAIL_DOMAINS","MAIL_ACCOUNTS","DATABASES","CRON_JOBS","BACKUPS","BANDWIDTH","DISK_QUOTA","NS","Packages","packagesFav","currentPackageData","packagesDuplicate","packagesFavDuplicate","packageNames","AddUser","vEmail","vNotify","getAllPackages","getAllLanguages","getPackageNames","addUser","Email","Language","Update","isUpdated","DESCR","Version","VERSION","ARCH","Release","RELEASE","Updates","updates","autoUpdate","updatesDuplicate","updateNames","UPDATES","Server","HOSTNAME","OS","LOADAVERAGE","Uptime","UPTIME","configure","height","viewBox","fill","xmlns","fill-rule","d","SYSTEM","CPU","Memory","MEM","RTIME","action_url","STATE","Servers","servers","handleConfigure","handleRestart","handleStop","onHandleAction","sys","serversDuplicate","serverNames","menuHeight","look","LANGUAGE","handleState","statClassName","activeName","onKeyPress","U_BANDWIDTH","U_USERS","spnd","SUSPENDED_USERS","domains","U_WEB_ALIASES","SUSPENDED_WEB","U_DNS_DOMAINS","records","U_DNS_RECORDS","SUSPENDED_DNS","U_MAIL_DOMAINS","accounts","U_MAIL_ACCOUNTS","SUSPENDED_MAIL","U_DATABASES","SUSPENDED_DB","jobs","U_CRON_JOBS","SUSPENDED_CRON","U_BACKUPS","MobileTopNav","Bell","data-name","BellUnread","Notifications","ajax","notification","removeNotification","deleteNotification","TOPIC","ID","NOTICE","marginBottom","Panel","smallNavigationClass","extraClass","signOut","Graphs","Statistics","Log","FIREWALL_SYSTEM","FILEMANAGER_KEY","SOFTACULOUS","Apps","showTopNav","MainNav","tabs","controlFocusedTabWithCallback","useCallback","currentActiveTabPositionInArray","newFocusedMenuTab","handleLeftArrowKey","handleRightArrowKey","handleTopNav","hideMenu","indexInArray","visibleNav","Exclusion","Array","isArray","ITEMS","renderExclusionItems","BackupExclusions","exclusions","exclusion","MailAccount","QUOTA","FWD","AUTOREPLY","MailAccounts","mailAccountsFav","mailAccount","currentMailData","mailAccountsDuplicate","mailAccountsFavDuplicate","mailAccountNames","bulkMailAccountAction","Mail","printStat","ANTIVIRUS","DKIM","ANTISPAM","CATCHALL","list_accounts_button","Mails","mails","mailFav","handleLogs","handleAddRecord","mailsDuplicate","mailFavDuplicate","mailNames","MailWrapper","mailDomain","setMailDomain","DnsRecord","dnsRecord","RECORD","PRIORITY","VALUE","DnsRecords","dnsRecordFav","dnsRecordsFav","dnsDuplicate","dns","dnsRecFavDuplicate","dnsRecordsDuplicate","dnsRecordNames","record","DomainNameSystem","RECORDS","SOA","TTL","Serial","SERIAL","Template","TPL","EXP","RECORDS_I18N","DomainNameSystems","dnsFav","currentDomainNameSystemData","Number","domainNameSystemsDuplicate","first","second","dnsFavDuplicate","domainNameSystemsNames","bulkDomainAction","DNSWrapper","isDnsRecords","setIsDnsRecords","Statistic","printName","Web","U_DISK_WEB","U_DISK_MAIL","U_DISK_DIRS","U_WEB_SSL","IP_OWNED","statistics","statistic","getStatisticsList","STATS","CONTACT","spnd_conf","spnd_action","userFav","handleLogin","currentUserData","userDuplicate","userFavDuplicate","usersDuplicate","userNames","selectedUsers","generateImagePath","period","rrd","Timer","setIsActive","interval","setInterval","countDown","clearInterval","RRD","RRDs","setData","periodI18N","rrds","periodClass","changePeriod","Yearly","dataDuplicate","Ban","TIME","CHAIN","delete_confirmation","BanLists","currentBanIpData","delete_url","total_amount","banIpsDuplicate","banIpNames","WebDomain","ALIAS","LETSENCRYPT","SSL","WEB_STATS","PROXY_SYSTEM","PROXY_SUPPORT","PROXY","BACKEND_SYSTEM","BACKEND_SUPPORT","BACKEND","spnd_confirmation","webFav","webDomain","currentWebDomainData","webDomainsDuplicate","webFavDuplicate","webDomainNames","SearchItem","RESULT","printLoginActionButton","edit_link","spnd_link","delete_link","Search","searchResults","sortByHandler","Logs","logs","LOG","ControlPanelContent","setHotkeysList","switchPanelTab","addNewObject","from","exact","component","scrollTo","top","TopPanel","menuItems","extraMenuItems","cls","route","renderMenuItems","link","renderExtraMenuItems","WebLogs","goBack","getWebLogs","LoginLayout","LoginForm","formValues","setFormValues","setErrorMessage","changeInputHandler","LOGIN","tabIndex","ServiceInfo","useParams","getServiceLogs","service_log","line","ReactHtmlParser","ForgotPassword","useLocation","completeStep1","completeStep2","password_confirm","reset","Submit","Confirm","Reset","library","Icon","App","AuthenticatedRoute","authenticated","rest","render","ReactDOM","store","createStore","rootReducer","composeWithDevTools","applyMiddleware","thunk","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.96e25cf6.chunk.js","sourcesContent":["import { ADD_FOCUSED_ELEMENT, ADD_ACTIVE_ELEMENT, REMOVE_ACTIVE_ELEMENT, REMOVE_FOCUSED_ELEMENT } from '../../actions/MainNavigation/mainNavigationTypes';\n\nconst INITIAL_STATE = {\n focusedElement: '',\n activeElement: '',\n adminMenuTabs: [\n '/list/user/',\n '/list/web/',\n '/list/dns/',\n '/list/mail/',\n '/list/db/',\n '/list/cron/',\n '/list/backup/',\n '/list/package/',\n '/list/ip/',\n '/list/rrd/',\n '/list/stats/',\n '/list/log/',\n '/list/updates/',\n '/list/firewall/',\n '/list/directory/',\n '/softaculous/',\n '/list/server/'\n ],\n userMenuTabs: [\n '/list/user/',\n '/list/web/',\n '/list/dns/',\n '/list/mail/',\n '/list/db/',\n '/list/cron/',\n '/list/backup/',\n '/list/stats/',\n '/list/log/',\n '/list/directory/',\n '/softaculous/',\n ]\n};\n\nconst reducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case ADD_FOCUSED_ELEMENT:\n return {\n ...state, focusedElement: action.value,\n };\n\n case REMOVE_FOCUSED_ELEMENT:\n return {\n ...state, focusedElement: action.value,\n };\n\n case ADD_ACTIVE_ELEMENT:\n return {\n ...state, activeElement: action.value,\n };\n\n case REMOVE_ACTIVE_ELEMENT:\n return {\n ...state, activeElement: action.value,\n };\n\n default: return state;\n }\n};\n\nexport default reducer;","export const ADD_FOCUSED_ELEMENT = 'ADD_FOCUSED_ELEMENT';\nexport const REMOVE_FOCUSED_ELEMENT = 'REMOVE_FOCUSED_ELEMENT';\nexport const ADD_ACTIVE_ELEMENT = 'ADD_ACTIVE_ELEMENT';\nexport const REMOVE_ACTIVE_ELEMENT = 'REMOVE_ACTIVE_ELEMENT';","import { ADD_CPANEL_FOCUSED_ELEMENT, REMOVE_CPANEL_FOCUSED_ELEMENT } from '../../actions/ControlPanelContent/controlPanelContentTypes';\n\nconst INITIAL_STATE = {\n controlPanelFocusedElement: ''\n};\n\nconst reducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case ADD_CPANEL_FOCUSED_ELEMENT:\n return {\n ...state, controlPanelFocusedElement: action.value,\n };\n\n case REMOVE_CPANEL_FOCUSED_ELEMENT:\n return {\n ...state, controlPanelFocusedElement: '',\n };\n\n default: return state;\n }\n};\n\nexport default reducer;","export const ADD_CPANEL_FOCUSED_ELEMENT = 'ADD_CPANEL_FOCUSED_ELEMENT';\nexport const REMOVE_CPANEL_FOCUSED_ELEMENT = 'REMOVE_CPANEL_FOCUSED_ELEMENT';","import { ADD_NOTIFICATIONS, REMOVE_NOTIFICATIONS } from 'src/actions/Notification/notificationTypes';\n\nconst INITIAL_STATE = {\n notifications: null\n};\n\nconst notificationReducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case ADD_NOTIFICATIONS:\n return {\n ...state,\n notifications: action.value,\n };\n\n case REMOVE_NOTIFICATIONS:\n return {\n ...state,\n notifications: action.value,\n };\n\n default: return state;\n }\n};\n\nexport default notificationReducer;\n","export const ADD_NOTIFICATIONS = 'ADD_NOTIFICATIONS';\nexport const REMOVE_NOTIFICATIONS = 'REMOVE_NOTIFICATIONS';\n","import { REFRESH_COUNTERS } from 'src/actions/MenuCounters/menuCounterTypes';\n\nconst INITIAL_STATE = {\n user: {},\n};\n\nconst menuCounterReducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case REFRESH_COUNTERS:\n return {\n ...state,\n user: action.value.user,\n };\n\n default: return state;\n }\n};\n\nexport default menuCounterReducer;\n","export const REFRESH_COUNTERS = 'REFRESH_COUNTERS';","import { LOGGED_OUT_AS, LOGIN, LOGOUT, CHECK_AUTH } from '../../actions/Session/sessionTypes';\n\nconst INITIAL_STATE = {\n token: '',\n error: '',\n session: {},\n i18n: {},\n userName: '',\n panel: {}\n};\n\nconst sessionReducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case LOGIN:\n return {\n ...state,\n token: action.value.token,\n session: action.value.session,\n userName: action.value.userName,\n i18n: action.value.i18n || {},\n panel: action.value.panel,\n error: action.value.error\n };\n\n case LOGOUT:\n return {\n ...state,\n token: action.value.token,\n session: action.value.session,\n userName: action.value.userName,\n i18n: action.value.i18n || {},\n panel: action.value.panel,\n error: action.value.error\n };\n\n case LOGGED_OUT_AS:\n return {\n ...state,\n token: action.value.token,\n session: action.value.session,\n userName: action.value.userName,\n i18n: action.value.i18n || {},\n panel: action.value.panel,\n error: action.value.error\n };\n\n case CHECK_AUTH: return {\n ...state,\n token: action.value.token,\n session: action.value.session,\n userName: action.value.userName,\n i18n: action.value.i18n || {},\n panel: action.value.panel,\n error: action.value.error\n };\n\n default: return state;\n }\n};\n\nexport default sessionReducer;\n","export const LOGIN = 'LOGIN';\nexport const LOGOUT = 'LOGOUT';\nexport const LOGIN_AS = 'LOGIN_AS';\nexport const CHECK_AUTH = 'CHECK_AUTH';\nexport const LOGGED_OUT_AS = 'LOGGED_OUT_AS';\nexport const RESET_PASSWORD = 'RESET_PASSWORD';","import { combineReducers } from 'redux';\nimport mainNavigationReducer from './MainNavigation/mainNavigationReducer';\nimport controlPanelContentReducer from './ControlPanelContent/controlPanelContentReducer';\nimport notificationReducer from './Notification/notificationReducer';\nimport menuCounterReducer from './MenuCounters/menuCounterReducer';\nimport sessionReducer from './Session/sessionReducer';\n\nexport default combineReducers({\n mainNavigation: mainNavigationReducer,\n controlPanelContent: controlPanelContentReducer,\n notifications: notificationReducer,\n menuCounters: menuCounterReducer,\n session: sessionReducer,\n});","import React from 'react';\nimport './Spinner.scss';\n\nconst Spinner = () => {\n return (\n <div className=\"spinner-wrapper\">\n <div className=\"progress\">\n <div className=\"progress-bar progress-bar-striped progress-bar-animated\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style={{ width: \"100%\" }}></div>\n </div>\n </div>\n );\n}\n\nexport default Spinner;","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport './Dropdown.scss';\n\nconst Dropdown = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n const changeSorting = (field, order, props) => {\n if (!props.isActive) {\n return;\n } else {\n props.changeSorting(field, order);\n }\n }\n\n const sort = (sorting) => {\n if (sorting === \"Type\") {\n return i18n.type;\n } else if (sorting === \"Size\") {\n return i18n.size;\n } else if (sorting === \"Date\") {\n return i18n.date;\n } else if (sorting === \"Name\") {\n return i18n.name;\n }\n }\n\n const button = (sorting, order) => {\n if (order === \"descending\") {\n return (\n <button type=\"button\" className=\"btn btn-secondary\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {sort(sorting)}\n <span className=\"arrow-down\">&#8595;</span>\n </button>\n );\n } else {\n return (\n <button type=\"button\" className=\"btn btn-secondary\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {sort(sorting)}\n <span>&#8593;</span>\n </button>\n );\n }\n }\n\n return (\n <div class=\"btn-group\">\n {button(props.sorting, props.order)}\n <div class=\"dropdown-menu\">\n <ul className=\"dropdown-list\">\n <li>\n <span className={props.sorting === \"Type\" && props.order === \"descending\" ? \"dropdown-item active\" : \"dropdown-item\"} onClick={() => changeSorting(\"Type\", \"descending\", props)}>{i18n.type}<span className=\"arrow-down\">&#8595;</span></span>\n <span className={props.sorting === \"Type\" && props.order === \"ascending\" ? \"dropdown-item active\" : \"dropdown-item\"} onClick={() => changeSorting(\"Type\", \"ascending\", props)}><span>&#8593;</span></span>\n </li>\n <li>\n <span className={props.sorting === \"Size\" && props.order === \"descending\" ? \"dropdown-item active\" : \"dropdown-item\"} onClick={() => changeSorting(\"Size\", \"descending\", props)}>{i18n.size}<span className=\"arrow-down\">&#8595;</span></span>\n <span className={props.sorting === \"Size\" && props.order === \"ascending\" ? \"dropdown-item active\" : \"dropdown-item\"} onClick={() => changeSorting(\"Size\", \"ascending\", props)}><span>&#8593;</span></span>\n </li>\n <li>\n <span className={props.sorting === \"Date\" && props.order === \"descending\" ? \"dropdown-item active\" : \"dropdown-item\"} onClick={() => changeSorting(\"Date\", \"descending\", props)}>{i18n.date}<span className=\"arrow-down\">&#8595;</span></span>\n <span className={props.sorting === \"Date\" && props.order === \"ascending\" ? \"dropdown-item active\" : \"dropdown-item\"} onClick={() => changeSorting(\"Date\", \"ascending\", props)}><span>&#8593;</span></span>\n </li>\n <li>\n <span className={props.sorting === \"Name\" && props.order === \"descending\" ? \"dropdown-item active\" : \"dropdown-item\"} onClick={() => changeSorting(\"Name\", \"descending\", props)}>{i18n.name}<span className=\"arrow-down\">&#8595;</span></span>\n <span className={props.sorting === \"Name\" && props.order === \"ascending\" ? \"dropdown-item active\" : \"dropdown-item\"} onClick={() => changeSorting(\"Name\", \"ascending\", props)}><span>&#8593;</span></span>\n </li>\n </ul>\n </div>\n </div>\n );\n}\n\nexport default Dropdown;","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport Dropdown from './Dropdown/Dropdown';\nimport './Path.scss';\n\nconst Path = ({ path, isActive, className, openDirectory, changeSorting, sorting, order }) => {\n const { user } = useSelector(state => state.menuCounters);\n\n const clickablePath = () => {\n let splitPath = path.split('/');\n splitPath.splice(0, 3);\n\n if (path !== user.HOME) {\n return (\n splitPath.map((item, index) => <span className=\"clickable\" key={index} onClick={() => openDirectoryHandler(index)}>&nbsp;/&nbsp;{item}</span>)\n );\n }\n }\n\n const openDirectoryHandler = index => {\n let pathArray = path.split('/');\n\n if (!isActive) {\n return;\n } else {\n if (index !== undefined) {\n let newPathArray = pathArray.splice(0, index + 4);\n let newPath = newPathArray.join('/');\n openDirectory(newPath);\n }\n }\n }\n\n return (\n <div className={className}>\n <div className=\"clickable-wrapper\">\n <span className=\"clickable-path\">\n <span className=\"clickable\" onClick={() => openDirectory(user.HOME)}>{user.HOME}</span>\n {clickablePath()}\n </span>\n </div>\n <Dropdown changeSorting={changeSorting} sorting={sorting} order={order} isActive={isActive} />\n </div>\n );\n}\n\nexport default Path;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faJs, faCss3, faPhp, faHtml5, faSass } from '@fortawesome/free-brands-svg-icons';\nimport './Row.scss';\nimport { connect } from 'react-redux';\n\nclass Row extends Component {\n static propTypes = {\n selectMultiple: PropTypes.func,\n selectOnClick: PropTypes.func,\n openDirectory: PropTypes.func,\n modalVisible: PropTypes.bool,\n isActiveList: PropTypes.bool,\n activeRow: PropTypes.bool,\n selected: PropTypes.func,\n download: PropTypes.func,\n cursor: PropTypes.number,\n path: PropTypes.string,\n key: PropTypes.number,\n data: PropTypes.array\n }\n\n componentDidMount = () => {\n document.addEventListener(\"keydown\", this.openOnEnter);\n }\n\n componentWillUnmount = () => {\n document.removeEventListener(\"keydown\", this.openOnEnter);\n }\n\n openOnEnter = (e) => {\n const { activeRow, data: { name, type }, isActiveList, modalVisible, openDirectory, cursor, download, path } = this.props;\n\n if (modalVisible || !activeRow || !isActiveList) {\n return;\n }\n\n if (e.keyCode === 13) {\n if (this.isArchive(name) || type === \"l\") {\n download();\n } else if (this.isFile(type) && cursor !== 0) {\n this.changePath(path, name);\n } else {\n openDirectory(name);\n }\n }\n }\n\n openItem = () => {\n const { data: { type, name }, openDirectory, download, path, isActiveList } = this.props;\n\n if (!isActiveList) {\n return;\n }\n\n if (this.isArchive(name) || type === \"l\" || name.match('.mp4')) {\n return download();\n } else if (this.isFile(type)) {\n return this.changePath(path, name);\n } else if (type === 'd') {\n return openDirectory(name);\n }\n }\n\n changePath = (path, name) => {\n this.props.history.push({\n pathname: '/list/directory/preview/',\n search: `?path=${path}/${name}`\n });\n }\n\n selectRow = (e) => {\n const { data: { name, permissions, type }, selectMultiple, selectOnClick, cursor, activeRow } = this.props;\n\n if (e.ctrlKey && cursor !== 0) {\n selectMultiple();\n }\n\n if (activeRow) {\n return;\n }\n\n selectOnClick(cursor, name, permissions, type);\n }\n\n className = () => {\n const { activeRow, selected, isActiveList } = this.props;\n\n if (isActiveList) {\n let isActive = activeRow ? 'active' : '';\n let isSelected = selected ? 'selected' : '';\n return isActive.length ? isActive : isSelected;\n } else {\n let isActive = activeRow ? 'inactive' : '';\n let isSelected = selected ? 'inactive-selected' : '';\n return isActive.length ? isActive : isSelected;\n }\n }\n\n sizeFormatter = (bytes, decimals) => {\n if (bytes === undefined || this.props.data.type === \"d\") {\n return null;\n };\n\n if (bytes === \"0\") {\n return <span className=\"value\">0 <span className=\"unit\">b</span></span>;\n }\n\n let k = 1024,\n dm = decimals <= 0 ? 0 : decimals || 2,\n sizes = ['b', 'kb', 'Mb', 'GB'],\n i = Math.floor(Math.log(bytes) / Math.log(k));\n return (<span className=\"value\">{parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} <span className=\"unit\">{sizes[i]}</span></span>);\n }\n\n dateFormatter = (fDate) => {\n if (fDate === undefined) {\n return null;\n }\n\n let date = new Date(fDate),\n months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n getDay = date.getDate(),\n getMonth = this.props.session.i18n[months[date.getMonth()]];\n return (<span className=\"date\">{getMonth} {getDay}</span>);\n }\n\n glyph = () => {\n const { data: { type, name } } = this.props;\n\n if (type === 'd') {\n return <FontAwesomeIcon icon=\"folder-open\" className=\"folder-open\" />;\n }\n\n if (this.isFile(type)) {\n if (this.isArchive(name)) {\n return <FontAwesomeIcon icon=\"book\" className=\"archive\" />;\n } else if (name.match(/png|jpg|jpeg|gif/g)) {\n return <FontAwesomeIcon icon=\"image\" className=\"image\" />;\n } else if (name.match('.mp4') !== null) {\n return <FontAwesomeIcon icon=\"download\" className=\"download\" />;\n } else if (name.match('.txt')) {\n return <FontAwesomeIcon icon=\"file-alt\" className=\"file-alt\" />;\n } else if (name.match('.js')) {\n return <FontAwesomeIcon icon={faJs} className=\"js\" />;\n } else if (name.match('.html')) {\n return <FontAwesomeIcon icon={faHtml5} className=\"html5\" />;\n } else if (name.match('.php')) {\n return <FontAwesomeIcon icon={faPhp} className=\"php\" />;\n } else if (name.match(/.scss/i)) {\n return <FontAwesomeIcon icon={faSass} className=\"sass\" />;\n } else if (name.match(/.css/i)) {\n return <FontAwesomeIcon icon={faCss3} className=\"css3\" />;\n } else {\n return <FontAwesomeIcon icon=\"file\" className=\"file\" />;\n }\n }\n\n if (type === \"l\") {\n return <FontAwesomeIcon icon=\"download\" className=\"download\" />;\n }\n }\n\n isArchive(name) {\n return name.match(/zip|tgz|tar.gz|gzip|tbz|tar.bz|gz|zip|tar|rar/g);\n }\n\n isFile(type) {\n return type === 'f';\n }\n\n render() {\n const { data: { name, owner, permissions, size, date, time } } = this.props;\n return (\n <li className={this.className()} onClick={this.selectRow} >\n <span className=\"marker\"></span>\n {this.glyph()}\n <span className=\"fName\"><span className=\"name\" onClick={(e) => this.openItem(e)}>{this.props.cursor === 0 ? \"..\" : name}</span></span>\n <span className=\"fPermissions\">{permissions}</span>\n <span className=\"fOwner\">{owner}</span>\n <span className=\"fSize\">{this.sizeFormatter(size)}</span>\n <span className=\"fDate\">{this.dateFormatter(date)}</span>\n <span className=\"fTime\">{time}</span>\n </li>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n session: state.session\n }\n}\n\nexport default connect(mapStateToProps)(withRouter(Row));\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Spinner from '../../Spinner/Spinner';\nimport Path from '../../Path/Path';\nimport Row from '../Row/Row';\nimport '../List.scss';\n\nclass DirectoryList extends Component {\n static propTypes = {\n changePathAfterToggle: PropTypes.func,\n openCertainDirectory: PropTypes.func,\n openDirectory: PropTypes.func,\n passSelection: PropTypes.func,\n modalVisible: PropTypes.bool,\n changePath: PropTypes.func,\n addToPath: PropTypes.func,\n history: PropTypes.object,\n isActive: PropTypes.bool,\n cursor: PropTypes.number,\n passData: PropTypes.func,\n download: PropTypes.func,\n moveBack: PropTypes.func,\n onClick: PropTypes.func,\n loading: PropTypes.bool,\n path: PropTypes.string,\n list: PropTypes.string,\n data: PropTypes.array\n }\n\n state = {\n orderType: \"descending\",\n sortingType: \"Type\",\n itemsSelected: [],\n cursor: 0\n };\n\n UNSAFE_componentWillMount = () => {\n if (localStorage.getItem(`${this.props.list}Sorting`) && localStorage.getItem(`${this.props.list}Order`)) {\n this.setState({ sortingType: localStorage.getItem(`${this.props.list}Sorting`), orderType: localStorage.getItem(`${this.props.list}Order`) });\n }\n }\n\n componentDidMount = () => {\n document.addEventListener(\"keydown\", this.handleLiSelection);\n document.addEventListener(\"keydown\", this.moveBackOnButton);\n }\n\n componentWillUnmount = () => {\n document.removeEventListener(\"keydown\", this.handleLiSelection);\n document.removeEventListener(\"keydown\", this.moveBackOnButton);\n }\n\n cacheSorting = () => {\n localStorage.setItem(`${this.props.list}Sorting`, this.state.sortingType);\n localStorage.setItem(`${this.props.list}Order`, this.state.orderType);\n }\n\n moveBackOnButton = (e) => {\n if (e.keyCode === 8 && !this.props.modalVisible && this.props.isActive) {\n this.moveBack();\n }\n }\n\n moveBack = () => {\n if (this.isHomeDirectory()) {\n return;\n }\n\n this.props.moveBack();\n }\n\n isHomeDirectory = () => {\n return this.props.path === this.props.rootDir;\n }\n\n toggleActiveList = () => {\n const { history, path, list, onClick, changePathAfterToggle, isActive } = this.props;\n\n if (!isActive) {\n onClick(list);\n changePathAfterToggle(path);\n history.push({\n pathname: '/list/directory/',\n search: `?path=${path}`\n });\n this.cacheActiveWindowAndPaths();\n this.passData();\n }\n }\n\n cacheActiveWindowAndPaths = () => {\n localStorage.setItem(\"activeWindow\", this.props.list);\n localStorage.setItem(`${this.props.list}ListPath`, this.props.path);\n localStorage.setItem(`${this.props.list}ListPath`, this.props.path);\n }\n\n isSelected = (i) => {\n return this.state.itemsSelected.indexOf(i) !== -1;\n }\n\n addToSelection(i) {\n const { itemsSelected } = this.state;\n const result = [...itemsSelected];\n const duplicate = itemsSelected.indexOf(i);\n if (duplicate !== -1) {\n result.splice(duplicate, 1);\n } else {\n if (i === \"\") {\n return;\n }\n\n result.push(i)\n }\n\n this.setState({ itemsSelected: result });\n this.props.passSelection(result);\n }\n\n handleLiSelection = (e) => {\n const { data, isActive, modalVisible, changePath, path } = this.props;\n const { cursor } = this.state;\n\n if (!isActive || modalVisible) {\n return;\n }\n\n if (e.keyCode === 40) {\n if (cursor === data.listing.length - 1) {\n return;\n }\n\n if (e.shiftKey) {\n let name = data.listing[cursor].name;\n this.addToSelection(name);\n }\n\n this.setState({ cursor: cursor + 1 });\n this.passData();\n changePath(path);\n }\n\n if (e.keyCode === 38) {\n if (cursor === 0) {\n return;\n }\n\n if (e.shiftKey) {\n let name = data.listing[cursor].name;\n this.addToSelection(name);\n }\n\n this.setState({ cursor: cursor - 1 });\n this.passData();\n changePath(path);\n }\n }\n\n resetData = () => {\n this.setState({ cursor: 0, itemsSelected: [] });\n }\n\n passData = () => {\n const { data, passData } = this.props;\n const { name, permissions, type } = data.listing[this.state.cursor];\n passData(this.state.cursor, name, permissions, type);\n }\n\n openDirectory = (name) => {\n const { history, path, addToPath, openDirectory } = this.props;\n\n history.push({\n pathname: '/list/directory/',\n search: `?path=${path}/${name}`\n });\n addToPath(name);\n openDirectory();\n this.setState({ cursor: 0 });\n }\n\n openCertainDirectory = (path) => {\n const { history, openCertainDirectory, changePath } = this.props;\n\n if (this.isHomeDirectory()) {\n return;\n }\n\n history.push({\n pathname: '/list/directory/',\n search: `?path=${path}`\n });\n changePath(path);\n openCertainDirectory();\n }\n\n changeSorting = (sortingType, orderType) => {\n this.setState({ sortingType, orderType }, () => this.cacheSorting());\n }\n\n sortByType = (a, b) => {\n if (this.state.orderType === \"descending\" && a.name !== \"\") {\n return a.type.localeCompare(b.type);\n } else if (this.state.orderType === \"ascending\" && b.name !== \"\") {\n return b.type.localeCompare(a.type);\n }\n }\n\n sortBySize = (a, b) => {\n if (this.state.orderType === \"descending\" && a.name !== \"\") {\n return a.size - b.size;\n } else if (this.state.orderType === \"ascending\" && b.name !== \"\") {\n return b.size - a.size;\n }\n }\n\n sortByDate = (a, b) => {\n if (this.state.orderType === \"descending\" && a.name !== \"\") {\n return new Date(a.date) - new Date(b.date);\n } else if (this.state.orderType === \"ascending\" && a.name !== \"\") {\n return new Date(b.date) - new Date(a.date);\n }\n }\n\n sortByName = (a, b) => {\n if (this.state.orderType === \"descending\" && a.name !== \"\") {\n return a.name.localeCompare(b.name);\n } else if (this.state.orderType === \"ascending\" && b.name !== \"\") {\n return b.name.localeCompare(a.name);\n }\n }\n\n sortData = (a, b) => {\n switch (this.state.sortingType) {\n case \"Type\": return this.sortByType(a, b);\n case \"Size\": if (a.type !== \"d\" && b.type !== \"d\") { return this.sortBySize(a, b) }; break;\n case \"Date\": return this.sortByDate(a, b);\n case \"Name\": return this.sortByName(a, b);\n default: return this.sortByType(a, b);\n }\n }\n\n rows = () => {\n const { isActive, modalVisible, path, download } = this.props;\n const { cursor } = this.state;\n const data = { ...this.props.data };\n\n if (data.listing.length !== 0) {\n let sortedData = data.listing.sort((a, b) => this.sortData(a, b));\n return (\n sortedData.map((item, key) =>\n (item.name !== \"\" && sortedData.length !== 0) ?\n (<Row key={key}\n selectOnClick={(cursor, name, permissions, type) => {\n this.setState({ cursor });\n this.props.passData(cursor, name, permissions, type);\n }}\n selectMultiple={() => this.addToSelection(item.name)}\n selected={this.isSelected(item.name)}\n openDirectory={this.openDirectory}\n modalVisible={modalVisible}\n activeRow={key === cursor}\n isActiveList={isActive}\n download={download}\n cursor={key}\n data={item}\n path={path} />) :\n (<Row key={key}\n selectOnClick={(cursor, name, permissions, type) => {\n this.setState({ cursor });\n this.props.passData(cursor, name, permissions, type);\n }}\n openDirectory={this.moveBack}\n modalVisible={modalVisible}\n activeRow={key === cursor}\n isActiveList={isActive}\n cursor={key}\n data={item}\n path={path} />))\n );\n }\n }\n\n render() {\n const { isActive, path, loading } = this.props;\n return (\n <div className={isActive ? \"list active\" : \"list\"} onClick={this.toggleActiveList}>\n <Path className={isActive ? \"active-path\" : \"path\"}\n openDirectory={this.openCertainDirectory}\n changeSorting={this.changeSorting}\n sorting={this.state.sortingType}\n order={this.state.orderType}\n isActive={isActive}\n path={path} />\n <div className=\"list-container\">\n <ul>\n {loading && isActive ? <Spinner /> : this.rows()}\n </ul>\n </div>\n </div>\n );\n }\n}\n\nexport default DirectoryList;\n","import React from 'react';\nimport './ProgressBar.scss';\n\nconst ProgressBar = (props) => {\n return (\n <div class=\"progress\">\n <div class=\"progress-bar\" role=\"progressbar\" style={{ width: `${props.progress}%` }} aria-valuenow={props.progress} aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\n </div>\n );\n}\n\nexport default ProgressBar;","import React, { useEffect } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useSelector } from 'react-redux';\nimport './Hotkeys.scss';\n\nconst Hotkeys = props => {\n const { i18n } = useSelector(state => state.session);\n\n useEffect(() => {\n window.addEventListener(\"keyup\", toggleShortcutsLit);\n\n return () => window.removeEventListener(\"keyup\", toggleShortcutsLit);\n }, [props.reference]);\n\n const toggleShortcutsLit = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (event.keyCode === 72 && !isSearchInputFocused) {\n props.toggleHotkeys();\n }\n }\n\n return (\n <div className=\"hotkeys-list hide\" ref={props.reference}>\n <div className=\"head\">\n <div className=\"name\">{i18n.Shortcuts}</div>\n <div className=\"close\" onClick={() => props.toggleHotkeys()}><FontAwesomeIcon icon=\"times\" /></div>\n </div>\n <div className=\"body\">\n <ul>\n <li>\n <span className=\"name\">u</span>\n <span className=\"description\">{i18n['Upload']}</span>\n </li>\n <li>\n <span className=\"name\">n</span>\n <span className=\"description\">{i18n['New Fille']}</span>\n </li>\n <li>\n <span className=\"name\">F7</span>\n <span className=\"description\">{i18n['New Folder']}</span>\n </li>\n <li>\n <span className=\"name\">d</span>\n <span className=\"description\">{i18n['Download']}</span>\n </li>\n <li className=\"space-top\">\n <span className=\"name\">F2 / Shift + F6</span>\n <span className=\"description\">{i18n['Rename']}</span>\n </li>\n <li>\n <span className=\"name\">m</span>\n <span className=\"description\">{i18n['Move']}</span>\n </li>\n <li>\n <span className=\"name\">F5</span>\n <span className=\"description\">{i18n['Copy']}</span>\n </li>\n <li>\n <span className=\"name\">F5</span>\n <span className=\"description\">{i18n['Copy']}</span>\n </li>\n <li>\n <span className=\"name\">F8 / Del</span>\n <span className=\"description\">{i18n['Delete']}</span>\n </li>\n <li>\n <span className=\"name\">F2</span>\n <span className=\"description\">{i18n['Save File (in text editor)']}</span>\n </li>\n <li>\n <span className=\"name\">h</span>\n <span className=\"description\">{i18n['Display/Close shortcuts']}</span>\n </li>\n <li>\n <span className=\"name\">Esc</span>\n <span className=\"description\">{i18n['Close Popup / Cancel']}</span>\n </li>\n <li>\n <span className=\"name\">F10</span>\n <span className=\"description\">{i18n['Close Preview / Editor']}</span>\n </li>\n </ul>\n <ul>\n <li>\n <span className=\"name\">&#8593;</span>\n <span className=\"description\">{i18n['Move Cursor Up']}</span>\n </li>\n <li>\n <span className=\"name\">&#8595;</span>\n <span className=\"description\">{i18n['Move Cursor Down']}</span>\n </li>\n <li>\n <span className=\"name\">&#8592;</span>\n <span className=\"description\">{i18n['Switch to Left Tab']}</span>\n </li>\n <li>\n <span className=\"name\">&#8594;</span>\n <span className=\"description\">{i18n['Switch to Right Tab']}</span>\n </li>\n <li>\n <span className=\"name\">a</span>\n <span className=\"description\">{i18n['Archive']}</span>\n </li>\n <li>\n <span className=\"name\">Enter</span>\n <span className=\"description\">{i18n['Open File / Enter Directory']}</span>\n </li>\n <li>\n <span className=\"name\">F4</span>\n <span className=\"description\">{i18n['Edit File']}</span>\n </li>\n <li>\n <span className=\"name\">Backspace</span>\n <span className=\"description\">{i18n['Go to Parent Directory']}</span>\n </li>\n <li>\n <span className=\"name\">Ctr + Click</span>\n <span className=\"description\">{i18n['Add File to the Current Selection']}</span>\n </li>\n <li>\n <span className=\"name\">Shift + Cursor up/down</span>\n <span className=\"description\">{i18n['Select Bunch of Files']}</span>\n </li>\n </ul>\n </div>\n </div>\n );\n}\n\nexport default Hotkeys;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst AddFile = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h3 className=\"modal-title\" >{i18n['Create file']}</h3>\n </div>\n <div className=\"modal-body\">\n <input type=\"text\" ref={props.reference}></input>\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n.Cancel}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={props.save}>{i18n.Create}</button>\n </div>\n </div>\n );\n}\n\nexport default AddFile;","import React from 'react';\nimport { useSelector } from 'react-redux';\n\n\nconst AddDirectory = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h3 className=\"modal-title directory\" >{i18n['Create directory']}</h3>\n </div>\n <div className=\"modal-body\">\n <input type=\"text\" ref={props.reference} autoFocus></input>\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n.Cancel}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={props.save}>{i18n.Create}</button>\n </div>\n </div>\n );\n}\n\nexport default AddDirectory;","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst Rename = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content rename\">\n <div className=\"modal-header\">\n <h3 className=\"modal-title rename\">{i18n['Rename']} <span className=\"quot\">&quot;{props.fName}&quot;</span></h3>\n </div>\n <div className=\"modal-body\">\n <input type=\"text\" autoFocus defaultValue={props.fName} onChange={props.onChange} ref={props.reference}></input>\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n['Cancel']}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={props.save}>{i18n['Rename']}</button>\n </div>\n </div>\n );\n}\n\nexport default Rename;","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst Delete = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content delete\">\n <div className=\"modal-header\">\n {props.items > 0 ?\n <h3>{i18n['Delete items']} <span className=\"quot\">({props.items})</span> ?</h3> :\n <h3>{i18n['Are you sure you want to delete']} <span className=\"quot\">&quot;{props.fName}&quot;</span>?</h3>}\n </div>\n <div className=\"modal-footer lower\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n['Cancel']}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={props.save} autoFocus>{i18n['Delete']}</button>\n </div>\n </div>\n );\n}\n\nexport default Delete;","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst NothingSelected = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content nothing-selected\">\n <div className=\"header\">\n {props.notAvailable ? <h3>{i18n['Directory download not available in current version']}</h3> : <h3>{i18n['No file selected']}</h3>}\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n['Close']}</button>\n </div>\n </div>\n );\n}\n\nexport default NothingSelected;","import React, { Component } from 'react';\nimport classNames from 'classname';\nimport { connect } from 'react-redux';\n\nconst defaultPermissions = {\n owner: {\n read: 0,\n write: 0,\n execute: 0,\n },\n group: {\n read: 0,\n write: 0,\n execute: 0,\n },\n others: {\n read: 0,\n write: 0,\n execute: 0,\n },\n}\n\nclass Permissions extends Component {\n constructor(props) {\n super(props);\n this.state = {\n permissions: this.decode(this.props.permissions) || defaultPermissions,\n inputInvalid: false,\n }\n }\n\n inArray(number, array) {\n return !!~array.indexOf(number);\n }\n\n decodeSingleNumber = (string) => {\n const number = parseInt(string, 0);\n\n return {\n read: this.inArray(number, [4, 5, 6, 7]) ? 4 : 0,\n write: this.inArray(number, [2, 3, 6, 7]) ? 2 : 0,\n execute: this.inArray(number, [1, 3, 5, 7]) ? 1 : 0\n };\n }\n\n isValid(numbers = '') {\n if (numbers.length !== 3 || numbers === '000' || numbers.match(/[A-Za-z]/)) {\n return false;\n }\n\n return numbers.split('').find((number) => parseInt(number, 0) < 0 || parseInt(number, 0) > 7) === undefined;\n }\n\n decode(numbers) {\n if (!this.isValid(numbers)) {\n return null;\n }\n\n const numbersArray = numbers.split('');\n const result = numbersArray.map(this.decodeSingleNumber);\n return { owner: result[0], group: result[1], others: result[2] };\n }\n\n encode() {\n function sumPermissions(permissionObject) {\n return Object.values(permissionObject).map((number) => parseInt(number, 0)).reduce((acc, n) => acc + n, 0);\n }\n return ['owner', 'group', 'others'].reduce((acc, role) => {\n const roleObject = this.state.permissions[role];\n return acc + sumPermissions(roleObject);\n }, '');\n }\n\n onChangeForm = (event) => {\n const checkbox = event.target;\n const [role, permissionName] = checkbox.name.split('_');\n this.setState({\n permissions: {\n ...this.state.permissions,\n [role]: {\n ...this.state.permissions[role],\n [permissionName]: checkbox.checked ? checkbox.value : 0,\n }\n }\n }, (state) => {\n this.inputRef.value = this.encode();\n this.props.changePermissions(this.inputRef.value);\n });\n }\n\n handleInputChange = (event) => {\n const value = event.target.value;\n if (!this.isValid(value)) {\n return this.setState({ inputInvalid: true });\n }\n\n this.setState({\n permissions: this.decode(value),\n inputInvalid: false,\n });\n this.props.changePermissions(this.inputRef.value);\n }\n\n render() {\n const { i18n } = this.props.session;\n const { inputInvalid } = this.state;\n const { close, save, fName } = this.props;\n const inputClasses = classNames({\n 'form-control total': true,\n 'error': inputInvalid,\n });\n\n return (\n <div className=\"modal-content permissions\">\n <div className=\"modal-header\">\n <h3 className=\"modal-title perms\">{i18n['Change Rights']} <span className=\"quot\">&quot;{fName}&quot;</span></h3>\n </div>\n <form name=\"form\" onChange={this.onChangeForm}>\n <div>\n <label><input type=\"checkbox\" name={'owner_read'} value=\"4\" checked={!!this.state.permissions[\"owner\"].read} id=\"read\" />{i18n['read by owner']}</label>\n <label><input type=\"checkbox\" name={'owner_write'} value=\"2\" checked={!!this.state.permissions[\"owner\"].write} />{i18n['write by owner']}</label>\n <label><input type=\"checkbox\" name={'owner_execute'} value=\"1\" checked={!!this.state.permissions[\"owner\"].execute} />{i18n['execute/search by owner']}</label>\n </div>\n <div>\n <label><input type=\"checkbox\" name={'group_read'} value=\"4\" checked={!!this.state.permissions[\"group\"].read} id=\"read\" />{i18n['read by group']}</label>\n <label><input type=\"checkbox\" name={'group_write'} value=\"2\" checked={!!this.state.permissions[\"group\"].write} />{i18n['write by group']}</label>\n <label><input type=\"checkbox\" name={'group_execute'} value=\"1\" checked={!!this.state.permissions[\"group\"].execute} />{i18n['execute/search by group']}</label>\n </div>\n <div>\n <label><input type=\"checkbox\" name={'others_read'} value=\"4\" checked={!!this.state.permissions[\"others\"].read} id=\"read\" />{i18n['read by others']}</label>\n <label><input type=\"checkbox\" name={'others_write'} value=\"2\" checked={!!this.state.permissions[\"others\"].write} />{i18n['write by others']}</label>\n <label><input type=\"checkbox\" name={'others_execute'} value=\"1\" checked={!!this.state.permissions[\"others\"].execute} />{i18n['execute/search by others']}</label>\n </div>\n </form>\n <input type=\"text\" className={inputClasses} defaultValue={this.encode()} ref={(ref) => this.inputRef = ref} onChange={this.handleInputChange} maxLength=\"3\" />\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={close}>{i18n['Cancel']}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={save} disabled={inputInvalid}>{i18n['OK']}</button>\n </div>\n </div>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n session: state.session\n }\n}\n\nexport default connect(mapStateToProps)(Permissions);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst Move = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n {props.items > 0 ?\n <h3 className=\"modal-title\">{i18n['Move files']} <span className=\"quot\">({props.items})</span> {i18n['into']}:</h3> :\n <h3 className=\"modal-title rename\">{i18n['Move']} <span className=\"quot\">&quot;{props.fName}&quot;</span> {i18n['into']}:</h3>}\n </div>\n <div className=\"modal-body\">\n <input type=\"text\" autoFocus defaultValue={props.path} onChange={props.onChange} ref={props.reference}></input>\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n['Cancel']}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={props.save}>{i18n['Move']}</button>\n </div>\n </div>\n );\n}\n\nexport default Move;","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst Archive = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n {props.items > 0 ?\n <h3 className=\"modal-title\">{i18n.Compress} <span className=\"quot\">({props.items})</span>?</h3> :\n <h3 className=\"modal-title rename\">{i18n.Compress} <span className=\"quot\">&quot;{props.fName}&quot;</span>?</h3>}\n </div>\n <div className=\"modal-body\">\n <input type=\"text\" autoFocus defaultValue={`${props.path}/${props.fName}.tar.gz`} onBlur={props.onChange} ref={props.reference}></input>\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n.Compress}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={props.save}>{i18n.Compress}</button>\n </div>\n </div>\n );\n}\n\nexport default Archive;","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst Extract = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h3 className=\"modal-title rename\">{i18n['Extract']} <span className=\"quot\">&quot;{props.fName}&quot;</span>{i18n['into']}</h3>\n </div>\n <div className=\"modal-body\">\n <input type=\"text\" autoFocus defaultValue={props.path} onBlur={props.onChange} ref={props.reference}></input>\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n['Cancel']}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={props.save}>{i18n['Extract']}</button>\n </div>\n </div>\n );\n}\n\nexport default Extract;","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst Copy = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n {props.items > 0 ?\n <h3 className=\"modal-title\">{i18n['Copy files']} <span className=\"quot\">({props.items})</span> {i18n['into']}:</h3> :\n <h3 className=\"modal-title rename\">{i18n['Copy']} <span className=\"quot\">&quot;{props.fName}&quot;</span> {i18n['into']}:</h3>}\n </div>\n <div className=\"modal-body\">\n <input type=\"text\" autoFocus defaultValue={props.path} onChange={props.onChange} ref={props.reference}></input>\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-danger mr-auto\" onClick={props.close}>{i18n['Cancel']}</button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={props.save}>{i18n['Copy']}</button>\n </div>\n </div>\n );\n}\n\nexport default Copy;","import React from 'react';\n\nconst Replace = (props) => {\n return (\n <div className=\"modal-content replace\">\n <div className=\"modal-header\">\n {props.files.length > 1 ?\n <div><h3>These files already exist</h3>\n {props.files.map(item =>\n <span className=\"quot\">&quot;{item.name}&quot; </span>\n )}\n </div> :\n <div><h3>This file already exists</h3>\n <span className=\"quot\">&quot;{props.files[0].name}&quot;</span>\n </div>\n }\n </div>\n <div className=\"modal-footer\">\n <button type=\"button\" className=\"btn btn-primary mr-auto\" onClick={props.close}>Cancel</button>\n <button type=\"button\" className=\"btn btn-danger\" onClick={() => props.replace(props.files)}>Overwrite</button>\n </div>\n </div>\n );\n}\n\nexport default Replace;","import React, { Component } from 'react';\nimport AddFile from './AddFile';\nimport AddDirectory from './AddDirectory';\nimport Rename from './Rename';\nimport Delete from './Delete';\nimport NothingSelected from './NothingSelected';\nimport Permissions from './Permissions';\nimport Move from './Move';\nimport Archive from './Archive';\nimport Extract from './Extract';\nimport Copy from './Copy';\nimport './Modal.scss';\nimport Replace from './Replace';\n\nclass Modal extends Component {\n\n componentDidMount = () => {\n window.addEventListener(\"click\", this.closeOutside);\n document.addEventListener(\"keydown\", this.hotkeys);\n }\n\n componentWillUnmount = () => {\n window.removeEventListener(\"click\", this.closeOutside);\n document.removeEventListener(\"keydown\", this.hotkeys);\n }\n\n hotkeys = (e) => {\n if (e.keyCode === 27) {\n this.closeModal();\n } else if (e.keyCode === 13) {\n this.saveAndClose();\n }\n }\n\n saveAndClose = () => {\n this.props.onClick();\n this.props.onClose();\n }\n\n changePermissions = (permissions) => {\n this.props.onChangePermissions(permissions);\n }\n\n replace = (file) => {\n this.props.onClick(file);\n this.props.onClose();\n }\n\n onChange = (e) => {\n this.props.onChangeValue(e.target.value);\n }\n\n closeModal = () => {\n this.props.onClose();\n }\n\n closeOutside = (e) => {\n let modal = document.getElementById(\"modal\");\n if (e.target === modal) {\n this.props.onClose();\n }\n }\n\n content = () => {\n const { type, reference, fName, permissions, items, path, files, notAvailable } = this.props;\n switch (type) {\n case 'Copy': return <Copy close={this.closeModal} save={this.saveAndClose} reference={reference} onChange={this.onChange} name={type} fName={fName} items={items} path={path} />;\n case 'Move': return <Move close={this.closeModal} save={this.saveAndClose} reference={reference} onChange={this.onChange} name={type} fName={fName} items={items} path={path} />;\n case 'Permissions': return <Permissions close={this.closeModal} save={this.saveAndClose} changePermissions={this.changePermissions} fName={fName} permissions={permissions} />;\n case 'Extract': return <Extract close={this.closeModal} save={this.saveAndClose} reference={reference} onChange={this.onChange} name={type} fName={fName} path={path} />;\n case 'Archive': return <Archive close={this.closeModal} save={this.saveAndClose} reference={reference} onChange={this.onChange} items={items} name={type} fName={fName} path={path} />;\n case 'Rename': return <Rename close={this.closeModal} save={this.saveAndClose} reference={reference} onChange={this.onChange} name={type} fName={fName} />;\n case 'Add directory': return <AddDirectory close={this.closeModal} save={this.saveAndClose} reference={reference} />;\n case 'Delete': return <Delete close={this.closeModal} save={this.saveAndClose} fName={fName} items={items} />;\n case 'Add file': return <AddFile close={this.closeModal} save={this.saveAndClose} reference={reference} />;\n case 'Replace': return <Replace close={this.closeModal} replace={(files) => this.replace(files)} files={files} />\n case 'Nothing selected': return <NothingSelected close={this.closeModal} notAvailable={notAvailable} />;\n default:\n break;\n }\n }\n\n render() {\n return (\n <div>\n <div className=\"modal\" id=\"modal\">\n {this.content()}\n </div>\n </div>\n );\n }\n}\n\nexport default Modal;","import React, { createRef, useEffect } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport './Menu.scss';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\n\nconst Menu = (props) => {\n const { i18n } = useSelector(state => state.session);\n const inputFile = createRef();\n\n useEffect(() => {\n document.addEventListener(\"keydown\", hotKeys);\n\n return () => document.removeEventListener(\"keydown\", hotKeys);\n }, []);\n\n const newFile = () => {\n props.openModal(\"Add file\");\n }\n\n const newDirectory = () => {\n props.openModal(\"Add directory\");\n }\n\n const deleteFile = () => {\n const { selection, openModal, cursor } = props;\n if (selection.length === 0) {\n if (cursor === 0) {\n openModal(\"Nothing selected\");\n } else {\n openModal(\"Delete\");\n }\n } else {\n openModal(\"Delete\", selection.length);\n }\n }\n\n const rename = () => {\n if (props.cursor === 0) {\n props.openModal(\"Nothing selected\");\n } else {\n props.openModal(\"Rename\");\n }\n }\n\n const permissions = () => {\n if (props.cursor === 0) {\n props.openModal(\"Nothing selected\");\n } else {\n props.openModal(\"Permissions\");\n }\n }\n\n const move = () => {\n const { selection, openModal, cursor } = props;\n if (selection.length === 0) {\n if (cursor === 0) {\n openModal(\"Nothing selected\");\n } else {\n openModal(\"Move\");\n }\n } else {\n openModal(\"Move\", selection.length);\n }\n }\n\n const archive = () => {\n const { selection, openModal, cursor } = props;\n\n if (selection.length === 0) {\n if (cursor === 0) {\n openModal(\"Nothing selected\");\n } else {\n openModal(\"Archive\");\n }\n } else {\n openModal(\"Archive\", selection.length);\n }\n }\n\n const extract = () => {\n if (props.cursor === 0) {\n props.openModal(\"Nothing selected\");\n } else {\n props.openModal(\"Extract\");\n }\n }\n\n const copy = () => {\n const { selection, openModal, cursor } = props;\n if (selection.length === 0) {\n if (cursor === 0) {\n openModal(\"Nothing selected\");\n } else {\n openModal(\"Copy\");\n }\n } else {\n openModal(\"Copy\", selection.length);\n }\n }\n\n const upload = (e) => {\n if (e.target.files.length === 0) {\n return;\n }\n\n props.upload(e.target.files);\n }\n\n const download = () => {\n if (props.cursor === 0) {\n props.openModal(\"Nothing selected\");\n } else if (props.itemType === \"d\") {\n props.openModal(\"Nothing selected\", null, true);\n } else {\n props.download();\n }\n }\n\n const hotKeys = (e) => {\n if (props.modalVisible) {\n return;\n }\n\n if (e.shiftKey && e.keyCode === 117) {\n rename();\n }\n\n switch (e.keyCode) {\n case 46: return deleteFile();\n case 65: return archive();\n case 68: return download();\n case 77: return move();\n case 78: return newFile();\n case 85: return inputFile.click();\n case 113: return rename();\n case 115: return permissions();\n case 116: return copy();\n case 118: return newDirectory();\n case 119: return deleteFile();\n default: break;\n }\n }\n\n let matchArchive = props.name.match(/.zip|.tgz|.tar.gz|.gzip|.tbz|.tar.bz|.gz|.zip|.tar|.rar/g);\n\n return (\n <div className=\"menu\">\n <div className=\"logo\">\n <Link to=\"/\">\n <img src=\"../../images/logo.png\" alt=\"Logo\" />\n </Link>\n </div>\n <div className=\"btn-group\" role=\"group\" aria-label=\"First group\">\n <input type=\"file\" className=\"upload\" multiple onChange={upload} ref={inputFile} />\n <button type=\"button\" className=\"btn btn-light\" id=\"upload\" onClick={() => inputFile.current.click()}>{i18n.UPLOAD}</button>\n <button type=\"button\" className=\"btn btn-light big\" onClick={newFile}>{i18n['NEW FILE']}</button>\n <button type=\"button\" className=\"btn btn-light small\" onClick={newFile} title={i18n['NEW FILE']}><FontAwesomeIcon icon=\"file\" className=\"icon file\" /></button>\n <button type=\"button\" className=\"btn btn-light big\" onClick={newDirectory}>{i18n['NEW DIR']}</button>\n <button type=\"button\" className=\"btn btn-light small\" onClick={newDirectory} title={i18n['NEW DIR']}><FontAwesomeIcon icon=\"folder\" className=\"icon folder-close\" /></button>\n <button type=\"button\" className=\"btn btn-light big\" onClick={download}>{i18n.DOWNLOAD}</button>\n <button type=\"button\" className=\"btn btn-light small\" onClick={download} title={i18n.DOWNLOAD}><FontAwesomeIcon icon=\"download\" className=\"icon download\" /></button>\n <button type=\"button\" className=\"btn btn-light big\" onClick={rename}>{i18n.RENAME}</button>\n <button type=\"button\" className=\"btn btn-light small\" onClick={rename} title={i18n.RENAME}><FontAwesomeIcon icon=\"italic\" className=\"icon italic\" /></button>\n <button type=\"button\" className=\"btn btn-light big\" onClick={permissions}>{i18n.RIGHTS}</button>\n <button type=\"button\" className=\"btn btn-light small\" onClick={permissions} title={i18n.RIGHTS}><FontAwesomeIcon icon=\"user\" className=\"icon user\" /></button>\n <button type=\"button\" className=\"btn btn-light big\" onClick={copy}>{i18n.COPY}</button>\n <button type=\"button\" className=\"btn btn-light small\" onClick={copy} title={i18n.COPY}><FontAwesomeIcon icon=\"copy\" className=\"icon copy\" /></button>\n <button type=\"button\" className=\"btn btn-light big\" onClick={move}>{i18n.MOVE}</button>\n <button type=\"button\" className=\"btn btn-light small\" onClick={move} title={i18n.MOVE}><FontAwesomeIcon icon=\"paste\" className=\"icon paste\" /></button>\n {matchArchive ? null : <button type=\"button\" className=\"btn btn-light big\" onClick={archive}>{i18n.ARCHIVE}</button>}\n {matchArchive ? null : <button type=\"button\" className=\"btn btn-light small\" onClick={archive} title={i18n.ARCHIVE}><FontAwesomeIcon icon=\"book\" className=\"icon book\" /></button>}\n {matchArchive ? <button type=\"button\" className=\"btn btn-light big\" onClick={extract}>{i18n.EXTRACT}</button> : null}\n {matchArchive ? <button type=\"button\" className=\"btn btn-light small\" onClick={extract} title={i18n.EXTRACT}><FontAwesomeIcon icon=\"box-open\" className=\"icon open\" /></button> : null}\n <button type=\"button\" className=\"btn btn-light big delete\" onClick={deleteFile} >{i18n.DELETE}</button>\n <button type=\"button\" className=\"btn btn-light small\" onClick={deleteFile} title={i18n.DELETE}><FontAwesomeIcon icon=\"trash\" className=\"icon trash\" /></button>\n </div>\n </div>\n );\n}\n\nexport default Menu;\n","import axios from \"axios\";\nimport QueryString from \"qs\";\nconst server = window.location.origin + \"/file_manager/fm_api.php?\";\n\nexport function validateAction(url) {\n return axios.get(url);\n}\n\nexport function cacheData(currentUser, history, rootDir) {\n const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n\n if (parsedQueryString.path) {\n localStorage.setItem(\"activeWindow\", \"left\");\n localStorage.setItem(\"leftListPath\", parsedQueryString.path);\n localStorage.setItem(\"rightListPath\", parsedQueryString.path);\n return;\n }\n\n if (localStorage.getItem(\"lastUser\") === null || currentUser !== localStorage.getItem(\"lastUser\")) {\n localStorage.setItem(\"lastUser\", currentUser);\n localStorage.setItem(\"activeWindow\", \"left\");\n localStorage.setItem(\"leftListPath\", rootDir);\n localStorage.setItem(\"rightListPath\", rootDir);\n return;\n }\n\n if (localStorage.getItem(\"activeWindow\") === null || localStorage.getItem(\"leftListPath\") === null || localStorage.getItem(\"rightListPath\") === null) {\n let path = history.location.search.substring(6).split('/');\n localStorage.setItem(\"activeWindow\", \"left\");\n localStorage.setItem(\"leftListPath\", path);\n localStorage.setItem(\"rightListPath\", rootDir);\n return;\n }\n}\n\nexport function changeDirectoryOnLoading(server, list) {\n return axios.get(`${server}dir=${encodePath(localStorage.getItem(list))}&action=cd`);\n}\n\nexport function changeDirectory(server, path) {\n return axios.get(`${server}dir=${encodePath(path)}&action=cd`);\n}\n\nexport function getData(path) {\n return axios.get(`${server}dir=%2F${path}&action=cd`);\n}\n\nexport function checkExistingFileName(selectedFiles, activeWindow, leftListData, rightListData) {\n let selectedFileNames = [];\n let existingFileNames = [];\n let newFiles = [];\n\n for (let i = 0; i < selectedFiles.length; i++) {\n selectedFileNames.push(selectedFiles[i]);\n }\n\n if (activeWindow === \"left\") {\n for (let i = 0; i < selectedFileNames.length; i++) {\n if (leftListData.map((item) => { return item.name }).includes(selectedFileNames[i].name)) {\n existingFileNames.push(selectedFileNames[i]);\n } else {\n newFiles.push(selectedFileNames[i]);\n }\n }\n } else {\n for (let i = 0; i < selectedFileNames.length; i++) {\n if (rightListData.map((item) => { return item.name }).includes(selectedFileNames[i].name)) {\n existingFileNames.push(selectedFileNames[i]);\n } else {\n newFiles.push(selectedFileNames[i]);\n }\n }\n }\n\n return { existingFileNames, newFiles };\n}\n\nexport function encodePath(path) {\n let splitPath = path.split('/');\n let encodedPath = splitPath.join('%2F');\n return encodedPath;\n}\n\nexport function activeWindowPath() {\n if (localStorage.getItem(\"activeWindow\") === \"left\") {\n let currentPath = localStorage.getItem(\"leftListPath\");\n return currentPath;\n } else if (localStorage.getItem(\"activeWindow\") === \"right\") {\n let currentPath = localStorage.getItem(\"rightListPath\");\n return currentPath;\n }\n}\n\nexport function deleteItems(url, path, selection) {\n if (!selection.length) {\n return false;\n }\n\n const promisesArray = selection.map(item =>\n validateAction(`${url}item=${path}%2F${item}&dir=${path}&action=delete_files`)\n .then(() => { })\n );\n\n return Promise.all(promisesArray);\n}\n\nexport function moveItems(url, path, targetPath, selection) {\n if (!selection.length) {\n return false;\n }\n\n const promisesArray = selection.map(item =>\n validateAction(`${url}item=${path}%2F${item}&target_name=${targetPath}&action=move_file`)\n .then(() => { })\n );\n\n return Promise.all(promisesArray);\n}\n\nexport function copyItems(url, path, targetPath, selection) {\n if (!selection.length) {\n return false;\n }\n\n const promisesArray = selection.map(item =>\n validateAction(`${url}item=${path}%2F${item}&filename=${item}&dir=${path}&dir_target=${targetPath}&action=copy_file`)\n .then(() => { })\n );\n\n return Promise.all(promisesArray);\n}","import React, { Component } from 'react';\nimport DirectoryList from '../../components/Lists/DirectoryList/DirectoryList';\nimport ProgressBar from '../../components/ProgressBar/ProgressBar';\nimport { toast, ToastContainer } from 'react-toastify';\nimport Hotkeys from '../../components/Hotkeys/Hotkeys';\nimport Modal from '../../components/Modal/Modal';\nimport 'react-toastify/dist/ReactToastify.css';\nimport { withRouter } from 'react-router-dom';\nimport Menu from '../../components/Menu/Menu';\nimport * as FM from '../../FileManagerHelper';\nimport axios from 'axios';\nimport { Helmet } from 'react-helmet';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport 'src/containers/App/App.scss';\nimport { connect } from 'react-redux';\n\nconst server = window.location.origin + \"/file_manager/fm_api.php?\";\nclass FileManager extends Component {\n constructor(props) {\n super(props);\n this.state = {\n leftList: {\n path: this.props.menuCounters.user.HOME,\n files: { listing: [] },\n },\n rightList: {\n path: this.props.menuCounters.user.HOME,\n files: { listing: [] },\n },\n currentPath: this.props.menuCounters.user.HOME,\n currentUser: this.props.menuCounters.user.HOME,\n activeWindow: \"left\",\n modalWindow: null,\n modalVisible: false,\n cursor: 0,\n itemName: \"\",\n itemPermissions: \"\",\n itemType: \"\",\n itemsSelected: [],\n modalInputValue: \"\",\n uploadPercent: \"0\",\n loading: false\n }\n }\n\n UNSAFE_componentWillMount = () => {\n FM.cacheData(this.state.currentUser, this.props.history, this.props.menuCounters.user.HOME);\n let currentPath = FM.activeWindowPath();\n this.setState({ currentPath });\n this.changeDirectoryOnLoading();\n }\n\n componentDidMount = () => {\n if (!localStorage.getItem(\"token\") || !this.props.session.userName) {\n this.props.history.push('/login/');\n }\n\n window.addEventListener(\"keydown\", this.switchActiveList);\n window.addEventListener(\"keydown\", this.toggleActiveListOnTab);\n document.addEventListener(\"keydown\", this.hotkeysListener);\n\n if (localStorage.getItem('activeWindow')) {\n this.setState({ activeWindow: localStorage.getItem('activeWindow') });\n }\n }\n\n componentWillUnmount = () => {\n window.removeEventListener(\"keydown\", this.switchActiveList);\n window.removeEventListener(\"keydown\", this.toggleActiveListOnTab);\n document.removeEventListener(\"keydown\", this.hotkeysListener);\n }\n\n cachePaths = () => {\n localStorage.setItem('activeWindow', this.state.activeWindow);\n localStorage.setItem('leftListPath', this.state.leftList.path);\n localStorage.setItem('rightListPath', this.state.rightList.path);\n }\n\n setStateAsync = updater => new Promise(resolve => this.setState(updater, resolve));\n\n changeDirectoryOnLoading = async () => {\n ['leftList', 'rightList'].map(async (side) => {\n const result = await FM.changeDirectoryOnLoading(server, `${side}Path`);\n let path = localStorage.getItem(`${side}Path`);\n let listing = result.data.listing;\n await this.setStateAsync({ [side]: { files: { listing }, path } });\n });\n\n await this.setStateAsync({ loading: false });\n }\n\n changeDirectory = () => {\n const { activeWindow, currentPath } = this.state;\n FM.changeDirectory(server, currentPath)\n .then(result => {\n let listing = result.data.listing;\n\n if (this.state.leftList.path === this.state.rightList.path) {\n this.setState({ leftList: { files: { listing }, path: currentPath }, rightList: { files: { listing }, path: currentPath }, loading: false });\n this.leftList.resetData();\n this.rightList.resetData();\n } else if (activeWindow === \"left\") {\n this.setState({ leftList: { files: { listing }, path: currentPath }, loading: false });\n this.leftList.resetData();\n } else {\n this.setState({ rightList: { files: { listing }, path: currentPath }, loading: false });\n this.rightList.resetData();\n }\n });\n }\n\n toggleActiveListOnTab = (e) => {\n const { activeWindow, rightList, leftList, currentPath } = this.state;\n\n if (this.state.modalVisible) {\n return;\n }\n\n if (e.keyCode === 9) {\n e.preventDefault();\n if (activeWindow === \"left\") {\n this.setState({ activeWindow: \"right\", currentPath: rightList.path });\n this.rightList.passData();\n } else {\n this.setState({ activeWindow: \"left\", currentPath: leftList.path });\n this.leftList.passData();\n }\n this.changeQuery(currentPath);\n this.cachePaths();\n }\n }\n\n passSelection = (itemsSelected) => {\n this.setState({ itemsSelected });\n }\n\n toggleActiveList = (list) => {\n this.setState({ activeWindow: list });\n }\n\n switchActiveList = (e) => {\n if (this.state.modalVisible) {\n return;\n }\n\n if (e.keyCode === 39) {\n this.setState({ activeWindow: \"right\", currentPath: this.state.rightList.path });\n this.changeQuery(this.state.currentPath);\n this.rightList.passData();\n this.cachePaths();\n } else if (e.keyCode === 37) {\n this.setState({ activeWindow: \"left\", currentPath: this.state.leftList.path });\n this.changeQuery(this.state.currentPath);\n this.leftList.passData();\n this.cachePaths();\n }\n }\n\n validateAction = async (url) => {\n await this.setStateAsync({ loading: true });\n let response = await FM.validateAction(url);\n if (response.data.result) {\n this.changeDirectory();\n } else {\n this.showError(response.data.message);\n }\n }\n\n showError = (error) => {\n toast.error(error, {\n position: \"top-center\",\n autoClose: 3000,\n hideProgressBar: false,\n closeOnClick: true,\n pauseOnHover: true,\n draggable: true\n });\n this.setState({ loading: false });\n }\n\n download = () => {\n const { cursor, currentPath, itemName } = this.state;\n\n if (cursor !== 0) {\n window.open('/download/file/?path=' + currentPath + '/' + itemName);\n }\n }\n\n checkExistingFileName = (selectedFiles) => {\n const { activeWindow, leftList, rightList } = this.state;\n const { existingFileNames, newFiles } = FM.checkExistingFileName(selectedFiles, activeWindow, leftList.files.listing, rightList.files.listing);\n\n if (existingFileNames.length !== 0) {\n this.modal(\"Replace\", existingFileNames);\n this.upload(newFiles);\n } else {\n this.upload(selectedFiles);\n }\n }\n\n replaceFiles = (selectedFiles) => {\n for (let i = 0; i < selectedFiles.length; i++) {\n this.validateAction(`${server}item=${FM.encodePath(this.state.currentPath)}%2F${selectedFiles[i].name}&dir=${FM.encodePath(this.state.currentPath)}&action=delete_files`);\n }\n\n this.upload(selectedFiles);\n }\n\n upload = (selectedFiles) => {\n const formData = new FormData();\n\n if (selectedFiles.length === 0) {\n return;\n }\n\n for (let i = 0; i < selectedFiles.length; i++) {\n formData.append('files[]', selectedFiles[i], selectedFiles[i].name);\n }\n\n this.setState({ loading: true }, () => {\n axios.post(`${window.location.origin}/upload/?dir=${this.state.currentPath}`, formData, {\n onUploadProgress: progressEvent => {\n let uploadPercent = Math.round(progressEvent.loaded / progressEvent.total * 100);\n this.setState({ uploadPercent });\n }\n }).then(() => {\n this.setState({ uploadPercent: \"0\" });\n this.changeDirectory();\n })\n });\n }\n\n onDelete = async () => {\n const { itemsSelected, itemName, currentPath } = this.state;\n if (itemsSelected.length > 0) {\n await this.setStateAsync({ loading: true });\n await FM.deleteItems(server, FM.encodePath(currentPath), itemsSelected);\n this.changeDirectory();\n } else {\n this.validateAction(`${server}item=${FM.encodePath(currentPath)}%2F${itemName}&dir=${FM.encodePath(currentPath)}&action=delete_files`);\n }\n }\n\n newFile = () => {\n let name = this.inputElement.value;\n this.validateAction(`${server}filename=${name}&dir=${FM.encodePath(this.state.currentPath)}&action=create_file`);\n }\n\n newDir = () => {\n let name = this.inputElement.value;\n this.validateAction(`${server}dirname=${name}&dir=${FM.encodePath(this.state.currentPath)}&action=create_dir`);\n }\n\n onRename = () => {\n const { modalInputValue, itemType, itemName, currentPath } = this.state;\n let name = modalInputValue;\n if (itemType === \"f\") {\n this.validateAction(`${server}item=${itemName}&target_name=${name}&dir=${FM.encodePath(currentPath)}&action=rename_file`);\n } else if (itemType === \"d\") {\n this.validateAction(`${server}item=${itemName}&target_name=${name}&dir=${FM.encodePath(currentPath)}%2F&action=rename_directory`);\n }\n }\n\n onChangePermissions = () => {\n let permissions = this.state.modalInputValue;\n this.validateAction(`${server}dir=${FM.encodePath(this.state.currentPath)}%2F&item=${this.state.itemName}&permissions=${permissions}&action=chmod_item`);\n this.setState({ itemPermissions: permissions });\n }\n\n archiveItem = () => {\n let name = this.inputElement.value;\n\n if (this.state.itemsSelected.length > 0) {\n this.setState({ loading: true }, () => {\n let items = [];\n for (let i = 0; i < this.state.itemsSelected.length; i++) {\n let path = `${this.state.currentPath}/`;\n items.push(path += this.state.itemsSelected[i]);\n }\n this.validateAction(`${server}items=${items}&dst_item=${FM.encodePath(name)}&action=pack_item`);\n this.setState({ itemsSelected: [] });\n })\n } else {\n this.validateAction(`${server}items=${FM.encodePath(this.state.currentPath)}%2F${this.state.itemName}&dst_item=${FM.encodePath(name)}&action=pack_item`);\n }\n }\n\n extractItem = () => {\n let name = this.inputElement.value;\n this.validateAction(`${server}item=${FM.encodePath(this.state.currentPath)}%2F${this.state.itemName}&filename=${this.state.itemName}&dir=${FM.encodePath(this.state.currentPath)}&dir_target=${name}&action=unpack_item`);\n }\n\n moveItem = async () => {\n const { currentPath, itemsSelected, itemName } = this.state;\n let targetDir = this.inputElement.value;\n\n if (itemsSelected.length > 0) {\n await this.setStateAsync({ loading: true });\n await FM.moveItems(server, FM.encodePath(currentPath), targetDir, itemsSelected);\n await this.setStateAsync({ itemsSelected: [] });\n this.changeDirectory();\n } else {\n this.validateAction(`${server}item=${currentPath}%2F${itemName}&target_name=${targetDir}&action=move_file`);\n }\n }\n\n copyItem = async () => {\n const { currentPath, itemsSelected, itemName } = this.state;\n let targetDir = this.inputElement.value;\n\n if (itemsSelected.length > 0) {\n await this.setStateAsync({ loading: true });\n await FM.copyItems(server, FM.encodePath(currentPath), targetDir, itemsSelected);\n await this.setStateAsync({ itemsSelected: [] });\n this.changeDirectory();\n } else {\n this.validateAction(`${server}item=${currentPath}%2F${itemName}&filename=${itemName}&dir=${currentPath}&dir_target=${targetDir}&action=copy_file`);\n }\n }\n\n changeQuery = (path) => {\n this.props.history.push({\n pathname: '/list/directory/',\n search: `?path=${path}`\n });\n }\n\n openDirectory = () => {\n this.setState({ loading: true }, () => {\n this.changeDirectory();\n this.cachePaths();\n });\n }\n\n openCertainDirectory = () => {\n this.setState({ loading: true }, () => {\n this.changeDirectory();\n this.cachePaths();\n });\n }\n\n moveBack = () => {\n const { activeWindow } = this.state;\n\n let list = { ...this.state[`${activeWindow}List`] };\n list.path = list.path.substring(0, list.path.lastIndexOf('/'));\n this.setState({ [`${activeWindow}List`]: list, currentPath: list.path });\n this.props.history.push({ search: `?path=${list.path}` })\n this.openDirectory();\n }\n\n addToPath = (name) => {\n const { activeWindow } = this.state;\n\n let activeList = { ...this.state[`${activeWindow}List`] };\n let oldPath = activeList.path;\n activeList.path = `${oldPath}/${name}`;\n this.setState({ [`${activeWindow}List`]: activeList, currentPath: activeList.path });\n }\n\n changeInputValue = (modalInputValue) => {\n this.setState({ modalInputValue });\n }\n\n changePathAfterToggle = (currentPath) => {\n this.setState({ currentPath });\n }\n\n changePath = (currentPath) => {\n if (this.state.activeWindow === \"left\") {\n this.setState({ leftList: { files: { ...this.state.leftList.files }, path: currentPath }, currentPath });\n } else {\n this.setState({ rightList: { files: { ...this.state.rightList.files }, path: currentPath }, currentPath });\n }\n }\n\n passData = (cursor, itemName, itemPermissions, itemType) => {\n this.setState({ cursor, itemName, itemPermissions, itemType });\n }\n\n closeModal = () => {\n this.setState({ modalVisible: false });\n }\n\n hotkeysListener = (e) => {\n if (this.state.modalVisible) {\n return;\n }\n\n if (e.keyCode === 72) {\n this.hotkeys();\n }\n }\n\n hotkeys = () => {\n if (this.state.hotkeysPanel === \"inactive\") {\n this.setState({ hotkeysPanel: \"active\" });\n } else {\n this.setState({ hotkeysPanel: \"inactive\" });\n }\n }\n\n modal = (type, items, available) => {\n const { modalVisible, itemName, itemPermissions, currentPath } = this.state;\n switch (type) {\n case 'Copy': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} fName={itemName} path={currentPath} onClick={this.copyItem} items={items} onClose={this.closeModal} onChangeValue={this.changeInputValue} reference={(inp) => this.inputElement = inp} />, modalVisible: true });\n case 'Move': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} fName={itemName} path={currentPath} onClick={this.moveItem} items={items} onClose={this.closeModal} onChangeValue={this.changeInputValue} reference={(inp) => this.inputElement = inp} />, modalVisible: true });\n case 'Extract': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} fName={itemName} onClick={this.extractItem} onClose={this.closeModal} onChangeValue={this.changeInputValue} path={currentPath} reference={(inp) => this.inputElement = inp} />, modalVisible: true });\n case 'Archive': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} fName={itemName} onClick={this.archiveItem} items={items} onClose={this.closeModal} onChangeValue={this.changeInputValue} path={currentPath} reference={(inp) => this.inputElement = inp} />, modalVisible: true });\n case 'Permissions': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} fName={itemName} onClick={this.onChangePermissions} onClose={this.closeModal} onChangePermissions={this.changeInputValue} permissions={itemPermissions} />, modalVisible: true });\n case 'Rename': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} fName={itemName} onChangeValue={this.changeInputValue} onClick={this.onRename} onClose={this.closeModal} reference={(inp) => this.inputElement = inp} />, modalVisible: true });\n case 'Add directory': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} onClick={this.newDir} onClose={this.closeModal} reference={(inp) => this.inputElement = inp} />, modalVisible: true });\n case 'Add file': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} onClick={this.newFile} onClose={this.closeModal} reference={(inp) => this.inputElement = inp} />, modalVisible: true });\n case 'Delete': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} fName={itemName} onClick={this.onDelete} onClose={this.closeModal} items={items} />, modalVisible: true });\n case 'Nothing selected': return this.setState({ modalWindow: <Modal modalVisible={modalVisible} notAvailable={available} type={type} onClose={this.closeModal} onClick={this.closeModal} />, modalVisible: true });\n case \"Replace\": return this.setState({ modalWindow: <Modal modalVisible={modalVisible} type={type} files={items} onClick={(files) => this.replaceFiles(files)} onClose={this.closeModal} />, modalVisible: true });\n default:\n break;\n }\n }\n\n render() {\n const { activeWindow, modalWindow, modalVisible, itemsSelected, itemName, loading, uploadPercent, itemType } = this.state;\n const DirectoryLists = ['left', 'right'].map((side) =>\n <DirectoryList\n changePathAfterToggle={this.changePathAfterToggle}\n openCertainDirectory={this.openCertainDirectory}\n isActive={activeWindow === side}\n openDirectory={this.openDirectory}\n passSelection={this.passSelection}\n data={this.state[`${side}List`].files}\n onClick={this.toggleActiveList}\n changePath={this.changePath}\n modalVisible={modalVisible}\n addToPath={this.addToPath}\n cursor={this.state.cursor}\n passData={this.passData}\n rootDir={this.props.menuCounters.user.HOME}\n ref={el => this[`${side}List`] = el}\n download={this.download}\n moveBack={this.moveBack}\n path={this.state[`${side}List`].path}\n history={this.props.history}\n loading={loading}\n list={side} />\n )\n return (\n <div className=\"window\">\n <Helmet>\n <title>{this.props.session.i18n['File Manager']}</title>\n </Helmet>\n {uploadPercent !== \"0\" ? <ProgressBar progress={uploadPercent} /> : null}\n <ToastContainer />\n <Menu\n onDelete={this.onDeleteFileHandler}\n modalVisible={modalVisible}\n download={this.download}\n openModal={this.modal}\n selection={itemsSelected}\n itemType={itemType}\n upload={this.checkExistingFileName}\n cursor={this.state.cursor}\n name={itemName} />\n <div className=\"lists-container\">\n {DirectoryLists}\n <div className=\"fixed-buttons fm\">\n <div className=\"hotkey-button\">\n <button onClick={() => this.hotkeysList.classList.toggle('hide')}>\n <FontAwesomeIcon icon=\"ellipsis-h\" />\n </button>\n </div>\n </div>\n <Hotkeys reference={(inp) => this.hotkeysList = inp} toggleHotkeys={() => this.hotkeysList.classList.toggle('hide')} />\n </div>\n {modalVisible && modalWindow}\n </div>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n session: state.session,\n menuCounters: state.menuCounters\n }\n}\n\nexport default connect(mapStateToProps)(withRouter(FileManager));\n","import React, { useEffect, useState } from 'react';\nimport CodeMirror from 'react-codemirror';\nimport './Editor.scss';\nimport 'codemirror/lib/codemirror.css';\nimport 'codemirror/mode/javascript/javascript';\nimport 'codemirror/mode/markdown/markdown';\nimport 'codemirror/mode/php/php';\nimport 'codemirror/mode/css/css';\nimport 'codemirror/mode/htmlmixed/htmlmixed';\nimport axios from 'axios';\nimport Spinner from '../../Spinner/Spinner';\nimport { useHistory } from 'react-router-dom';\nimport { toast, ToastContainer } from 'react-toastify';\nimport { useSelector } from 'react-redux';\n\nconst Editor = ({ close, name }) => {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const [state, setState] = useState({\n code: '',\n loading: false\n });\n\n useEffect(() => {\n document.addEventListener(\"keydown\", hotKey);\n\n let path = `${history.location.search.substring(6, history.location.search.lastIndexOf('/'))}/${name}`;\n setState({ ...state, loading: true });\n\n checkFileType(path)\n .then(res => {\n if (res.data.result) {\n axios.get(`${window.location.origin}/api/v1/edit/file/?path=${encodePath(path)}`)\n .then(result => {\n if (result.data.error) {\n return showToast(res.data.error);\n }\n\n setState({ ...state, code: result.data.content, loading: false });\n })\n .catch(err => console.error(err));\n } else {\n console.error('Something went wrong with file type!');\n }\n })\n .catch(err => console.error(err));\n\n return () => {\n document.removeEventListener(\"keydown\", hotKey);\n }\n }, []);\n\n const checkFileType = path => {\n return axios.get(`${window.location.origin}/file_manager/fm_api.php?dir=${path}&action=check_file_type`);\n }\n\n const encodePath = path => {\n return path.split('/').join('%2F');\n }\n\n const hotKey = e => {\n if (e.keyCode === 113) {\n save();\n }\n }\n\n const save = () => {\n let formData = new FormData();\n let path = history.location.search.substring(6, history.location.search.lastIndexOf('/'));\n\n formData.append('save', 'Save');\n formData.append('contents', state.code);\n\n setState({ ...state, loading: true });\n axios.post(`${window.location.origin}/api/v1/edit/file/?path=${path}%2F${name}`, formData)\n .then(res => {\n if (res.data.error) {\n showToast(res.data.error);\n } else {\n showToast('Saved successfully!');\n }\n setState({ ...state, loading: false });\n })\n .catch(err => console.error(err));\n }\n\n const showToast = text => {\n toast.success(text, {\n position: \"top-center\",\n autoClose: 3000,\n hideProgressBar: false,\n closeOnClick: true,\n pauseOnHover: true,\n draggable: true\n });\n }\n\n const updateCode = newCode => {\n setState({ ...state, code: newCode });\n }\n\n const getModeFromFileName = () => {\n const fileExtension = name.split('.').pop();\n\n switch (fileExtension) {\n case 'js': return 'javascript';\n case 'jsx': return 'javascript';\n case 'php': return 'php';\n case 'css': return 'css';\n case 'scss': return 'css';\n case 'html': return 'htmlmixed';\n default: return 'markdown';\n }\n }\n\n let options = {\n mode: getModeFromFileName(),\n lineNumbers: true\n };\n\n return (\n <div className=\"editor\">\n <ToastContainer />\n <div className=\"panel-editor\">\n <button type=\"button\" className=\"btn btn-primary\" onClick={save}>{i18n.Save}</button>\n <button type=\"button\" className=\"btn btn-danger\" onClick={close}>{i18n.Close}</button>\n </div>\n {state.loading ? <Spinner /> : <CodeMirror value={state.code} onChange={updateCode} options={options} autoFocus />}\n </div>\n );\n}\n\nexport default Editor;\n","import React, { Component } from 'react';\nimport classNames from 'classname';\nimport * as FM from '../../../FileManagerHelper';\nimport './Photo.scss';\nimport Spinner from '../../Spinner/Spinner';\n\nclass Photo extends Component {\n state = {\n activeSlide: 0,\n photoGallery: [],\n loading: false\n }\n\n imgClass = (item) => {\n if (item.match(/.gif/i)) {\n return \"gif\";\n } else {\n return \"img\";\n }\n }\n\n encodePath = (path) => {\n let splitPath = path.split('/');\n splitPath.splice(splitPath.length - 1, 1);\n splitPath.splice(0, 1);\n return splitPath.join('%2F');\n }\n\n formatPath = (path) => {\n let splitPath = path.split('/');\n splitPath.splice(splitPath.length - 1, 1);\n return splitPath.join('/');\n }\n\n carouselIndicators = () => {\n const gallery = this.state.photoGallery;\n return gallery.map((item, i) => {\n const imageClasses = classNames({ 'control-photo': true, 'active': i === this.state.activeSlide });\n const result = (<div data-target=\"#photoGallery\" data-slide-to={i} key={i} className=\"indicator\">\n <img src={`${window.location.origin}/api/v1/view/file/${this.formatPath(this.props.path)}/${item}&raw=true`} alt={i} className={imageClasses} />\n </div>);\n return result;\n });\n }\n\n carouselPhotos = () => {\n const gallery = this.state.photoGallery || [];\n return gallery.map((item, i) => (\n <div className={i === this.state.activeSlide ? 'carousel-item active' : 'carousel-item'} key={i}>\n <div className=\"d-flex align-items-center justify-content-center min-vh-100\">\n <img className={this.imgClass(item)} src={`${window.location.origin}/api/v1/view/file/${this.formatPath(this.props.path)}/${item}&raw=true`} alt={i} />\n </div>\n </div>\n ));\n }\n\n setStateAsync = updater => new Promise(resolve => this.setState(updater, resolve));\n\n setPhotoGallery = async () => {\n await this.setStateAsync({ loading: true });\n const result = await FM.getData(this.encodePath(this.props.path));\n let photoGallery = [...this.state.photoGallery];\n result.data.listing.filter(item => item.name.match(/.png|.jpg|.jpeg|.gif/g) && !item.name.match(/.zip|.tgz|.tar.gz|.gzip|.tbz|.tar.bz|.gz|.zip|.tar|.rar/g) ? photoGallery.push(item.name) : null)\n await this.setStateAsync({ photoGallery, loading: false })\n this.setActiveImage();\n }\n\n setActiveImage = () => {\n let activeImage = this.props.activeImage;\n let activeImageIndex = this.state.photoGallery.indexOf(activeImage);\n this.setState({ activeSlide: activeImageIndex });\n }\n\n componentDidMount() {\n this.setPhotoGallery();\n }\n\n render() {\n return (\n <div>\n {this.state.loading ? <Spinner /> :\n <div id=\"photoGallery\" className=\"carousel slide\" data-ride=\"carousel\">\n <span className=\"close\" onClick={this.props.close}>&times;</span>\n <div className=\"carousel-inner\">\n {this.carouselPhotos()}\n </div>\n <div className=\"carousel-indicators\">\n {this.carouselIndicators()}\n </div>\n <a className=\"carousel-control-prev\" href=\"#photoGallery\" role=\"button\" data-slide=\"prev\">\n <span className=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span className=\"sr-only\">Previous</span>\n </a>\n <a className=\"carousel-control-next\" href=\"#photoGallery\" role=\"button\" data-slide=\"next\">\n <span className=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span className=\"sr-only\">Next</span>\n </a>\n </div>\n }\n </div>\n );\n }\n}\n\nexport default Photo;","import React from 'react';\n// import video from '../../../2.mp4';\nimport './Video.scss';\n\nconst Video = (props) => {\n return (\n <div className=\"video-preview\">\n <span className=\"close\" onClick={props.closeModal}>&times;</span>\n <video className=\"video\" autoPlay loop controls>\n <source src=\"\" type=\"video/mp4\" />\n </video>\n </div>\n );\n}\n\nexport default Video;","import React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\nimport Editor from './Editor/Editor';\nimport Photo from './Photo/Photo';\nimport Video from './Video/Video';\n\nconst Preview = (props) => {\n const session = useSelector(state => state.session);\n const history = useHistory();\n\n useEffect(() => {\n if (!session.userName) history.push('/login');\n\n document.addEventListener(\"keydown\", hotkeys);\n\n return () => {\n document.removeEventListener(\"keydown\", hotkeys);\n }\n }, []);\n\n const hotkeys = e => {\n if (e.keyCode === 121) {\n props.onClose();\n }\n }\n\n const onClose = () => {\n let lastOpenedDirectory = history.location.search.substring(6, history.location.search.lastIndexOf('/'));\n history.push({\n pathname: '/list/directory',\n search: `?path=${lastOpenedDirectory}`\n })\n }\n\n const content = () => {\n let split = history.location.search.split('/');\n let name = split[split.length - 1];\n\n if (history.location.pathname !== '/list/directory/preview/') {\n return;\n }\n\n if (name.match('.mp4')) {\n return <Video closeModal={onClose} />;\n } else if (name.match(/png|jpg|jpeg|gif/g)) {\n return <Photo closeModal={onClose} close={onClose} path={history.location.search} activeImage={name} />;\n } else {\n return <Editor close={onClose} name={name} />;\n }\n }\n\n return (\n <div>\n {content()}\n </div>\n );\n}\n\nexport default Preview;","import { ADD_FOCUSED_ELEMENT, ADD_ACTIVE_ELEMENT, REMOVE_FOCUSED_ELEMENT, REMOVE_ACTIVE_ELEMENT } from './mainNavigationTypes';\n\nexport const addFocusedElement = value => {\n return {\n type: ADD_FOCUSED_ELEMENT,\n value\n };\n};\n\nexport const removeFocusedElement = () => {\n return {\n type: REMOVE_FOCUSED_ELEMENT,\n value: ''\n };\n};\n\nexport const addActiveElement = value => {\n return {\n type: ADD_ACTIVE_ELEMENT,\n value\n };\n};\n\nexport const removeActiveElement = () => {\n return {\n type: REMOVE_ACTIVE_ELEMENT,\n value: ''\n };\n};","const itemName = 'token';\n\nexport const setAuthToken = token => localStorage.setItem(itemName, token);\nexport const getAuthToken = () => localStorage.getItem(itemName);\nexport const resetAuthToken = () => localStorage.removeItem(itemName);\n","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/ip/index.php';\nconst addIpApiUri = '/api/v1/add/ip/index.php';\nconst additionalInfoUri = '/api/v1/add/ip/index.php';\nconst ipInfoUri = '/api/v1/edit/ip/index.php';\nconst updateIpUri = '/api/v1/edit/ip/index.php';\n\nexport const getIpList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const bulkAction = (action, internetProtocols) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n internetProtocols.forEach(internetProtocol => {\n formData.append(\"ip[]\", internetProtocol);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/ip/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const getAdditionalInfo = () => {\n return axios.get(BASE_URL + additionalInfoUri);\n}\n\nexport const addInternetProtocol = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addIpApiUri, formDataObject);\n}\n\nexport const getInternetProtocolInfo = ip => {\n return axios.get(BASE_URL + ipInfoUri, {\n params: {\n ip,\n token: getAuthToken()\n }\n });\n}\n\nexport const updateInternetProtocol = (data, ip) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updateIpUri, formDataObject, {\n params: {\n ip,\n token: getAuthToken()\n }\n });\n}","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst SelectInput = ({ options = [], id, name, title, optionalTitle = '', selected = '', onChange = () => { }, disabled = false }) => {\n const { i18n } = useSelector(state => state.session);\n\n const renderOptions = () => {\n return options.map((option, index) =>\n <option key={index} selected={selected === option} value={option === i18n['Disable and Cancel Licence'] ? 'cancel' : option}>\n {option}\n </option>\n );\n }\n\n return (\n <>\n {\n options\n ? (\n <div className=\"form-group select-group\">\n <label className=\"label-wrapper\" htmlFor={id}>\n {title}\n <span>{optionalTitle}</span>\n </label>\n <select className=\"form-control\" id={id} name={name} disabled={disabled} onChange={event => onChange(event.target.value)}>\n {disabled && <input type=\"hidden\" name={name} value={selected || options[0]} />}\n {renderOptions()}\n </select>\n </div>\n )\n : null\n }\n </>\n );\n}\n\nexport default SelectInput;\n","import React, { useEffect, useState } from 'react';\n\nconst TextInput = ({ id, name, title, optionalTitle = '', type = 'text', onChange = () => { }, value = '', disabled = false }) => {\n const [inputValue, setInputValue] = useState('');\n\n useEffect(() => {\n if (value) {\n setInputValue(value);\n }\n }, [value]);\n\n const changeCheckbox = event => {\n setInputValue(event.target.value);\n onChange(event);\n }\n\n return (\n <div className=\"form-group\">\n <label className=\"label-wrapper\" htmlFor={id}>\n {title}\n <span>{optionalTitle}</span>\n </label>\n <input\n type={type}\n name={name}\n id={id}\n onChange={changeCheckbox}\n // disabled={disabled}\n readOnly={disabled}\n value={inputValue}\n className=\"form-control\" />\n </div>\n );\n}\n\nexport default TextInput;","import React, { useEffect, useState } from 'react';\n\nconst Checkbox = ({ name, id, title, defaultChecked = false, onChange = () => { }, checked }) => {\n const [checkedState, setCheckedState] = useState(defaultChecked);\n\n useEffect(() => {\n setCheckedState(checked);\n }, [checked]);\n\n const changeCheckbox = event => {\n setCheckedState(event.target.checked);\n onChange(event.target.checked);\n }\n\n return (\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n name={name}\n id={id}\n checked={checkedState}\n onChange={changeCheckbox}\n defaultChecked={defaultChecked} />\n <label htmlFor={id}>{title}</label>\n </div>\n </div>\n );\n}\n\nexport default Checkbox;\n","import React from 'react';\nimport './Container.scss';\n\nconst Container = props => {\n return(\n <div className={props.className}>\n {props.children}\n </div>\n );\n}\n\nexport default Container;","import React from 'react';\nimport Container from '../Container/Container';\n\nimport './AddItemLayout.scss';\n\nconst AddItemLayout = ({ date = '', time = '', status = '', children }) => {\n const renderDate = () => {\n if (date.length > 0) {\n let newDate = new Date(date);\n let day = newDate.getDate();\n let month = newDate.getMonth();\n let year = newDate.getFullYear();\n let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n return <div className=\"date\">{day} &nbsp; {months[month]} &nbsp; {year}</div>;\n }\n }\n\n return (\n <div className=\"edit-item\">\n <Container className=\"l-col w-14\">\n {renderDate()}\n <div className=\"time\">\n {time}\n </div>\n <div className=\"status uppercase\">\n {status}\n </div>\n </Container>\n {children}\n </div>\n );\n}\n\nexport default AddItemLayout;","import React, { Component } from 'react';\nimport './Toolbar.scss';\n\nclass Toolbar extends Component {\n state = {\n toolbarHeight: 205\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", this.handleToolbar);\n document.addEventListener(\"scroll\", this.changeToolbarHeight);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.handleToolbar);\n document.removeEventListener(\"scroll\", this.changeToolbarHeight);\n }\n\n handleToolbar = () => {\n if (document.documentElement.clientWidth < 900) {\n this.setState({\n toolbarHeight: 115\n });\n } else {\n this.setState({\n toolbarHeight: 205\n });\n }\n }\n\n changeToolbarHeight = () => {\n if (document.documentElement.clientWidth > 900) {\n let scrollTop = window.scrollY;\n let toolbarHeight = Math.max(115, 205 - scrollTop);\n this.setState({ toolbarHeight });\n }\n }\n\n className = () => {\n const { className } = this.props;\n\n if (className === \"justify-right\") {\n return this.state.toolbarHeight === 115 ? \"toolbar t-shadow \" + className : \"toolbar \" + className;\n }\n\n return this.state.toolbarHeight === 115 ? \"toolbar t-shadow\" : \"toolbar\";\n }\n\n style = () => {\n if (this.props.mobile) {\n return;\n }\n\n if (document.documentElement.clientWidth > 900) {\n return { marginTop: this.state.toolbarHeight };\n } else {\n return { marginTop: 145 };\n }\n }\n\n render() {\n return (\n <div className={this.className()} style={this.style()}>\n {this.props.children}\n </div>\n );\n }\n}\n\nexport default Toolbar;","import axios from 'axios';\nimport { getAuthToken } from 'src/utils/token';\n\nconst BASE_URL = window.location.origin;\n\nexport const signIn = (data) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n formDataObject.append(\"token\", getAuthToken());\n\n return axios.post(`${BASE_URL}/api/v1/login/index.php`, formDataObject);\n};\n\nexport const checkAuth = () => {\n let uri = '/api/v1/login/index.php';\n const token = getAuthToken();\n\n if (token) uri += `?token=${token}`;\n\n return axios.get(`${BASE_URL}${uri}`);\n};\n\nexport const signInAs = (username) => {\n return axios.get(`${BASE_URL}/api/v1/login/index.php`, {\n params: {\n loginas: username,\n token: getAuthToken()\n }\n });\n};\n\nexport const signOut = () => {\n return axios.get(`${BASE_URL}/api/v1/logout/index.php`);\n};\n\nexport const getMainData = () => {\n let uri = `${BASE_URL}/api/v1/login/session.php`;\n\n return axios.get(uri);\n};\n\nexport const checkAuthToken = token => {\n let uri = `${BASE_URL}/api/v1/login/session.php`;\n\n if (token) uri += `?token=${token}`;\n\n return axios.get(uri);\n};\n","import { REFRESH_COUNTERS } from './menuCounterTypes';\nimport { checkAuth } from 'src/services/session';\nimport { setAuthToken } from 'src/utils/token';\n\nexport const refreshCounters = () => (dispatch, getState) => {\n return new Promise((resolve, reject) => {\n checkAuth()\n .then(res => {\n const { data, token } = res.data;\n\n if (token) setAuthToken(token);\n\n dispatch({\n type: REFRESH_COUNTERS,\n value: {\n user: data\n }\n });\n\n resolve(token);\n })\n .catch(err => {\n reject();\n console.error(err);\n });\n });\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport { getInternetProtocolInfo, updateInternetProtocol } from '../../../ControlPanelService/Ip';\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditInternetProtocol.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst EditInternetProtocol = () => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n dedicated: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n const { ip } = queryParams;\n\n dispatch(addActiveElement('/list/ip/'));\n dispatch(removeFocusedElement());\n\n if (ip) {\n setState({ ...state, loading: true });\n\n getInternetProtocolInfo(ip)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n dedicated: !response.data.dedicated,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedIP = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedIP[name] = value;\n }\n\n updatedIP['token'] = token;\n updatedIP['save'] = 'save';\n updatedIP['v_ip'] = state.data.database;\n\n if (Object.keys(updatedIP).length !== 0 && updatedIP.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateInternetProtocol(updatedIP, state.data.ip)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const onChangeDedicated = value => {\n setState({ ...state, dedicated: value });\n }\n\n return (\n <div className=\"edit-template edit-ip\">\n <Helmet>\n <title>{`Vesta - ${i18n.IP}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing IP Address']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-ip\">\n <TextInput id=\"type\" name=\"v_ip\" title={i18n['IP address']} value={state.data.ip} disabled />\n\n <TextInput id=\"type\" name=\"v_netmask\" title={i18n['Netmask']} value={state.data.netmask} disabled />\n\n <TextInput id=\"type\" name=\"v_interface\" title={i18n['Interface']} value={state.data.interface} disabled />\n\n <Checkbox onChange={onChangeDedicated} name=\"v_shared\" id=\"shared\" title={i18n['Shared']} defaultChecked={state.dedicated} />\n\n {\n !state.dedicated && (\n <div className=\"dedicated-form-group\">\n <SelectInput\n options={state.data.users}\n selected={state.data.owner}\n title={i18n['Assigned user']}\n name=\"v_owner\"\n id=\"owner\" />\n </div>\n )\n }\n\n <TextInput id=\"type\" name=\"v_name\" title={i18n['Assigned domain']} value={state.data.name} optionalTitle={i18n['optional']} />\n\n <TextInput id=\"type\" name=\"v_nat\" title={i18n['NAT IP association']} value={state.data.nat} optionalTitle={i18n['optional']} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/ip/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditInternetProtocol;","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport { addInternetProtocol, getAdditionalInfo } from '../../../ControlPanelService/Ip';\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddInternetProtocol.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst AddInternetProtocol = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const session = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory();\n const [state, setState] = useState({\n loading: false,\n dedicated: true,\n okMessage: '',\n errorMessage: '',\n interfaces: [],\n users: []\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/ip/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n fetchData();\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newIp = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newIp[name] = value;\n }\n\n if (Object.keys(newIp).length !== 0 && newIp.constructor === Object) {\n setState({ ...state, loading: true });\n addInternetProtocol(newIp)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const fetchData = () => {\n getAdditionalInfo()\n .then(result => {\n setState({ ...state, interfaces: result.data.interfaces, users: result.data.users, loading: false });\n })\n .catch(err => console.error(err));\n }\n\n const onChangeDedicated = value => {\n setState({ ...state, dedicated: value });\n }\n\n return (\n <div className=\"edit-template add-ip\">\n <Helmet>\n <title>{`Vesta - ${i18n.IP}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding Package']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <input type=\"hidden\" name=\"ok\" value=\"add\" />\n <input type=\"hidden\" name=\"v_owner\" value={session.userName} />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextInput name=\"v_ip\" id=\"ipAddress\" title={i18n['IP address']} />\n\n <TextInput name=\"v_netmask\" id=\"netmask\" title={i18n['Netmask']} />\n\n <SelectInput\n options={state.interfaces}\n name=\"v_interface\"\n id=\"interfaces\"\n title={i18n['Interface']} />\n\n <Checkbox onChange={onChangeDedicated} name=\"v_shared\" id=\"shared\" title={i18n['Shared']} defaultChecked={state.dedicated} />\n\n {\n !state.dedicated\n ? (\n <div className=\"assigned-user\">\n <SelectInput\n options={state.users}\n name=\"v_owner\"\n id=\"users\"\n title={i18n['Assigned user']} />\n </div>\n )\n : null\n }\n\n <TextInput name=\"v_name\" id=\"name\" title={i18n['Assigned domain']} optionalTitle={i18n['optional']} />\n\n <TextInput name=\"v_nat\" id=\"nat\" title={i18n['NAT IP association']} optionalTitle={i18n['optional']} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/ip/')}>{i18n.Back}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddInternetProtocol;","import React from 'react';\n\nconst TextArea = ({ id, name, defaultValue = '', title, optionalTitle = '', rows = '3', disabled = false }) => {\n return (\n <div className=\"form-group\">\n <label className=\"label-wrapper\" htmlFor={id}>\n {title}\n <span>{optionalTitle}</span>\n </label>\n <textarea\n className=\"form-control\"\n id={id}\n rows={rows}\n name={name}\n disabled={disabled}\n defaultValue={defaultValue}>\n </textarea>\n </div>\n );\n}\n\nexport default TextArea;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/server/index.php';\nconst serverAdditionalInfoUri = '/api/v1/edit/server/index.php';\n\nexport const getServersList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const bulkAction = (action, services) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n services.forEach(service => {\n formData.append(\"service[]\", service);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/service/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const getServerAdditionalInfo = () => {\n return axios.get(BASE_URL + serverAdditionalInfoUri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const updateService = (data, uri = '') => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + `/api/v1/edit/server/${uri}/index.php`, formDataObject, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const getServiceInfo = service => {\n return axios.get(`${BASE_URL}/api/v1/edit/server/${service}/index.php`);\n}\n\nexport const getServiceLogs = service => {\n return axios.get(`${BASE_URL}${webApiUri}?${service}`);\n}\n\nexport const services = [\n 'apache2',\n 'clamd',\n 'cron',\n 'crond',\n 'exim',\n 'exim4',\n 'fail2ban',\n 'iptables',\n 'mariadb',\n 'mysqld',\n 'named',\n 'php-fpm',\n 'php5-fpm',\n 'proftpd',\n 'spamassassin',\n 'spamd',\n 'vsftpd',\n];","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../../actions/MainNavigation/mainNavigationActions\";\nimport TextInput from '../../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport AddItemLayout from '../../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { getServiceInfo, updateService } from 'src/ControlPanelService/Server';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../../components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { Link, useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './EditServerNginx.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst EditServerNginx = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n basicOptions: true,\n advancedOptions: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getServiceInfo('nginx')\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedService = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedService[name] = value;\n }\n\n if (Object.keys(updatedService).length !== 0 && updatedService.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedService, '/nginx')\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const toggleOptions = () => {\n setState({\n ...state,\n advancedOptions: !state.advancedOptions,\n basicOptions: !state.basicOptions\n });\n }\n\n return (\n <div className=\"edit-template edit-nginx\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Configuring Server']} / {state.data.service_name}</div>\n <div className=\"link\"><Link to=\"/edit/server/php\">{i18n['Configure']} php.ini</Link></div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-mail\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n {\n !state.basicOptions && (\n <button type=\"button\" onClick={() => toggleOptions()}>\n {i18n['Basic options']}\n {state.basicOptions ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n )\n }\n\n {\n state.basicOptions && (\n <>\n <TextInput\n id=\"worker_processes\"\n title=\"worker_processes\"\n name=\"v_worker_processes\"\n value={state.data.worker_processes} />\n\n <TextInput\n id=\"worker_connections\"\n title=\"worker_connections\"\n name=\"v_worker_connections\"\n value={state.data.worker_connections} />\n\n <TextInput\n id=\"client_max_body_size\"\n title=\"client_max_body_size\"\n name=\"v_client_max_body_size\"\n value={state.data.client_max_body_size} />\n\n <TextInput\n id=\"send_timeout\"\n title=\"send_timeout\"\n name=\"v_send_timeout\"\n value={state.data.send_timeout} />\n\n <TextInput\n id=\"proxy_connect_timeout\"\n title=\"proxy_connect_timeout\"\n name=\"v_proxy_connect_timeout\"\n value={state.data.proxy_connect_timeout} />\n\n <TextInput\n id=\"proxy_send_timeout\"\n title=\"proxy_send_timeout\"\n name=\"v_proxy_send_timeout\"\n value={state.data.proxy_send_timeout} />\n\n <TextInput\n id=\"proxy_read_timeout\"\n title=\"proxy_read_timeout\"\n name=\"v_proxy_read_timeout\"\n value={state.data.proxy_read_timeout} />\n\n <TextInput\n id=\"gzip\"\n title=\"gzip\"\n name=\"v_gzip\"\n value={state.data.gzip} />\n\n <TextInput\n id=\"gzip_comp_level\"\n title=\"gzip_comp_level\"\n name=\"v_gzip_comp_level\"\n value={state.data.gzip_comp_level} />\n\n <TextInput\n id=\"charset\"\n title=\"charset\"\n name=\"v_charset\"\n value={state.data.charset} />\n </>\n )\n }\n\n {\n !state.advancedOptions && (\n <button type=\"button\" onClick={() => toggleOptions()}>\n {i18n['Advanced options']}\n {state.advancedOptions ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n )\n }\n\n <br />\n <br />\n\n {\n state.advancedOptions && (\n <>\n <TextArea\n defaultValue={state.data.config}\n title={state.data.config_path}\n name=\"v_config\"\n id=\"v_config\"\n rows=\"25\" />\n\n <br />\n\n <Checkbox\n title={i18n['restart']}\n defaultChecked={true}\n name=\"v_restart\"\n id=\"restart\" />\n </>\n )\n }\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditServerNginx;","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../../actions/MainNavigation/mainNavigationActions\";\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport { getServiceInfo, updateService } from 'src/ControlPanelService/Server';\nimport AddItemLayout from '../../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../../components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './Postgresql.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst Postgresql = () => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getServiceInfo('postgresql')\n .then(response => {\n if (!response.data.config) {\n history.push('/list/server');\n }\n\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedService = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedService[name] = value;\n }\n\n if (Object.keys(updatedService).length !== 0 && updatedService.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedService, '/postgresql')\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-pgsql\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">\n {i18n['Configuring Server']} / {state.data.service_name}\n </div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-pgsql\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextArea\n defaultValue={state.data.options}\n title={state.data.options_path}\n name=\"v_options\"\n id=\"v_options\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config}\n title={state.data.config_path}\n name=\"v_config\"\n id=\"v_config\"\n rows=\"10\" />\n\n <br />\n\n <Checkbox\n title={i18n['restart']}\n defaultChecked={true}\n name=\"v_restart\"\n id=\"restart\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div >\n );\n}\n\nexport default Postgresql;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/backup/index.php';\nconst scheduleBackupUri = '/api/v1/schedule/restore/';\nconst backupDetailsUri = '/api/v1/list/backup/index.php';\nconst backupExclusionsUri = '/api/v1/list/backup/exclusions/index.php';\nconst backupExclusionsInfoUri = '/api/v1/edit/backup/exclusions/index.php';\nconst backupRestoreSettingUri = '/api/v1/schedule/restore/index.php';\nconst bulkRestoreUri = '/api/v1/bulk/restore/index.php';\n\nexport const getBackupList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const bulkAction = (action, backups) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n backups.forEach(backup => {\n formData.append(\"backup[]\", backup);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/backup/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const scheduleBackup = () => {\n return axios.get(BASE_URL + scheduleBackupUri);\n}\n\nexport const getBackupDetails = backup => {\n return axios.get(BASE_URL + `${backupDetailsUri}?backup=${backup}`);\n}\n\nexport const restoreBackupSetting = params => {\n return axios.get(BASE_URL + `${backupRestoreSettingUri}${params}`);\n}\n\nexport const bulkRestore = (action, selection, backup) => {\n const formData = new FormData();\n formData.append(\"token\", getAuthToken());\n formData.append(\"action\", action);\n formData.append(\"backup\", backup);\n\n selection.forEach(udir => {\n formData.append(\"udir[]\", udir);\n });\n\n return axios.post(BASE_URL + `${bulkRestoreUri}`, formData);\n}\n\nexport const getBackupExclusions = () => {\n return axios.get(BASE_URL + `${backupExclusionsUri}`);\n}\n\nexport const getBackupExclusionsInfo = () => {\n return axios.get(BASE_URL + `${backupExclusionsInfoUri}`);\n}\n\nexport const updateBackupExclusions = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + backupExclusionsInfoUri, formDataObject, {\n params: {\n token: getAuthToken()\n }\n });\n}\n","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"src/actions/MainNavigation/mainNavigationActions\";\nimport { updateBackupExclusions, getBackupExclusionsInfo } from 'src/ControlPanelService/Backup';\nimport TextArea from 'src/components/ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport AddItemLayout from 'src/components/ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Toolbar from 'src/components/MainNav/Toolbar/Toolbar';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet';\n\nimport './style.scss';\nimport HtmlParser from 'react-html-parser';\n\nconst EditBackupExclusions = () => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/backup/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getBackupExclusionsInfo()\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedExclusions = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedExclusions[name] = value;\n }\n\n updatedExclusions['token'] = token;\n updatedExclusions['save'] = 'save';\n\n if (Object.keys(updatedExclusions).length !== 0 && updatedExclusions.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateBackupExclusions(updatedExclusions)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage: '', loading: false });\n } else if (okMessage) {\n setState({ ...state, errorMessage: '', okMessage, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-backup-exclusions\">\n <Helmet>\n <title>{`Vesta - ${i18n.BACKUP}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing Backup Exclusions']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-backup-exclusions\">\n <TextArea\n title={i18n['Web Domains']}\n defaultValue={state.data.web}\n name=\"v_web\"\n id=\"v_web\" />\n\n <TextArea\n title={i18n['Mail Domains']}\n defaultValue={state.data.mail}\n name=\"v_mail\"\n id=\"v_mail\" />\n\n <TextArea\n title={i18n['Databases']}\n defaultValue={state.data.db}\n name=\"v_db\"\n id=\"v_db\" />\n\n <TextArea\n title={i18n['User Directories']}\n defaultValue={state.data.userdir}\n name=\"v_userdir\"\n id=\"v_userdir\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/backup/exclusions')}>{i18n.Back}</button>\n </div>\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditBackupExclusions;\n","import { ADD_CPANEL_FOCUSED_ELEMENT, REMOVE_CPANEL_FOCUSED_ELEMENT } from './controlPanelContentTypes';\n\nexport const addControlPanelContentFocusedElement = value => {\n return {\n type: ADD_CPANEL_FOCUSED_ELEMENT,\n value\n };\n};\n\nexport const removeControlPanelContentFocusedElement = () => {\n return {\n type: REMOVE_CPANEL_FOCUSED_ELEMENT,\n value: ''\n };\n};","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport './DropdownFilter.scss';\n\nconst DropdownFilter = props => {\n const { i18n } = useSelector(state => state.session);\n\n const state = {\n usersList: [i18n.Date, i18n.Username, i18n.Disk, i18n.Bandwidth, i18n.Starred],\n webList: [i18n.Date, i18n.Domain, i18n['IP Addresses'], i18n.Disk, i18n.Bandwidth, i18n.Starred],\n dnsList: [i18n.Date, i18n.Expire, i18n.Domain, i18n['IP Addresses'], i18n.Records, i18n.Starred],\n mailList: [i18n.Date, i18n.Domain, i18n.Accounts, i18n.Disk, i18n.Starred],\n mailAccountList: [i18n.Date, i18n.Accounts, i18n.Disk, i18n.Starred],\n dbList: [i18n.Date, i18n.Database, i18n.Disk, i18n.User, i18n.Host, i18n.Starred],\n cronList: [i18n.Date, i18n.Command, i18n.Starred],\n packagesList: [i18n.Date, i18n['Package Name'], i18n.Starred],\n internetProtocolsList: [i18n.Date, i18n.IP, i18n.Netmask, i18n.Interface, i18n.Domain, i18n.Owner, i18n.Starred],\n firewallList: [i18n.Action, i18n.Protocol, i18n.Port, i18n['IP Addresses'], i18n.Comment, i18n.Starred],\n searchList: [i18n.Date, i18n.Name, i18n.Starred]\n };\n\n const changeSorting = (type, order) => {\n props.changeSorting(type, order);\n }\n\n const filterClassName = (sorting, order) => {\n if (props.sorting === sorting && props.order === order) {\n return \"dropdown-item active\";\n }\n\n return \"dropdown-item\";\n }\n\n const renderFilters = () => {\n const { list } = props;\n let activeListFilter = state[list];\n\n return activeListFilter.map((item, index) => {\n return (\n <li key={index}>\n <span className={filterClassName(item, \"descending\")} onClick={() => changeSorting(item, \"descending\")}>{item}<span className=\"arrow-down\">&#8595;</span></span>\n <span className={filterClassName(item, \"ascending\")} onClick={() => changeSorting(item, \"ascending\")}><span>&#8593;</span></span>\n </li>\n );\n });\n }\n\n const button = () => {\n if (props.order === \"descending\") {\n return <span className=\"arrow-down\">&#8595;</span>;\n } else {\n return <span>&#8593;</span>;\n }\n }\n\n return (\n <div className=\"btn-group\">\n <button className=\"btn btn-sm btn-outline-secondary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {i18n['sort by']}: <b>{props.sorting}</b>\n {button()}\n </button>\n <div className=\"dropdown-menu\">\n <ul className=\"dropdown-list\">\n {renderFilters()}\n </ul>\n </div>\n </div >\n );\n}\n\nexport default DropdownFilter;","import React, { useState, useEffect, useRef } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport './SearchInput.scss';\n\nconst SearchInput = props => {\n const [searchTerm, setSearchTerm] = useState('');\n let inputElement = useRef(null);\n\n const handleClick = () => {\n if (searchTerm && searchTerm !== '') {\n return props.handleSearchTerm(searchTerm);\n }\n\n return;\n }\n\n useEffect(() => {\n window.addEventListener(\"keyup\", focusInput);\n\n return () => window.removeEventListener(\"keyup\", focusInput);\n }, []);\n\n const onSubmit = e => {\n e.preventDefault();\n\n if (searchTerm) {\n handleClick();\n }\n }\n\n const focusInput = event => {\n if (event.keyCode === 70) {\n return inputElement.current.focus();\n }\n }\n\n return (\n <form onSubmit={onSubmit}>\n <div className=\"search-input-form\">\n <input type=\"text\" className=\"form-control\" onChange={e => setSearchTerm(e.target.value)} ref={inputElement} />\n <button className=\"btn btn-outline-secondary\" type=\"submit\" onClick={() => handleClick()}><FontAwesomeIcon icon=\"search\" /></button>\n </div>\n </form>\n );\n}\n\nexport default SearchInput;\n","import axios from \"axios\";\nlet addFavoriteUri = '/api/v1/add/favorite/index.php';\nlet deleteFavoriteUri = '/api/v1/delete/favorite/index.php';\nlet BASE_URL = window.location.origin;\n\n\nexport const addFavorite = (unitId, section) => {\n return axios.get(BASE_URL + addFavoriteUri, {\n params: {\n 'v_unit_id': unitId,\n 'v_section': section\n }\n });\n}\n\nexport const deleteFavorite = (unitId, section) => {\n return axios.get(BASE_URL + deleteFavoriteUri, {\n params: {\n 'v_unit_id': unitId,\n 'v_section': section\n }\n });\n}","import React, { Component, useEffect, useState } from 'react';\nimport Container from '../Container/Container';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useSelector } from 'react-redux';\nimport './ListItem.scss';\n\nconst ListItem = (props) => {\n const { i18n } = useSelector(state => state.session);\n const [state, setState] = useState({ starred: false });\n\n useEffect(() => {\n if (props.hasOwnProperty('starred')) {\n setState({ ...state, starred: Boolean(props.starred) });\n }\n }, [props.starred]);\n\n const printDate = date => {\n if (date) {\n let newDate = new Date(date);\n let day = newDate.getDate();\n let month = newDate.getMonth() + 1;\n let year = newDate.getFullYear();\n let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n return <div className=\"date\">{day} &nbsp; {months[month - 1]} &nbsp; {year}</div>;\n }\n }\n\n const toggleItem = () => {\n props.checkItem();\n }\n\n const starItem = () => {\n setState({ ...state, starred: !state.starred });\n props.toggleFav(!state.starred);\n }\n\n const className = () => {\n const { starred } = state;\n const { checked, outdated, suspended, stopped, focused, sysInfo } = props;\n let className = 'list-item';\n\n if (checked) {\n className += ' toggled';\n }\n\n if (starred) {\n className += ' starred';\n }\n\n if (outdated) {\n className += ' outdated';\n }\n\n if (suspended) {\n className += ' suspended';\n }\n\n if (stopped) {\n className += ' stopped';\n }\n\n if (focused) {\n className += ' focused';\n }\n\n if (sysInfo) {\n className += ' sys-info';\n }\n\n return className;\n }\n\n return (\n <div className={className()} id={props.id}>\n <Container className=\"l-col w-14\">\n {printDate(props.date)}\n <div className=\"text-status\">\n <div className=\"checkbox\"><input type=\"checkbox\" onChange={toggleItem} checked={props.checked} /></div>\n {props.leftNameText}\n </div>\n <div className=\"star\">\n <div className=\"checkbox\"><input type=\"checkbox\" onChange={toggleItem} checked={props.checked} /></div>\n <div onClick={starItem}><FontAwesomeIcon icon=\"star\" /></div>\n </div>\n {props.suspended && <div className='suspended'>{i18n.suspended}</div>}\n </Container>\n {props.children}\n </div>\n );\n}\n\nexport default ListItem;\n","import React, { Component } from 'react';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport Container from '../ControlPanel/Container/Container';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport './InternetProtocol.scss';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst InternetProtocol = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(data.NAME, 'add');\n } else {\n props.toggleFav(data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(data.NAME);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/ip/?ip=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n focused={data.FOCUSED}\n checked={data.isChecked}\n date={data.DATE}\n starred={data.STARRED}\n toggleFav={toggleFav}\n checkItem={checkItem}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.NAME}</div>\n <br />\n <div className=\"stats\">\n <Container className=\"c-1 w-35\">\n <div className=\"ip\"><span className=\"stat\">{data.NETMASK}</span></div>\n <div className=\"soa\"><span className=\"stat\">{data.INTERFACE}</span></div>\n </Container>\n <Container className=\"c-2 w-30\">\n <div>{i18n.Domains}: <span className=\"stat\">{data.U_WEB_DOMAINS}</span></div>\n <div>{i18n.Status}: <span className=\"stat\">{data.STATUS}</span></div>\n </Container>\n <Container className=\"c-3 w-35\">\n <div>{i18n.Owner}: <span className=\"stat\">{data.OWNER}</span></div>\n <div>{i18n.Users}: <span className=\"stat\">{data.U_SYS_USERS.replace(',', ', ')}</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <Link className=\"link-edit\" to={`/edit/ip/?ip=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default InternetProtocol;","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport './LeftButton.scss';\nimport { Link } from 'react-router-dom';\n\nconst LeftButton = ({ showLeftMenu, list, name, href, onClick = () => { } }) => {\n const leftMenuClassName = () => {\n if (!showLeftMenu) {\n return \"l-menu none\";\n }\n\n if (list === 'server') {\n return \"l-menu server-icon\";\n } else if (list === 'backup-details') {\n return \"l-menu backup-details-icon\";\n }\n\n return \"l-menu\";\n }\n\n const renderIcon = () => {\n if (list === 'server') {\n return <FontAwesomeIcon icon=\"cog\" />\n } else if (list === 'backup-details') {\n return <FontAwesomeIcon icon=\"play\" />\n }\n\n return <FontAwesomeIcon icon=\"plus\" />\n }\n\n return (\n <div className={leftMenuClassName()}>\n {\n href\n ? (<Link to={href}>\n {renderIcon()}\n <span className=\"add\">{name}</span>\n </Link>)\n : (<button onClick={onClick}>\n {renderIcon()}\n <span className=\"add\">{name}</span>\n </button>)\n }\n </div>\n );\n}\n\nexport default LeftButton;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport './Checkbox.scss';\n\nfunction toggleAll(props, e) {\n props.toggleAll(e.target.checked);\n}\n\nconst Checkbox = (props) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"input-group-prepend\">\n <div className=\"input-group-text\">\n <input type=\"checkbox\" onChange={(e) => toggleAll(props, e)} aria-label=\"Checkbox for following text input\" id=\"checkbox\" checked={props.toggled} />\n </div>\n <span className=\"input-group-text\">\n <label htmlFor=\"checkbox\">{i18n['toggle all']}</label>\n </span>\n </div>\n );\n}\n\nexport default Checkbox;","import React, { useEffect, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { values } from '../../../../ControlPanelService/Select';\nimport { useSelector } from 'react-redux';\nimport './Select.scss';\n\nconst Select = ({ cronReports, ...props }) => {\n const { i18n } = useSelector(state => state.session);\n const listValues = values(i18n);\n\n const [state, setState] = useState({\n usersList: listValues.usersList,\n webList: listValues.webList,\n dnsList: listValues.dnsList,\n mailList: listValues.mailList,\n dbList: listValues.dbList,\n cronList: listValues.cronList,\n backupList: listValues.backupList,\n packagesList: listValues.packagesList,\n internetProtocolsList: listValues.internetProtocolsList,\n statisticsList: [],\n updatesList: listValues.updatesList,\n firewallList: listValues.firewallList,\n serverList: listValues.serverList,\n backupDetailList: listValues.backupDetailList,\n banList: listValues.banList,\n selected: '',\n });\n\n useEffect(() => {\n const { list } = props;\n setState({ ...state, list });\n }, []);\n\n const defaultValue = () => {\n if (props.list === 'statisticsList') {\n return i18n['show per user'];\n }\n\n return i18n['apply to selected'];\n }\n\n const renderOptions = () => {\n const { list } = props;\n let activeList = state[list];\n\n if (list === 'cronList') {\n if (cronReports) {\n activeList = activeList.filter((item, index) => index !== 0);\n } else {\n activeList = activeList.filter((item, index) => index !== 1);\n }\n }\n\n if (list === 'statisticsList') {\n return props.users.map((item, index) => { return <option key={index} value={item}>{item}</option> });\n } else {\n return activeList.map((item, index) => { return <option key={index} value={item.value}>{item.name}</option> });\n }\n }\n\n const handleSelect = event => {\n setState({ ...state, selected: event.target.value });\n }\n\n const bulkAction = () => {\n props.bulkAction(state.selected);\n setState({ ...state, selected: '' });\n }\n\n return (\n <div className=\"select-wrapper\">\n <select className=\"custom-select\" id=\"inputGroupSelect04\" onChange={handleSelect}>\n <option defaultValue={defaultValue()} value={defaultValue()}>{props.list === \"statisticsList\" ? i18n['show per user'] : i18n['apply to selected']}</option>\n {renderOptions()}\n </select>\n <div className=\"input-group-append\">\n <button className=\"btn btn-outline-secondary\" type=\"button\" onClick={bulkAction}>\n <FontAwesomeIcon icon=\"angle-right\" />\n </button>\n </div>\n </div>\n );\n}\n\nexport default Select;\n","export const values = (select = {}) => {\n return {\n usersList: [\n { value: 'rebuild', name: select.rebuild },\n { value: 'rebuild web', name: select['rebuild web'] },\n { value: 'rebuild dns', name: select['rebuild dns'] },\n { value: 'rebuild mail', name: select['rebuild mail'] },\n { value: 'rebuild db', name: select['rebuild db'] },\n { value: 'rebuild cron', name: select['rebuild cron'] },\n { value: 'update counters', name: select['update counters'] },\n { value: 'suspend', name: select.suspend },\n { value: 'unsuspend', name: select.unsuspend },\n { value: 'delete', name: select.delete }\n ],\n webList: [\n { value: 'suspend', name: select.suspend },\n { value: 'unsuspend', name: select.unsuspend },\n { value: 'delete', name: select.delete }\n ],\n dnsList: [\n { value: 'suspend', name: select.suspend },\n { value: 'unsuspend', name: select.unsuspend },\n { value: 'delete', name: select.delete }\n ],\n mailList: [\n { value: 'suspend', name: select.suspend },\n { value: 'unsuspend', name: select.unsuspend },\n { value: 'delete', name: select.delete }\n ],\n dbList: [\n { value: 'suspend', name: select.suspend },\n { value: 'unsuspend', name: select.unsuspend },\n { value: 'delete', name: select.delete }\n ],\n cronList: [\n { value: 'add-cron-reports', name: select['turn on notifications'] },\n { value: 'delete-cron-reports', name: select['turn off notifications'] },\n { value: 'suspend', name: select.suspend },\n { value: 'unsuspend', name: select.unsuspend },\n { value: 'delete', name: select.delete }\n ],\n backupList: [\n { value: 'delete', name: select.delete }\n ],\n packagesList: [\n { value: 'delete', name: select.delete }\n ],\n internetProtocolsList: [\n { value: 'reread IP', name: select['reread IP'] },\n { value: 'delete', name: select.delete }\n ],\n updatesList: [\n { value: 'update', name: select.update }\n ],\n firewallList: [\n { value: 'suspend', name: select.suspend },\n { value: 'unsuspend', name: select.unsuspend },\n { value: 'delete', name: select.delete }\n ],\n serverList: [\n { value: 'stop', name: select.stop },\n { value: 'start', name: select.start },\n { value: 'restart', name: select.restart }\n ],\n backupDetailList: [\n { value: 'restore', name: select.restore }\n ],\n banList: [\n { value: 'delete', name: select.delete }\n ]\n }\n};","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport './Modal.scss';\n\nconst Modal = ({ show, text, onSave, onCancel, showSaveButton = true, showCancelButton = true }) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div>\n <div className={`modal fade ${show ? 'show' : ''}`} id=\"c-panel-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\" style={{ display: show ? 'block' : 'none' }}>\n <div className=\"modal-dialog\" role=\"document\">\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h5 className=\"modal-title\" id=\"exampleModalLabel\">{i18n.Confirmation}</h5>\n <button type=\"button\" onClick={() => onCancel()} className=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div className=\"modal-body\">\n {text}\n </div>\n <div className=\"modal-footer\">\n {showCancelButton ? <button onClick={() => onCancel()} type=\"button\" className=\"btn btn-secondary\" data-dismiss=\"modal\">{i18n.Cancel}</button> : ''}\n {showSaveButton ? <button onClick={() => onSave()} type=\"button\" className=\"btn btn-primary\">{i18n.OK}</button> : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n};\n\nexport default Modal;\n","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport { bulkAction, getIpList, handleAction } from '../../ControlPanelService/Ip';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport InternetProtocol from '../../components/InternetProtocol/InternetProtocol';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport './InternetProtocols.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst InternetProtocols = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n const [state, setState] = useState({\n internetProtocols: [],\n ipFav: [],\n toggledAll: false,\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/ip/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.internetProtocols]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = internetProtocols => {\n internetProtocols[0]['FOCUSED'] = internetProtocols[0]['NAME'];\n setState({ ...state, internetProtocols });\n dispatch(addControlPanelContentFocusedElement(internetProtocols[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let internetProtocols = [...state.internetProtocols];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(internetProtocols);\n return;\n }\n\n let focusedElementPosition = internetProtocols.findIndex(pack => pack.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== internetProtocols.length - 1) {\n let nextFocusedElement = internetProtocols[focusedElementPosition + 1];\n internetProtocols[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, internetProtocols });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let internetProtocols = [...state.internetProtocols];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(internetProtocols);\n return;\n }\n\n let focusedElementPosition = internetProtocols.findIndex(pack => pack.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = internetProtocols[focusedElementPosition - 1];\n internetProtocols[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, internetProtocols });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return handleEdit();\n default: break;\n }\n }\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/ip/?ip=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { internetProtocols } = state;\n let currentInternetProtocolData = internetProtocols.filter(pack => pack.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentInternetProtocolData.delete_conf, `/api/v1/delete/ip/?ip=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getIpList()\n .then(result => {\n setState({\n ...state,\n internetProtocols: reformatData(result.data.data),\n ipFav: result.data.ipFav,\n selection: [],\n totalAmount: result.data.totalAmount,\n toggledAll: false\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let internetProtocols = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n internetProtocols.push(data[i]);\n }\n\n return internetProtocols;\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const internetProtocols = () => {\n const { internetProtocols } = state;\n const ipFav = { ...state.ipFav };\n const result = [];\n\n internetProtocols.forEach(internetProtocol => {\n internetProtocol.FOCUSED = controlPanelFocusedElement === internetProtocol.NAME;\n\n if (ipFav[internetProtocol.NAME]) {\n internetProtocol.STARRED = ipFav[internetProtocol.NAME];\n } else {\n internetProtocol.STARRED = 0;\n }\n\n result.push(internetProtocol);\n });\n\n let sortedResult = sortArray(result);\n\n return sortedResult.map((item, index) => {\n return <InternetProtocol data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, internetProtocols } = state;\n let duplicate = [...selection];\n let internetProtocolsDuplicate = internetProtocols;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = internetProtocolsDuplicate.findIndex(ip => ip.NAME === name);\n internetProtocolsDuplicate[incomingItem].isChecked = !internetProtocolsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, internetProtocols: internetProtocolsDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortingColumn = sortBy(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Date, IP, Domains, Netmask, Interface, Owner, Starred } = i18n;\n\n switch (sorting) {\n case Date: return 'DATE';\n case IP: return 'IP';\n case Netmask: return 'NETMASK';\n case Interface: return 'INTERFACE';\n case Domains: return 'U_WEB_DOMAINS';\n case Owner: return 'OWNER';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n const { ipFav } = state;\n let ipFavDuplicate = ipFav;\n\n if (type === 'add') {\n ipFavDuplicate[value] = 1;\n\n addFavorite(value, 'ip')\n .then(() => {\n setState({ ...state, ipFav: ipFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n ipFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'ip')\n .then(() => {\n setState({ ...state, ipFav: ipFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n let internetProtocolsDuplicate = [...state.internetProtocols];\n\n if (toggled) {\n let ipNames = [];\n\n let internetProtocols = internetProtocolsDuplicate.map(internetProtocol => {\n ipNames.push(internetProtocol.NAME);\n internetProtocol.isChecked = true;\n return internetProtocol;\n });\n\n setState({ ...state, internetProtocols, selection: ipNames, toggledAll: toggled });\n } else {\n let internetProtocols = internetProtocolsDuplicate.map(internetProtocol => {\n internetProtocol.isChecked = false;\n return internetProtocol;\n });\n\n setState({ ...state, internetProtocols, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setLoading(true);\n bulkAction(action, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, actionUrl) => {\n setModal({ ...modal, visible: true, text, actionUrl });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({ ...modal, visible: false, text: '', actionUrl: '' });\n }\n\n return (\n <div className=\"internetProtocols\">\n <Helmet>\n <title>{`Vesta - ${i18n.IP}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name={i18n['Add IP']} href=\"/add/ip/\" showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='internetProtocolsList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"internetProtocolsList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"ip-wrapper\">\n {loading\n ? <Spinner />\n : (<>\n {internetProtocols()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)}\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default InternetProtocols;\n","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst addWebUri = '/api/v1/add/web/index.php';\nconst webApiUri = '/api/v1/list/web/index.php';\nconst webStatsUri = '/api/v1/web-stats.php';\nconst domainInfoUri = '/api/v1/edit/web/index.php';\nconst updateDomainUri = '/api/v1/edit/web/index.php';\n\nexport const getWebList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const bulkAction = (action, webDomains) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n webDomains.forEach(webDomain => {\n formData.append(\"domain[]\", webDomain);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/web/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const addWeb = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addWebUri, formDataObject);\n}\n\nexport const getWebStats = () => {\n return axios.get(BASE_URL + webStatsUri);\n}\n\nexport const getDomainInfo = domain => {\n return axios.get(BASE_URL + domainInfoUri, {\n params: {\n domain,\n token: getAuthToken()\n }\n });\n}\n\nexport const updateWebDomain = (data, domain) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updateDomainUri, formDataObject, {\n params: {\n domain,\n token: getAuthToken()\n }\n });\n}","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nconst Password = ({ defaultValue, onChange = () => { }, id, name, title, showGenerationButton = true, ...props }) => {\n const { i18n } = useSelector(state => state.session);\n const [state, setState] = useState({\n hidePassword: false,\n generatedPassword: ''\n });\n\n useEffect(() => {\n if (defaultValue && !state.generatedPassword) {\n setState({ ...state, generatedPassword: defaultValue });\n }\n }, [defaultValue]);\n\n const hidePasswordHandler = () => {\n setState({ ...state, hidePassword: !state.hidePassword });\n }\n\n const generatePassword = () => {\n let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';\n let stringLength = 10;\n let result = '';\n\n for (var i = 0; i < stringLength; i++) {\n let randomNumber = Math.floor(Math.random() * chars.length);\n result += chars.substr(randomNumber, 1);\n }\n\n setState({ ...state, generatedPassword: result });\n }\n\n const passwordInputHandler = value => {\n setState({ ...state, generatedPassword: value });\n onChange(value);\n }\n\n return (\n <div className=\"form-group\">\n <label htmlFor=\"password\">\n {title ? title : i18n.Password}\n {\n showGenerationButton && (\n <> / <button type=\"button\" className=\"generate-password\" onClick={() => generatePassword()}>\n {i18n.Generate}\n </button></>\n )\n }\n </label>\n <div className=\"password-wrapper\">\n <input\n type={state.hidePassword ? 'password' : 'text'}\n className=\"form-control\"\n id={`password_${id}`}\n name={name}\n value={state.generatedPassword}\n onChange={event => passwordInputHandler(event.target.value)}\n {...props} />\n <button type=\"button\" onClick={() => hidePasswordHandler()}>\n {state.hidePassword ?\n <span className=\"eye-slash\"><FontAwesomeIcon icon=\"eye-slash\" /></span> :\n <span className=\"eye\"><FontAwesomeIcon icon=\"eye\" /></span>}\n </button>\n </div>\n </div>\n );\n}\n\nexport default Password;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport Password from '../../../../components/ControlPanel/AddItemLayout/Form/Password/Password';\n\nimport './AdditionalFtpForEditing.scss';\n\nconst AdditionalFtpForEditing = ({ domain, data = {}, onDeleteAdditionalFtp, prefixI18N, prePath, checked, ...props }) => {\n const { i18n, userName } = useSelector(state => state.session);\n const [state, setState] = useState({\n username: data.v_ftp_user || '',\n path: ''\n });\n\n const renderForm = () => {\n if (data.deleted) {\n if (data.is_new === 0) {\n return (<>\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][delete]`} value=\"1\" />\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][is_new]`} value={data.is_new} />\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][v_ftp_user]`} value={data.v_ftp_user} />\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][v_ftp_password]`} value={data.v_ftp_password} />\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][v_ftp_path]`} value={data.v_ftp_path} />\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][v_ftp_pre_path]`} value={prePath} />\n </>);\n }\n } else {\n if (!checked) {\n return <></>;\n }\n\n return (\n <div className=\"additional-ftp\">\n <div className=\"title\">\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][delete]`} value=\"0\" />\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][is_new]`} value=\"1\" />\n\n <span className=\"data.indexed-name\">{i18n.FTP} #{data.id + 1}</span>\n <span>\n &nbsp;\n <button\n type=\"button\"\n onClick={() => onDeleteAdditionalFtp(data.id)}>\n ({i18n.Delete ?? 'Delete'})\n </button>\n </span>\n </div>\n\n <div className=\"form-transform\">\n <div className=\"form-group username\">\n <label htmlFor={`ftp_user_${data.id}`}>{i18n.Username}</label>\n <span className=\"prefix-note\">{prefixI18N}</span>\n <div className=\"input-wrapper\">\n <input\n defaultValue={state.username}\n onChange={event => setState({ ...state, username: event.target.value })}\n type=\"text\"\n disabled={data.v_ftp_user}\n className=\"form-control\"\n id={`ftp_user_${data.id}`}\n name={`v_ftp_user[${data.id}][v_ftp_user]`} />\n <span>{data.v_ftp_user ? data.v_ftp_user : `${userName}_${state.username}`}</span>\n </div>\n </div>\n\n <Password name={`v_ftp_user[${data.id}][v_ftp_password]`} id={data.id} />\n\n <div className=\"form-group\">\n <input type=\"hidden\" name=\"v_ftp_pre_path\" value={prePath} />\n <input type=\"hidden\" name={`v_ftp_user[${data.id}][v_ftp_path_prev]`} value={data.v_ftp_path !== '/' ? '/' : ''} />\n\n <label htmlFor={`path${data.id}`}>{i18n.Path}</label>\n <input\n type=\"text\"\n value={state.path}\n onChange={event => setState({ ...state, path: event.target.value })}\n className=\"form-control\"\n id={`path${data.id}`}\n name={`v_ftp_user[${data.id}][v_ftp_path]`} />\n <span className=\"path-note\">{prePath}</span>\n </div>\n\n {\n data.is_new === 1 && (\n <div className=\"form-group\">\n <label htmlFor={`sendLoginCredentialsToEmailAddress_${data.id}`}>{i18n['Send login credentials to email address']}</label>\n <input\n type=\"email\"\n className=\"form-control\"\n id={`sendLoginCredentialsToEmailAddress_${data.id}`}\n defaultValue={data.v_ftp_email}\n name={`v_ftp_user[${data.id}][v_ftp_email]`} />\n </div>\n )\n }\n\n </div>\n </div >);\n }\n\n return <></>;\n }\n\n return renderForm();\n}\n\nexport default AdditionalFtpForEditing;\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport AdditionalFtpForEditing from '../AdditionalFtpForEditing/AdditionalFtpForEditing';\nimport './AdditionalFtpWrapper.scss';\n\nconst AdditionalFtpWrapper = ({ checked, ftps, unCheckAdditionalFtpBox, prefixI18N, ftpUserPrePath, domain, ...props }) => {\n const { i18n } = useSelector(state => state.session);\n const [state, setState] = useState({\n additionalFtp: []\n });\n\n useEffect(() => {\n if (ftps) {\n const data = ftps.map((item, index) => {\n item['deleted'] = !checked;\n item['id'] = index;\n return item;\n });\n\n setState({ ...state, additionalFtp: data });\n }\n }, [checked, ftps]);\n\n const renderAdditionalFtps = () => {\n return state.additionalFtp.map(ftp => {\n return <AdditionalFtpForEditing\n key={ftp.id}\n prefixI18N={prefixI18N}\n data={ftp}\n checked={checked}\n prePath={ftpUserPrePath}\n domain={domain}\n onDeleteAdditionalFtp={id => onDeleteFtp(id)} />;\n });\n }\n\n const onDeleteFtp = index => {\n let updatedAdditionalFtps = [];\n\n state.additionalFtp.forEach(item => {\n if (item.id === index) {\n item.deleted = true;\n }\n\n updatedAdditionalFtps.push(item);\n });\n\n if (!updatedAdditionalFtps.length) {\n unCheckAdditionalFtpBox();\n }\n\n setState({ ...state, additionalFtp: updatedAdditionalFtps });\n }\n\n const addAdditionalFtp = () => {\n let additionalFtpArrayLength = state.additionalFtp.length;\n let additionalFtpsDuplicate = [...state.additionalFtp];\n\n additionalFtpsDuplicate.push({ id: additionalFtpArrayLength, deleted: false, is_new: 1 });\n\n setState({ ...state, additionalFtp: additionalFtpsDuplicate });\n }\n\n return (\n <div>\n {renderAdditionalFtps()}\n\n {checked && (\n <button type=\"button\" onClick={() => addAdditionalFtp()}>\n {i18n['Add one more FTP Account'] ?? 'Add'}\n </button>)}\n </div>\n );\n}\n\nexport default AdditionalFtpWrapper;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport './SslSupport.scss';\n\nconst SslSupport = props => {\n const { i18n } = useSelector(state => state.session);\n const [letsEncrypt, setLetsEncrypt] = useState(false);\n\n return (\n <div className=\"ssl-support\">\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n name=\"v_letsencrypt\"\n id=\"lets-encrypt\"\n checked={letsEncrypt}\n onChange={() => setLetsEncrypt(!letsEncrypt)} />\n <label htmlFor=\"lets-encrypt\">{i18n['Lets Encrypt Support']}</label>\n </div>\n <span className=\"lets-encrypt-span\">{letsEncrypt ? i18n['Your certificate will be automatically issued in 5 minutes'] : null}</span>\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"package\">{i18n['SSL Home Directory']}</label>\n <select class=\"form-control\" id=\"ssl_home\" name=\"v_ssl_home\">\n <option value=\"same\">public_html</option>\n <option value=\"single\">public_shtml</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"aliases\">{i18n['SSL Certificate']}</label>\n <textarea class=\"form-control\" id=\"aliases\" rows=\"3\" name=\"v_ssl_crt\" disabled={letsEncrypt}></textarea>\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"aliases\">{i18n['SSL Key']}</label>\n <textarea class=\"form-control\" id=\"aliases\" rows=\"3\" name=\"v_ssl_key\" disabled={letsEncrypt}></textarea>\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"aliases\">{i18n['SSL Certificate Authority / Intermediate']}</label>\n <textarea class=\"form-control\" id=\"aliases\" rows=\"3\" name=\"v_ssl_ca\" disabled={letsEncrypt}></textarea>\n </div>\n </div>\n );\n}\n\nexport default SslSupport;","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport Password from '../../../../components/ControlPanel/AddItemLayout/Form/Password/Password';\nimport AdditionalFtpWrapper from '../AdditionalFtpWrapper/AdditionalFtpWrapper';\nimport SslSupport from '../SslSupport/SslSupport';\n\nimport './AdvancedOptions.scss';\n\nconst AdvancedOptions = props => {\n const { i18n } = useSelector(state => state.session);\n const [state, setState] = useState({\n sslSupport: false,\n additionalFtp: false,\n statisticsAuthCheckbox: false,\n statisticsAuth: false,\n aliases: ''\n });\n\n useEffect(() => {\n let updatedDomain = `www.${props.domain}`;\n setState({ ...state, aliases: updatedDomain });\n }, [props.domain]);\n\n const renderSslSupport = () => {\n if (state.sslSupport) {\n return <SslSupport />;\n }\n }\n\n const renderAdditionalFtp = () => {\n if (state.additionalFtp) {\n return <AdditionalFtpWrapper prefixI18N={props.prefixI18N} domain={props.domain} unCheckAdditionalFtpBox={() => setState({ ...state, additionalFtp: false })} />;\n }\n }\n\n const renderWebStats = () => {\n return props.webStats.map(stat => <option value={stat}>{stat}</option>);\n }\n\n const onChangeWebStatsSelect = value => {\n if (value !== 'none') {\n setState({ ...state, statisticsAuth: true });\n } else {\n setState({ ...state, statisticsAuth: false, statisticsAuthCheckbox: false });\n }\n }\n\n const onChangeAliases = value => {\n setState({ ...state, aliases: value });\n }\n\n return (\n <div>\n <div class=\"form-group\">\n <label htmlFor=\"aliases\">{i18n.Aliases}</label>\n <textarea\n class=\"form-control\"\n id=\"aliases\"\n rows=\"3\"\n name=\"v_aliases\"\n onChange={event => onChangeAliases(event.target.value)}\n value={state.aliases}\n ></textarea>\n </div>\n\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n name=\"v_ssl\"\n id=\"ssl-support\"\n checked={state.sslSupport}\n onChange={() => setState({ ...state, sslSupport: !state.sslSupport })} />\n <label htmlFor=\"ssl-support\">{i18n['SSL Support']}</label>\n </div>\n </div>\n\n {renderSslSupport()}\n\n <div class=\"form-group\">\n <label htmlFor=\"web-stats\">{i18n['Web Statistics']}</label>\n <select class=\"form-control\" id=\"web-stats\" name=\"v_stats\" onChange={event => onChangeWebStatsSelect(event.target.value)}>\n {renderWebStats()}\n </select>\n </div>\n\n <div className={`form-group statistics-authorization ${state.statisticsAuth ? 'show' : 'hide'}`}>\n <div className=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n name=\"v_stats_auth\"\n id=\"stats-auth\"\n checked={state.statisticsAuthCheckbox}\n onChange={() => setState({ ...state, statisticsAuthCheckbox: !state.statisticsAuthCheckbox })} />\n <label htmlFor=\"stats-auth\">{i18n['Statistics Authorization']}</label>\n </div>\n </div>\n\n <div className={state.statisticsAuthCheckbox ? 'show web-stats-wrapper' : 'hide'}>\n <div className=\"form-group\">\n <label htmlFor=\"stats-user\">{i18n.Username}</label>\n <input type=\"text\" className=\"form-control\" id=\"stats-user\" name=\"v_stats_user\" />\n </div>\n\n <Password name='v_stats_password' />\n </div>\n\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n name=\"v_ftp\"\n id=\"additional-ftp\"\n checked={state.additionalFtp}\n onChange={() => setState({ ...state, additionalFtp: !state.additionalFtp })} />\n <label htmlFor=\"additional-ftp\">{i18n['Additional FTP Account']}</label>\n </div>\n </div>\n\n {renderAdditionalFtp()}\n </div>\n );\n}\n\nexport default AdvancedOptions;","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { addWeb, getWebStats } from '../../../ControlPanelService/Web';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport AdvancedOptions from './AdvancedOptions/AdvancedOptions';\nimport { getIpList } from '../../../ControlPanelService/Ip';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddWebDomain.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst AddWebDomain = props => {\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const token = localStorage.getItem(\"token\");\n const history = useHistory();\n const [state, setState] = useState({\n loading: false,\n dnsSupport: true,\n mailSupport: true,\n showAdvancedOptions: false,\n okMessage: '',\n domain: '',\n errorMessage: '',\n webStats: [],\n prefixI18N: '',\n internetProtocols: []\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/web/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n Promise.all([getWebStats(), getIpList()])\n .then(result => {\n const [webStats, internetProtocols] = result;\n let internetProtocolNames = getInternetProtocolNames(internetProtocols.data.data);\n\n setState({\n ...state,\n webStats: webStats.data.data,\n internetProtocols: internetProtocolNames,\n prefixI18N: webStats.data.prefixI18N,\n loading: false\n });\n });\n }, []);\n\n const getInternetProtocolNames = internetProtocols => {\n let result = [];\n\n for (let i in internetProtocols) {\n result.push(i);\n }\n\n return result;\n }\n\n const renderInternetProtocolsOptions = () => {\n return state.internetProtocols.map(ip => <option value={ip}>{ip}</option>);\n }\n\n const showAdvancedOption = () => {\n setState({ ...state, showAdvancedOptions: !state.showAdvancedOptions });\n }\n\n const renderAdvancedOptions = () => {\n if (state.showAdvancedOptions) {\n return <AdvancedOptions prefixI18N={state.prefixI18N} domain={state.domain} webStats={state.webStats} />;\n }\n }\n\n const onBlurChangeAliases = value => {\n setState({ ...state, domain: value });\n }\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newWebDomain = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newWebDomain[name] = value;\n }\n\n if (Object.keys(newWebDomain).length !== 0 && newWebDomain.constructor === Object) {\n setState({ loading: true });\n addWeb(newWebDomain)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template add-web\">\n <Helmet>\n <title>{`Vesta - ${i18n.WEB}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding Domain']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <input type=\"hidden\" name=\"ok\" value=\"add\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <div className=\"form-group\">\n <label htmlFor=\"domain\">{i18n.Domain}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"domain\"\n required\n name=\"v_domain\"\n onBlur={event => onBlurChangeAliases(event.target.value)} />\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"package\">{i18n['IP Address']}</label>\n <select class=\"form-control\" id=\"ip\" name=\"v_ip\">\n {renderInternetProtocolsOptions()}\n </select>\n </div>\n\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input type=\"checkbox\" name=\"v_dns\" id=\"dns-support\" checked={state.dnsSupport} />\n <label htmlFor=\"dns-support\">{i18n['DNS Support']}</label>\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input type=\"checkbox\" name=\"v_mail\" id=\"mail-support\" checked={state.mailSupport} />\n <label htmlFor=\"mail-support\">{i18n['Mail Support']}</label>\n </div>\n </div>\n\n <div className=\"form-group advanced-options-button\">\n <button type=\"button\" onClick={() => showAdvancedOption()}>\n {i18n['Advanced options']}\n {state.showAdvancedOptions ? <FontAwesomeIcon icon=\"caret-down\" /> : <FontAwesomeIcon icon=\"caret-up\" />}\n </button>\n </div>\n\n {renderAdvancedOptions()}\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/web/')}>{i18n.Back}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddWebDomain;","import React, { useEffect, useState } from 'react';\n\nimport './TextInputWithTextOnTheRight.scss';\n\nconst TextInputWithTextOnTheRight = ({ id, title, name, defaultValue = '', optionalTitle = '', disabled = false }) => {\n const [inputValue, setInputValue] = useState('');\n\n useEffect(() => {\n if (defaultValue) {\n setInputValue(defaultValue);\n }\n }, [defaultValue]);\n\n return (\n <div className=\"form-group text-on-the-right\">\n <label className=\"label-wrapper\" htmlFor={id}>\n {title}\n <span>{optionalTitle || ''}</span>\n </label>\n <div className=\"input-wrapper\">\n <input\n defaultValue={`admin_${defaultValue}`}\n type=\"text\"\n className=\"form-control\"\n id={id}\n value={inputValue}\n onChange={event => setInputValue(event.target.value)}\n disabled={disabled}\n name={name} />\n <span><i>{`${inputValue}`}</i></span>\n </div>\n </div>\n );\n}\n\nexport default TextInputWithTextOnTheRight;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/db/index.php';\nconst addDbApiUri = '/api/v1/add/db/index.php';\nconst optionalDbInfoUri = '/api/v1/add/db/index.php';\nconst dbInfoUri = '/api/v1/edit/db/index.php';\nconst updateDatabaseUri = '/api/v1/edit/db/index.php';\n\nexport const getDatabaseList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const bulkAction = (action, domainNameSystems) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n domainNameSystems.forEach(domainNameSystem => {\n formData.append(\"database[]\", domainNameSystem);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/db/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const getDbOptionalInfo = () => {\n return axios.get(BASE_URL + optionalDbInfoUri);\n}\n\nexport const addDatabase = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addDbApiUri, formDataObject);\n}\n\nexport const dbCharsets = [\n 'big5',\n 'dec8',\n 'cp850',\n 'hp8',\n 'koi8r',\n 'latin1',\n 'latin2',\n 'swe7',\n 'ascii',\n 'ujis',\n 'sjis',\n 'hebrew',\n 'tis620',\n 'euckr',\n 'koi8u',\n 'gb2312',\n 'greek',\n 'cp1250',\n 'gbk',\n 'latin5',\n 'armscii8',\n 'utf8',\n 'ucs2',\n 'cp866',\n 'keybcs2',\n 'macce',\n 'macroman',\n 'cp852',\n 'latin7',\n 'cp1251',\n 'cp1256',\n 'cp1257',\n 'binary',\n 'geostd8',\n 'cp932',\n 'eucjpms'\n];\n\nexport const getDatabaseInfo = database => {\n return axios.get(BASE_URL + dbInfoUri, {\n params: {\n database,\n token: getAuthToken()\n }\n });\n}\n\nexport const updateDatabase = (data, database) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updateDatabaseUri, formDataObject, {\n params: {\n database,\n token: getAuthToken()\n }\n });\n}","import React, { useEffect, useState } from 'react';\nimport TextInputWithTextOnTheRight from '../../ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport { getDatabaseInfo, updateDatabase } from '../../../ControlPanelService/Db';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Password from '../../ControlPanel/AddItemLayout/Form/Password/Password';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditDatabase.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst EditDatabase = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n, userName } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n databaseUserInputValue: '',\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n const { database } = queryParams;\n\n dispatch(addActiveElement('/list/db/'));\n dispatch(removeFocusedElement());\n\n if (database) {\n setState({ ...state, loading: true });\n\n getDatabaseInfo(database)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n databaseUserInputValue: response.data.dbuser.split('_').splice(1).join('_'),\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedDatabase = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedDatabase[name] = value;\n }\n\n updatedDatabase['v_database'] = state.data.database;\n updatedDatabase['v_dbuser'] = `${userName}_${state.databaseUserInputValue}`;\n\n if (Object.keys(updatedDatabase).length !== 0 && updatedDatabase.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateDatabase(updatedDatabase, state.data.database)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const databaseUserInputHandler = value => {\n setState({ ...state, databaseUserInputValue: value });\n }\n\n return (\n <div className=\"edit-template edit-db\">\n <Helmet>\n <title>{`Vesta - ${i18n.DB}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing Database']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-db\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextInputWithTextOnTheRight id=\"database\" name=\"v_database\" title={i18n['Database']} defaultValue={state.data.database} disabled />\n\n <div className=\"form-group\">\n <div className=\"label-wrapper\">\n <label htmlFor=\"user\">{i18n.User}</label>\n </div>\n <div className=\"input-wrapper\">\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"user\"\n value={state.databaseUserInputValue}\n onChange={event => databaseUserInputHandler(event.target.value)}\n name=\"v_dbuser\" />\n <span className=\"italic\"><i>{`${userName}_${state.databaseUserInputValue}`}</i></span>\n </div>\n </div>\n\n <Password name=\"v_password\" defaultValue={state.data.password} />\n\n <TextInput id=\"type\" name=\"v_type\" title={i18n['Type']} value={state.data.type} disabled />\n\n <TextInput id=\"host\" name=\"v_host\" title={i18n['Host']} value={state.data.host} disabled />\n\n <TextInput id=\"charset\" name=\"v_charset\" title={i18n['Charset']} value={state.data.charset} disabled />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/db/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditDatabase;","import axios from 'axios';\nimport { getAuthToken } from 'src/utils/token';\n\nconst BASE_URL = window.location.origin;\nconst usersUri = '/api/v1/list/firewall/index.php';\nconst addFirewallUri = '/api/v1/add/firewall/index.php';\nconst firewallInfoUri = '/api/v1/edit/firewall/index.php';\nconst updateFirewallUri = '/api/v1/edit/firewall/index.php';\nconst addBanIpsUri = '/api/v1/add/firewall/banlist/index.php';\nconst banListUri = '/api/v1/list/firewall/banlist/index.php';\n\nexport const getFirewallList = () => {\n return axios.get(BASE_URL + usersUri);\n}\n\nexport const getBanList = () => {\n return axios.get(BASE_URL + banListUri);\n}\n\nexport const bulkAction = (action, ips, banIps) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n ips.forEach(ip => {\n const banIp = banIps.find(banIp => banIp.NAME === ip);\n formData.append(\"ipchain[]\", `${ip}:${banIp['CHAIN']}`);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/firewall/banlist/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const getBanIps = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.get(BASE_URL + addBanIpsUri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const addBanIp = (data) => {\n let formDataObject = new FormData();\n\n formDataObject.append('token', getAuthToken());\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addBanIpsUri, formDataObject, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const addFirewall = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addFirewallUri, formDataObject);\n}\n\nexport const getFirewallInfo = rule => {\n return axios.get(BASE_URL + firewallInfoUri, {\n params: {\n rule,\n token: getAuthToken()\n }\n });\n}\n\nexport const updateFirewall = (data, rule) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updateFirewallUri, formDataObject, {\n params: {\n rule,\n token: getAuthToken()\n }\n });\n}","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport { getFirewallInfo, updateFirewall } from '../../../ControlPanelService/Firewalls';\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditFirewall.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst EditFirewall = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n const { rule } = queryParams;\n\n dispatch(addActiveElement('/list/firewall/'));\n dispatch(removeFocusedElement());\n\n if (rule) {\n fetchData(rule);\n }\n }, []);\n\n const fetchData = rule => {\n setState({ ...state, loading: true });\n\n getFirewallInfo(rule)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedDomain = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedDomain[name] = value;\n }\n\n if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateFirewall(updatedDomain, state.data.rule)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n }\n }\n })\n .then(() => fetchData(state.data.rule))\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-firewall\">\n <Helmet>\n <title>{`Vesta - ${i18n.FIREWALL}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing Firewall Rule']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-firewall\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <SelectInput\n options={state.data.actions}\n selected={state.data.action}\n title={i18n['Action']}\n name=\"v_action\"\n id=\"action\" />\n\n <SelectInput\n options={state.data.protocols}\n selected={state.data.protocol}\n title={i18n['Protocol']}\n name=\"v_protocol\"\n id=\"protocol\" />\n\n <TextInput\n optionalTitle={i18n['ranges are acceptable']}\n value={state.data.port}\n title={i18n['Port']}\n name=\"v_port\"\n id=\"port\" />\n\n <TextInput\n optionalTitle={i18n['CIDR format is supported']}\n value={state.data.ip}\n title={i18n['IP address']}\n name=\"v_ip\"\n id=\"ip\" />\n\n <TextInput\n optionalTitle={i18n['optional']}\n value={state.data.comment}\n title={i18n['Comment']}\n name=\"v_comment\"\n id=\"comment\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/firewall/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditFirewall;","import React, { useEffect } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport './Hotkeys.scss';\nimport { useSelector } from 'react-redux';\n\nconst Hotkeys = props => {\n const { i18n } = useSelector(state => state.session);\n\n useEffect(() => {\n window.addEventListener(\"keyup\", toggleShortcutsLit);\n\n return () => window.removeEventListener(\"keyup\", toggleShortcutsLit);\n }, [props.reference]);\n\n const toggleShortcutsLit = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (event.keyCode === 72 && !isSearchInputFocused) {\n props.toggleHotkeys();\n }\n }\n\n return (\n <div className=\"hotkeys-list hide\" ref={props.reference}>\n <div className=\"head\">\n <div className=\"name\">{i18n.Shortcuts}</div>\n <div className=\"close\" onClick={() => props.toggleHotkeys()}><FontAwesomeIcon icon=\"times\" /></div>\n </div>\n <div className=\"body\">\n <ul>\n <li>\n <span className=\"name\">a</span>\n <span className=\"description\">{i18n['Add New object']}</span>\n </li>\n <li>\n <span className=\"name\">Ctrl + Open</span>\n <span className=\"description\">{i18n['Save Form']}</span>\n </li>\n <li>\n <span className=\"name\">Ctrl + Backspace</span>\n <span className=\"description\">{i18n['Cancel saving form']}</span>\n </li>\n <li className=\"space-top\">\n <span className=\"name\">1</span>\n <span className=\"description\">{i18n['Go to USER list']}</span>\n </li>\n <li>\n <span className=\"name\">2</span>\n <span className=\"description\">{i18n['Go to WEB list']}</span>\n </li>\n <li>\n <span className=\"name\">3</span>\n <span className=\"description\">{i18n['Go to DNS list']}</span>\n </li>\n <li>\n <span className=\"name\">4</span>\n <span className=\"description\">{i18n['Go to MAIL list']}</span>\n </li>\n <li>\n <span className=\"name\">5</span>\n <span className=\"description\">{i18n['Go to DB list']}</span>\n </li>\n <li>\n <span className=\"name\">6</span>\n <span className=\"description\">{i18n['Go to CRON list']}</span>\n </li>\n <li>\n <span className=\"name\">7</span>\n <span className=\"description\">{i18n['Go to BACKUP list']}</span>\n </li>\n </ul>\n <ul>\n <li>\n <span className=\"name\">f</span>\n <span className=\"description\">{i18n['Focus on search']}</span>\n </li>\n <li className=\"space-top\">\n <span className=\"name\">h</span>\n <span className=\"description\">{i18n['Display/Close shortcuts']}</span>\n </li>\n <li className=\"space-top\">\n <span className=\"name\">&#8592;</span>\n <span className=\"description\">{i18n['Move backward through top menu']}</span>\n </li>\n <li>\n <span className=\"name\">&#8594;</span>\n <span className=\"description\">{i18n['Move forward through top menu']}</span>\n </li>\n <li>\n <span className=\"name\">Enter</span>\n <span className=\"description\">{i18n['Enter focused element']}</span>\n </li>\n <li className=\"space-top\">\n <span className=\"name\">&#8593;</span>\n <span className=\"description\">{i18n['Move up through elements list']}</span>\n </li>\n <li>\n <span className=\"name\">&#8595;</span>\n <span className=\"description\">{i18n['Move down through elements list']}</span>\n </li>\n </ul>\n </div>\n </div>\n );\n}\n\nexport default Hotkeys;","import React, { memo, useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport { dbCharsets, addDatabase, getDbOptionalInfo } from '../../../ControlPanelService/Db';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport Password from '../../ControlPanel/AddItemLayout/Form/Password/Password';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\nimport './AddDatabase.scss'\n\nconst AddDatabase = memo(props => {\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n const dispatch = useDispatch();\n const history = useHistory();\n const [state, setState] = useState({\n loading: false,\n okMessage: '',\n errorMessage: '',\n dbTypes: [],\n dbHosts: [],\n dbCharsets: [],\n user: '',\n maxCharLength: '',\n databaseInputValue: '',\n databaseUserInputValue: '',\n prefixI18N: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/db/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getDbOptionalInfo()\n .then(result => {\n if (result.status === 200) {\n setState({\n ...state,\n dbCharsets,\n user: result.data.user,\n dbTypes: result.data.dbTypes,\n prefixI18N: result.data.prefixI18N,\n maxCharLength: result.data.maxCharLength,\n dbHosts: result.data.dbHosts,\n loading: false\n });\n }\n })\n .catch(err => console.err(err));\n }, []);\n\n const renderDatabaseTypesOptions = () => {\n return state.dbTypes.map((dbType, index) => <option key={index} value={dbType}>{dbType}</option>)\n }\n\n const renderDatabaseHostsOptions = () => {\n return state.dbHosts.map((dbHost, index) => <option key={index} value={dbHost}>{dbHost}</option>)\n }\n\n const renderDatabaseCharsetOptions = () => {\n return state.dbCharsets.map((dbCharset, index) =>\n <option\n key={index}\n value={dbCharset}\n selected={dbCharset === 'utf8'}>\n {dbCharset}\n </option>\n );\n }\n\n const databaseUserInputHandler = value => {\n setState({ ...state, databaseUserInputValue: value });\n }\n\n const databaseInputHandler = value => {\n setState({ ...state, databaseInputValue: value });\n }\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newDatabase = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newDatabase[name] = value;\n }\n\n newDatabase['v_database'] = state.databaseInputValue;\n newDatabase['v_dbuser'] = state.databaseUserInputValue;\n\n if (Object.keys(newDatabase).length !== 0 && newDatabase.constructor === Object) {\n setState({ ...state, loading: true });\n addDatabase(newDatabase)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage: '', loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template add-db\">\n <Helmet>\n <title>{`Vesta - ${i18n.DB}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding database']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <input type=\"hidden\" name=\"ok\" value=\"add\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <span className=\"prefix\">{HtmlParser(state.prefixI18N)}</span>\n\n <div className=\"form-group database\">\n <label htmlFor=\"database\">{i18n.Database}</label>\n <div className=\"input-wrapper\">\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"database\"\n onChange={event => databaseInputHandler(event.target.value)}\n value={state.databaseInputValue}\n name=\"v_database\" />\n <span className=\"italic\">{`${state.user}_${state.databaseInputValue}`}</span>\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"label-wrapper\">\n <label htmlFor=\"user\">{i18n.User}</label>\n <span className=\"italic\">({state.maxCharLength})</span>\n </div>\n <div className=\"input-wrapper\">\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"user\"\n value={state.databaseUserInputValue}\n onChange={event => databaseUserInputHandler(event.target.value)}\n name=\"v_dbuser\" />\n <span className=\"italic\">{`${state.user}_${state.databaseUserInputValue}`}</span>\n </div>\n </div>\n\n <Password name={'v_password'} />\n\n <div class=\"form-group\">\n <label htmlFor=\"dbTypes\">{i18n.Type}</label>\n <select class=\"form-control\" id=\"dbTypes\" name=\"v_type\">\n {renderDatabaseTypesOptions()}\n </select>\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"dbHosts\">{i18n.Host}</label>\n <select class=\"form-control\" id=\"dbHosts\" name=\"v_host\">\n {renderDatabaseHostsOptions()}\n </select>\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"dbCharset\">{i18n.Charset}</label>\n <select class=\"form-control\" id=\"dbCharset\" name=\"v_charset\">\n {renderDatabaseCharsetOptions()}\n </select>\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"sendLoginCredentialsToEmailAddress\">{i18n['Send login credentials to email address']}</label>\n <input\n type=\"email\"\n className=\"form-control\"\n id=\"sendLoginCredentialsToEmailAddress\"\n name=\"v_db_email\" />\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/db/')}>{i18n.Back}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n});\n\nexport default AddDatabase;\n","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { addFirewall } from '../../../ControlPanelService/Firewalls';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddFirewall.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst AddFirewall = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory();\n const [state, setState] = useState({\n loading: false,\n actions: [\n i18n['DROP'],\n i18n['ACCEPT']\n ],\n protocols: [\n i18n['TCP'],\n i18n['UDP'],\n i18n['ICMP']\n ],\n okMessage: '',\n errorMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/firewall/'));\n dispatch(removeFocusedElement());\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newFirewall = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newFirewall[name] = value;\n }\n\n if (Object.keys(newFirewall).length !== 0 && newFirewall.constructor === Object) {\n setState({ ...state, loading: true });\n addFirewall(newFirewall)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template add-firewall\">\n <Helmet>\n <title>{`Vesta - ${i18n.FIREWALL}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding Firewall Rule']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n <form onSubmit={event => submitFormHandler(event)}>\n <input type=\"hidden\" name=\"ok\" value=\"add\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <SelectInput\n options={state.actions}\n name=\"v_action\"\n id=\"action\"\n title={i18n['Action']} />\n\n <SelectInput\n options={state.protocols}\n name=\"v_protocol\"\n id=\"protocol\"\n title={i18n['Protocol']} />\n\n <TextInput\n name=\"v_port\"\n id=\"port\"\n title={i18n['Port']}\n optionalTitle={i18n['ranges are acceptable']} />\n\n <TextInput\n name=\"v_ip\"\n id=\"ip\"\n title={i18n['IP address']}\n optionalTitle={i18n['CIDR format is supported']} />\n\n <TextInput\n name=\"v_comment\"\n id=\"comment\"\n title={i18n['Comment']}\n optionalTitle={i18n['optional']} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/firewall/')}>{i18n.Back}</button>\n </div>\n </form>\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddFirewall;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/cron/index.php';\nconst cronAddApiUri = '/api/v1/add/cron/index.php';\nconst jobInfoUri = '/api/v1/edit/cron/index.php';\nconst updateCronJobUri = '/api/v1/edit/cron/index.php';\n\nexport const getCronList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const bulkAction = (action, domainNameSystems) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n domainNameSystems.forEach(domainNameSystem => {\n formData.append(\"job[]\", domainNameSystem);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/cron/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const addCronJob = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + cronAddApiUri, formDataObject);\n}\n\nexport const getCronJobInfo = job => {\n return axios.get(BASE_URL + jobInfoUri, {\n params: {\n job,\n token: getAuthToken()\n }\n });\n}\n\nexport const updateCronJob = (data, job) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updateCronJobUri, formDataObject, {\n params: {\n job,\n token: getAuthToken()\n }\n });\n}","export const generatorOptions = i18n => {\n return {\n minutesRunCommandsOptions: [\n { name: i18n['every minute'] ?? 'every minute', value: '*' },\n { name: i18n['every two minutes'] ?? 'every two minutes', value: '*/2' },\n { name: `${i18n.every || 'every'} 5`, value: '*/5' },\n { name: `${i18n.every || 'every'} 10`, value: '*/10' },\n { name: `${i18n.every || 'every'} 15`, value: '*/15' },\n { name: `${i18n.every || 'every'} 30`, value: '*/30' }\n ],\n hoursRunCommandsOptions: [\n { name: i18n['every hour'] ?? 'every hour', value: '*' },\n { name: i18n['every two hours'] ?? 'every two hours', value: '*/2' },\n { name: `${i18n.every || 'every'} 6`, value: '*/6' },\n { name: `${i18n.every || 'every'} 12`, value: '*/12' }\n ],\n daysRunCommandsOptions: [\n { name: i18n['every day'] ?? 'every day', value: '*' },\n { name: i18n['every odd day'] ?? 'every odd day', value: '1-31/2' },\n { name: i18n['every even day'] ?? 'every even day', value: '*/2' },\n { name: `${i18n.every || 'every'} 3`, value: '*/3' },\n { name: `${i18n.every || 'every'} 5`, value: '*/5' },\n { name: `${i18n.every || 'every'} 10`, value: '*/10' },\n { name: `${i18n.every || 'every'} 15`, value: '*/15' }\n ],\n hoursOptions: [\n { name: '00', value: '0' },\n { name: '01', value: '1' },\n { name: '02', value: '2' },\n { name: '03', value: '3' },\n { name: '04', value: '4' },\n { name: '05', value: '5' },\n { name: '06', value: '6' },\n { name: '07', value: '7' },\n { name: '08', value: '8' },\n { name: '09', value: '9' },\n { name: '10', value: '10' },\n { name: '11', value: '11' },\n { name: '12', value: '12' },\n { name: '13', value: '13' },\n { name: '14', value: '14' },\n { name: '15', value: '15' },\n { name: '16', value: '16' },\n { name: '17', value: '17' },\n { name: '18', value: '18' },\n { name: '19', value: '19' },\n { name: '20', value: '20' },\n { name: '21', value: '21' },\n { name: '22', value: '22' },\n { name: '23', value: '23' }\n ],\n hourlyMinutesOptions: [\n { name: '00', value: '0' },\n { name: '15', value: '15' },\n { name: '30', value: '30' },\n { name: '45', value: '45' }\n ],\n dailyMinutesOptions: [\n { name: '00', value: '0' },\n { name: '01', value: '1' },\n { name: '02', value: '2' },\n { name: '05', value: '5' },\n { name: '10', value: '10' },\n { name: '15', value: '15' },\n { name: '20', value: '20' },\n { name: '25', value: '25' },\n { name: '30', value: '30' },\n { name: '35', value: '35' },\n { name: '40', value: '40' },\n { name: '45', value: '45' },\n { name: '50', value: '50' },\n { name: '55', value: '55' }\n ],\n weeklyRunCommandOptions: [\n { name: i18n['every day'] ?? 'every day', value: '*' },\n { name: i18n['weekdays (5 days)'] ?? 'weekdays (5 days)', value: '1,2,3,4,5' },\n { name: i18n['weekend (2 days)'] ?? 'weekend (2 days)', value: '0,6' },\n { name: i18n.Monday ?? 'Monday', value: '1' },\n { name: i18n.Tuesday ?? 'Tuesday', value: '2' },\n { name: i18n.Wednesday ?? 'Wednesday', value: '3' },\n { name: i18n.Thursday ?? 'Thursday', value: '4' },\n { name: i18n.Friday ?? 'Friday', value: '5' },\n { name: i18n.Saturday ?? 'Saturday', value: '6' },\n { name: i18n.Sunday ?? 'Sunday', value: '0' }\n ],\n monthlyRunCommandOptions: [\n { name: i18n['every month'] ?? 'every month', value: '*' },\n { name: i18n['every odd month'] ?? 'every odd month', value: '1-11/2' },\n { name: i18n['every even month'] ?? 'every even month', value: '*/2' },\n { name: `${i18n.every || 'every'} 3`, value: '*/3' },\n { name: `${i18n.every || 'every'} 6`, value: '*/6' },\n { name: i18n.Jan ?? 'Jan', value: '1' },\n { name: i18n.Feb ?? 'Feb', value: '2' },\n { name: i18n.Mar ?? 'Mar', value: '3' },\n { name: i18n.Apr ?? 'Apr', value: '4' },\n { name: i18n.May ?? 'May', value: '5' },\n { name: i18n.Jun ?? 'Jun', value: '6' },\n { name: i18n.Jul ?? 'Jul', value: '7' },\n { name: i18n.Aug ?? 'Aug', value: '8' },\n { name: i18n.Sep ?? 'Sep', value: '9' },\n { name: i18n.Oct ?? 'Oct', value: '10' },\n { name: i18n.Nov ?? 'Nov', value: '11' },\n { name: i18n.Dec ?? 'Dec', value: '12' }\n ],\n dateOptions: [\n { name: '1', value: '1' },\n { name: '2', value: '2' },\n { name: '3', value: '3' },\n { name: '4', value: '4' },\n { name: '5', value: '5' },\n { name: '6', value: '6' },\n { name: '7', value: '7' },\n { name: '8', value: '8' },\n { name: '9', value: '9' },\n { name: '10', value: '10' },\n { name: '11', value: '11' },\n { name: '12', value: '12' },\n { name: '13', value: '13' },\n { name: '14', value: '14' },\n { name: '15', value: '15' },\n { name: '16', value: '16' },\n { name: '17', value: '17' },\n { name: '18', value: '18' },\n { name: '19', value: '19' },\n { name: '20', value: '20' },\n { name: '21', value: '21' },\n { name: '22', value: '22' },\n { name: '23', value: '23' },\n { name: '24', value: '24' },\n { name: '25', value: '25' },\n { name: '26', value: '26' },\n { name: '27', value: '27' },\n { name: '28', value: '28' },\n { name: '29', value: '29' },\n { name: '30', value: '30' },\n { name: '31', value: '31' }\n ]\n }\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions';\n\nconst RunCommandSelect = props => {\n const { i18n } = useSelector(state => state.session);\n\n const [state, setState] = useState({\n activeTab: ''\n });\n\n useEffect(() => {\n setState({ ...state, activeTab: props.activeTab });\n }, [props]);\n\n const renderOptions = () => {\n const { daysRunCommandsOptions, hoursRunCommandsOptions, minutesRunCommandsOptions, monthlyRunCommandOptions, weeklyRunCommandOptions } = generatorOptions(i18n);\n\n switch (state.activeTab) {\n case '1': return minutesRunCommandsOptions.map(option => <option value={option.value}>{option.name}</option>);\n case '2': return hoursRunCommandsOptions.map(option => <option value={option.value}>{option.name}</option>);\n case '3': return daysRunCommandsOptions.map(option => <option value={option.value}>{option.name}</option>);\n case '4': return weeklyRunCommandOptions.map(option => <option value={option.value}>{option.name}</option>);\n case '5': return monthlyRunCommandOptions.map(option => <option value={option.value}>{option.name}</option>);\n default: break;\n }\n }\n\n const selectName = () => {\n switch (state.activeTab) {\n case '1': return 'h_min';\n case '2': return 'h_hour';\n case '3': return 'h_day';\n case '4': return 'h_wday';\n case '5': return 'h_month';\n default: break;\n }\n }\n\n return (\n <div class=\"form-group run-command\">\n <label htmlFor=\"run-command\">{i18n['Run Command']}:</label>\n <select className=\"form-control\" name={selectName()}>\n {renderOptions()}\n </select>\n </div >\n );\n}\n\nexport default RunCommandSelect;","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions';\n\nexport default function SecondTabSelects() {\n const { i18n } = useSelector(state => state.session);\n const { hourlyMinutesOptions } = generatorOptions(i18n);\n\n const renderOptions = () => {\n return hourlyMinutesOptions.map((option, index) => <option key={index} value={option.value}>{option.name}</option>);\n }\n\n return (\n <div className='second-tab-selects'>\n <input type=\"hidden\" name=\"h_day\" value=\"*\" />\n <input type=\"hidden\" name=\"h_month\" value=\"*\" />\n <input type=\"hidden\" name=\"h_wday\" value=\"*\" />\n\n <div className=\"form-group minute\">\n <label htmlFor=\"run-command\">{i18n.Minute ?? 'Minute'}:</label>\n <select className=\"form-control\" name=\"h_min\">\n {renderOptions()}\n </select>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions';\n\nexport default function ThirdTabSelects() {\n const { i18n } = useSelector(state => state.session);\n const { dailyMinutesOptions, hoursOptions } = generatorOptions(i18n);\n\n const renderHours = () => {\n return hoursOptions.map((option, index) => <option key={index} value={option.value}>{option.name}</option>);\n }\n\n const renderOptions = () => {\n return dailyMinutesOptions.map((option, index) => <option key={index} value={option.value}>{option.name}</option>);\n }\n\n return (\n <div className='third-tab-selects'>\n <input type=\"hidden\" name=\"h_month\" value=\"*\" />\n <input type=\"hidden\" name=\"h_wday\" value=\"*\" />\n\n <div className=\"form-group hour\">\n <label htmlFor=\"run-command\">{i18n.Hour ?? 'Hour'}:</label>\n <select className=\"form-control\" name=\"h_hour\">\n {renderHours()}\n </select>\n </div>\n\n <div className=\"form-group minute\">\n <label htmlFor=\"run-command\">{i18n.Minute ?? 'Minute'}:</label>\n <select className=\"form-control\" name=\"h_min\">\n {renderOptions()}\n </select>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions';\n\nexport default function FourthTabSelects() {\n const { i18n } = useSelector(state => state.session);\n const { dailyMinutesOptions, hoursOptions } = generatorOptions(i18n);\n\n const renderHours = () => {\n return hoursOptions.map((option, index) => <option key={index} value={option.value}>{option.name}</option>);\n }\n\n const renderMinutes = () => {\n return dailyMinutesOptions.map((option, index) => <option key={index} value={option.value}>{option.name}</option>);\n }\n\n return (\n <div className='fourth-tab-selects'>\n <input type=\"hidden\" name=\"h_month\" value=\"*\" />\n <input type=\"hidden\" name=\"h_day\" value=\"*\" />\n\n <div className=\"form-group hour\">\n <label htmlFor=\"run-command\">{i18n.Hour ?? 'Hour'}:</label>\n <select className=\"form-control\" name=\"h_hour\">\n {renderHours()}\n </select>\n </div>\n\n <div className=\"form-group minute\">\n <label htmlFor=\"run-command\">{i18n.Minute ?? 'Minute'}:</label>\n <select className=\"form-control\" name=\"h_min\">\n {renderMinutes()}\n </select>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions';\n\nexport default function FifthTabSelects() {\n const { i18n } = useSelector(state => state.session);\n const { dailyMinutesOptions, hoursOptions, dateOptions } = generatorOptions(i18n);\n\n const renderDate = () => {\n return dateOptions.map((option, index) => <option key={index} value={option.value}>{option.name}</option>);\n }\n\n const renderHours = () => {\n return hoursOptions.map((option, index) => <option key={index} value={option.value}>{option.name}</option>);\n }\n\n const renderMinutes = () => {\n return dailyMinutesOptions.map((option, index) => <option key={index} value={option.value}>{option.name}</option>);\n }\n\n return (\n <div className='fifth-tab-selects'>\n <input type=\"hidden\" name=\"h_wday\" value=\"*\" />\n\n <div className=\"form-group date\">\n <label htmlFor=\"run-command\">{i18n.Date ?? 'Date'}:</label>\n <select className=\"form-control\" name=\"h_day\">\n {renderDate()}\n </select>\n </div>\n\n <div className=\"form-group hour\">\n <label htmlFor=\"run-command\">{i18n.Hour ?? 'Hour'}:</label>\n <select className=\"form-control\" name=\"h_hour\">\n {renderHours()}\n </select>\n </div>\n\n <div className=\"form-group minute\">\n <label htmlFor=\"run-command\">{i18n.Minute ?? 'Minute'}:</label>\n <select className=\"form-control\" name=\"h_min\">\n {renderMinutes()}\n </select>\n </div>\n </div>\n );\n}","import React, { useEffect, useState } from 'react';\n\nimport SecondTabSelects from './SecondTabSelects';\nimport ThirdTabSelects from './ThirdTabSelects';\nimport FourthTabSelects from './FourthTabSelects';\nimport FifthTabSelects from './FifthTabSelects';\n\nimport './SelectsWrapper.scss';\n\nconst OtherSelects = props => {\n const [state, setState] = useState({\n activeTab: ''\n });\n\n useEffect(() => {\n setState({ ...state, activeTab: props.activeTab });\n }, [props.activeTab]);\n\n const renderSelects = () => {\n switch (state.activeTab) {\n case '1': return (\n <div>\n <input type=\"hidden\" name=\"h_hour\" value=\"*\" />\n <input type=\"hidden\" name=\"h_day\" value=\"*\" />\n <input type=\"hidden\" name=\"h_month\" value=\"*\" />\n <input type=\"hidden\" name=\"h_wday\" value=\"*\" />\n </div>\n )\n case '2': return <SecondTabSelects />;\n case '3': return <ThirdTabSelects />;\n case '4': return <FourthTabSelects />;\n case '5': return <FifthTabSelects />;\n default: break;\n }\n }\n\n return (\n <div className={`tab-${state.activeTab}`}>\n {renderSelects()}\n </div>\n );\n}\n\nexport default OtherSelects;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport RunCommandSelect from './RunCommandSelect/RunCommandSelect';\nimport SelectsWrapper from './OtherSelects/SelectsWrapper';\nimport { Link, useHistory } from 'react-router-dom';\nimport QS from 'qs';\n\nimport './Generator.scss';\nimport { useSelector } from 'react-redux';\n\nconst Generator = props => {\n const formElement = useRef(null);\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const [state, setState] = useState({\n activeTab: '1'\n });\n\n useEffect(() => {\n let parsedQuery = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n let activeTab = parsedQuery.activeTab || '1';\n\n setState({ ...state, activeTab });\n }, [history.location.search]);\n\n const activeClassName = tab => {\n return state.activeTab === tab ? 'active' : '';\n }\n\n const emulateFormSubmit = () => {\n let generatedCronJob = {};\n\n for (let i = 0; i <= 4; i++) {\n let iterableFormElement = formElement.current[i];\n\n generatedCronJob[iterableFormElement.name] = iterableFormElement.value;\n }\n\n props.generatedCronJob(generatedCronJob);\n }\n\n const formatLink = tab => {\n const { job, mode } = props;\n\n return `/${mode}/cron/?${!!job ? `job=${job}&` : ''}activeTab=${tab}`;\n }\n\n return (\n <div className=\"cron-job-generator\">\n <div className=\"header\">\n <Link to={formatLink('1')} className={activeClassName('1')}>{i18n.Minutes}</Link>\n <Link to={formatLink('2')} className={activeClassName('2')}>{i18n.Hourly}</Link>\n <Link to={formatLink('3')} className={activeClassName('3')}>{i18n.Daily}</Link>\n <Link to={formatLink('4')} className={activeClassName('4')}>{i18n.Weekly}</Link>\n <Link to={formatLink('5')} className={activeClassName('5')}>{i18n.Monthly}</Link>\n </div>\n\n <div className=\"body\">\n\n <form ref={formElement}>\n <RunCommandSelect activeTab={state.activeTab} />\n\n <SelectsWrapper activeTab={state.activeTab} />\n\n <div className=\"form-actions\">\n <button type=\"button\" onClick={emulateFormSubmit}>{i18n.Generate}</button>\n </div>\n </form>\n\n </div>\n </div>\n );\n}\n\nexport default Generator;","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport { getCronJobInfo, updateCronJob } from '../../../ControlPanelService/Cron';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport Generator from '../Generator/Generator';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditCronJob.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst EditMail = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n errorMessage: '',\n okMessage: '',\n loading: false,\n generatedCronJob: {\n h_min: '*',\n h_hour: '*',\n h_day: '*',\n h_wday: '*',\n h_month: '*'\n }\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n const { job } = queryParams;\n\n dispatch(addActiveElement('/list/cron/'));\n dispatch(removeFocusedElement());\n\n if (job) {\n setState({ ...state, loading: true });\n\n getCronJobInfo(job)\n .then(response => {\n setState({\n ...state,\n generatedCronJob: {\n ...state.generatedCronJob,\n h_min: response.data.min,\n h_hour: response.data.hour,\n h_day: response.data.day,\n h_wday: response.data.wday,\n h_month: response.data.month\n },\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedJob = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedJob[name] = value;\n }\n\n if (Object.keys(updatedJob).length !== 0 && updatedJob.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateCronJob(updatedJob, state.data.job)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const saveGeneratedCronJob = generatedCronJob => {\n setState({\n ...state,\n generatedCronJob\n });\n }\n\n const changeInput = input => {\n let updatedGeneratedCronJob = {\n ...state.generatedCronJob,\n [input.id]: input.value\n };\n\n setState({\n ...state,\n generatedCronJob: updatedGeneratedCronJob\n });\n }\n\n return (\n <div className=\"edit-template edit-cron\">\n <Helmet>\n <title>{`Vesta - ${i18n.CRON}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing Cron Job']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-cron\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextInput id=\"command\" name=\"v_cmd\" title={i18n['Command']} value={state.data.cmd} />\n\n <div className=\"cron-form-body\">\n\n <div className=\"body-col-1\">\n <TextInput\n value={state.generatedCronJob.h_min}\n onChange={changeInput}\n title={i18n['Minute']}\n name=\"v_min\"\n id=\"h_min\" />\n\n <TextInput\n value={state.generatedCronJob.h_hour}\n onChange={changeInput}\n title={i18n['Hour']}\n name=\"v_hour\"\n id=\"h_hour\" />\n\n <TextInput\n value={state.generatedCronJob.h_day}\n onChange={changeInput}\n title={i18n['Day']}\n name=\"v_day\"\n id=\"h_day\" />\n\n <TextInput\n value={state.generatedCronJob.h_month}\n onChange={changeInput}\n title={i18n['Month']}\n name=\"v_month\"\n id=\"h_month\" />\n\n <TextInput\n value={state.generatedCronJob.h_wday}\n title={i18n['Day of week']}\n onChange={changeInput}\n name=\"v_wday\"\n id=\"h_wday\" />\n </div>\n\n <div className=\"body-col-2\">\n <Generator mode=\"edit\" job={state.data.job} generatedCronJob={saveGeneratedCronJob} />\n </div>\n\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/cron/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditMail;","import React, { useEffect, useState } from 'react';\n\nconst TextInputWithExtraButton = props => {\n const [state, setState] = useState({\n value: '',\n previousValue: ''\n });\n\n useEffect(() => {\n setState({ ...state, value: props.value });\n }, [props.value]);\n\n useEffect(() => {\n setState({ ...state, value: props.value, previousValue: props.value });\n }, []);\n\n const changeValue = event => {\n let inputValue = event.target.value;\n\n setState({ ...state, value: inputValue, previousValue: inputValue });\n }\n\n return (\n <div class=\"form-group\">\n <label className=\"label-wrapper\" htmlFor={props.id}>\n {props.title}\n <span className=\"lowercase\">{props.optionalTitle ? `(${props.optionalTitle})` : ''}</span>\n </label>\n <div className=\"input-wrapper\">\n <input\n type=\"text\"\n name={props.name}\n id={props.id}\n className=\"form-control\"\n onChange={changeValue}\n value={state.value}\n readOnly={state.value === 'unlimited'} />\n {props.children}\n </div>\n </div>\n );\n}\n\nexport default TextInputWithExtraButton;","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nconst NameServers = props => {\n const { i18n } = useSelector(state => state.session);\n const [state, setState] = useState({\n nameServersAmount: [],\n usersNS: []\n });\n\n useEffect(() => {\n if (props.usersNS) {\n let initNameServersAmount = props.usersNS.map((userNS, index) => index + 1);\n setState({ ...state, usersNS: props.usersNS, nameServersAmount: initNameServersAmount });\n }\n }, [props.usersNS]);\n\n const renderNameServerInputs = () => {\n return state.nameServersAmount.map((nameServer, index) => {\n if (nameServer < 9) {\n return (\n <div className=\"name-server-input-wrapper\" key={index}>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`v_ns${index + 1}`}\n defaultValue={state.usersNS[index] || ''}\n name={`v_ns${index + 1}`} />\n <button\n type=\"button\"\n className={index < 2 ? 'hide' : 'show delete'}\n onClick={() => onDeleteNameServer(index)}>\n {i18n.delete ?? 'Delete'}\n </button>\n </div>\n );\n }\n });\n }\n\n const addNameServerClassName = () => {\n return state.nameServersAmount.length === 8 ? 'hide' : 'show optional';\n }\n\n const addNameServer = () => {\n let nameServersLength = state.nameServersAmount.length;\n let nameServersDuplicate = [...state.nameServersAmount];\n\n nameServersDuplicate.push(nameServersLength + 1);\n\n setState({ ...state, nameServersAmount: nameServersDuplicate });\n }\n\n const onDeleteNameServer = index => {\n let nameServersDuplicate = [...state.nameServersAmount];\n\n nameServersDuplicate.splice(index - 1, 1);\n\n setState({ ...state, nameServersAmount: nameServersDuplicate });\n }\n\n return (\n <>\n <div className=\"form-group name-servers\">\n <label htmlFor=\"v_ns1\">{i18n['Name servers'] ?? 'Name servers'}</label>\n {renderNameServerInputs()}\n </div>\n\n <button\n type=\"button\"\n className={addNameServerClassName()}\n onClick={() => addNameServer()}>\n {i18n['Add one more Name Server'] ?? 'Add one more Name Server'}\n </button>\n </>\n );\n}\n\nexport default NameServers;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/package/index.php';\nconst additionalPackageInfoUri = '/api/v1/add/package/index.php';\nconst addPackageUri = '/api/v1/add/package/index.php';\nconst packageInfoUri = '/api/v1/edit/package/index.php';\nconst updatePackageUri = '/api/v1/edit/package/index.php';\n\nexport const getPackageList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const bulkAction = (action, backups) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n backups.forEach(backup => {\n formData.append(\"package[]\", backup);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/package/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const addPackage = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addPackageUri, formDataObject);\n}\n\nexport const getAdditionalPackageInfo = () => {\n return axios.get(BASE_URL + additionalPackageInfoUri);\n}\n\nexport const getPackageInfo = item => {\n return axios.get(BASE_URL + packageInfoUri, {\n params: {\n package: item,\n token: getAuthToken()\n }\n });\n}\n\nexport const updatePackage = (data, item) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updatePackageUri, formDataObject, {\n params: {\n package: item\n }\n });\n}\n","import React, { useEffect, useState } from 'react';\n\nimport TextInputWithExtraButton from '../../ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport NameServers from '../../ControlPanel/AddItemLayout/Form/NameServers/NameServers';\nimport { getPackageInfo, updatePackage } from '../../../ControlPanelService/Package';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditPackage.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst EditPackage = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n\n dispatch(addActiveElement('/list/package/'));\n dispatch(removeFocusedElement());\n\n if (queryParams.package) {\n setState({ ...state, loading: true });\n\n getPackageInfo(queryParams.package)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedPackage = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedPackage[name] = value;\n }\n\n updatedPackage['token'] = token;\n updatedPackage['save'] = 'save';\n updatedPackage['v_package'] = state.data.package;\n\n if (Object.keys(updatedPackage).length !== 0 && updatedPackage.constructor === Object) {\n setState({ ...state, loading: true });\n\n updatePackage(updatedPackage, state.data.package)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const toggleUnlimited = inputName => {\n let inputNameToUpdate = state.data[inputName];\n let defaultValue;\n\n if (inputName === 'quota' || inputName === 'bandwidth') {\n defaultValue = '1000';\n } else {\n defaultValue = '1';\n }\n\n setState({\n ...state,\n data: {\n ...state.data,\n [inputName]: inputNameToUpdate !== 'unlimited' ? 'unlimited' : defaultValue\n }\n });\n }\n\n return (\n <div className=\"edit-template edit-package\">\n <Helmet>\n <title>{`Vesta - ${i18n.PACKAGE}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing Package']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={submitFormHandler} id=\"edit-package\">\n <TextInput\n id=\"domain\"\n name=\"v_domain\"\n title={i18n['Package Name']}\n value={state.data.package}\n disabled />\n\n <SelectInput\n optionalTitle={state.data.web_system}\n options={state.data.web_templates}\n selected={state.data.web_template}\n title={i18n['Web Template']}\n name=\"v_web_template\"\n id=\"web-templates\" />\n\n {\n state.data.web_backend && (\n <SelectInput\n optionalTitle={state.data.web_backend}\n options={state.data.backend_templates}\n selected={state.data.backend_template}\n title={i18n['Backend Template']}\n name=\"v_backend_template\"\n id=\"backend-templates\" />\n )\n }\n\n {\n state.data.proxy_system && (\n <SelectInput\n optionalTitle={state.data.proxy_system}\n options={state.data.proxy_templates}\n selected={state.data.proxy_template}\n title={i18n['Proxy Template']}\n name=\"v_proxy_template\"\n id=\"proxy-templates\" />\n )\n }\n\n {\n state.data.dns_system && (\n <SelectInput\n optionalTitle={state.data.dns_system}\n options={state.data.dns_templates}\n selected={state.data.dns_template}\n title={i18n['DNS Template']}\n name=\"v_dns_template\"\n id=\"dns-templates\" />\n )\n }\n\n <SelectInput\n options={state.data.shells}\n selected={state.data.shell}\n title={i18n['SSH Access']}\n name=\"v_shell\"\n id=\"ssh-access\" />\n\n <TextInputWithExtraButton\n title={i18n['Web Domains']}\n id=\"webDomains\"\n name=\"v_web_domains\"\n value={state.data.web_domains}>\n <button type=\"button\" onClick={() => toggleUnlimited('web_domains')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton\n title={i18n['Web Aliases']}\n optionalTitle={i18n['per domain']}\n id=\"webAliases\"\n name=\"v_web_aliases\"\n value={state.data.web_aliases}>\n <button type=\"button\" onClick={() => toggleUnlimited('web_aliases')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton\n title={i18n['DNS Domains']}\n id=\"dnsDomains\"\n name=\"v_dns_domains\"\n value={state.data.dns_domains}>\n <button type=\"button\" onClick={() => toggleUnlimited('dns_domains')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton\n title={i18n['DNS records']}\n optionalTitle={i18n['per domain']}\n id=\"dnsRecords\"\n name=\"v_dns_records\"\n value={state.data.dns_records}>\n <button type=\"button\" onClick={() => toggleUnlimited('dns_records')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton\n title={i18n['Mail Domains']}\n id=\"mailDomains\"\n name=\"v_mail_domains\"\n value={state.data.mail_domains}>\n <button type=\"button\" onClick={() => toggleUnlimited('mail_domains')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton\n title={i18n['Mail Accounts']}\n optionalTitle={i18n['per domain']}\n id=\"mailAccounts\"\n name=\"v_mail_accounts\"\n value={state.data.mail_accounts}>\n <button type=\"button\" onClick={() => toggleUnlimited('mail_accounts')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton\n title={i18n['Databases']}\n id=\"databases\"\n name=\"v_databases\"\n value={state.data.databases}>\n <button type=\"button\" onClick={() => toggleUnlimited('databases')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton\n title={i18n['Cron Jobs']}\n id=\"cronJobs\"\n name=\"v_cron_jobs\"\n value={state.data.cron_jobs}>\n <button type=\"button\" onClick={() => toggleUnlimited('cron_jobs')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInput name=\"v_backups\" id=\"backups\" value={state.data.backups} title={i18n['Backups']} />\n\n <TextInputWithExtraButton\n title={i18n['Quota']}\n optionalTitle={i18n['in megabytes']}\n id=\"quota\"\n name=\"v_disk_quota\"\n value={state.data.disk_quota}>\n <button type=\"button\" onClick={() => toggleUnlimited('disk_quota')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton\n title={i18n['Bandwidth']}\n optionalTitle={i18n['in megabytes']}\n id=\"bandwidth\"\n name=\"v_bandwidth\"\n value={state.data.bandwidth}>\n <button type=\"button\" onClick={() => toggleUnlimited('bandwidth')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <NameServers usersNS={state.data.nameservers} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/package/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditPackage;","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../../actions/MainNavigation/mainNavigationActions\";\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport AddItemLayout from '../../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { getServiceInfo, updateService } from 'src/ControlPanelService/Server';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../../components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { Link, useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './EditHttpd.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst EditHttpd = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getServiceInfo('httpd')\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedService = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedService[name] = value;\n }\n\n if (Object.keys(updatedService).length !== 0 && updatedService.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedService, '/httpd')\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-httpd\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\"><Link to={`/edit/server/${state.data.service_name}`}>{i18n['Configuring Server']} / {state.data.service_name}</Link></div>\n <div className=\"link\"><Link to=\"/edit/server/php\">{i18n['Configure']} php.ini</Link></div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-httpd\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextArea\n defaultValue={state.data.config}\n title={state.data.config_path}\n name=\"v_config\"\n id=\"v_config\"\n rows=\"25\" />\n\n <br />\n\n <Checkbox\n title={i18n['restart']}\n defaultChecked={true}\n name=\"v_restart\"\n id=\"restart\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditHttpd;","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { addCronJob } from '../../../ControlPanelService/Cron';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport Generator from '../Generator/Generator';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddCronJob.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst AddCronJob = props => {\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n loading: false,\n okMessage: '',\n errorMessage: '',\n generatedCronJob: {\n h_min: '*',\n h_hour: '*',\n h_day: '*',\n h_wday: '*',\n h_month: '*'\n }\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/cron/'));\n dispatch(removeFocusedElement());\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newCronJob = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newCronJob[name] = value;\n }\n\n if (Object.keys(newCronJob).length !== 0 && newCronJob.constructor === Object) {\n setState({ ...state, loading: true });\n addCronJob(newCronJob)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const saveGeneratedCronJob = generatedCronJob => {\n setState({\n ...state,\n generatedCronJob\n });\n }\n\n const changeInput = input => {\n let updatedGeneratedCronJob = {\n ...state.generatedCronJob,\n [input.id]: input.value\n };\n\n setState({\n ...state,\n generatedCronJob: updatedGeneratedCronJob\n });\n }\n\n return (\n <div className=\"edit-template add-cron\">\n <Helmet>\n <title>{`Vesta - ${i18n.CRON}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding Cron Job']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <input type=\"hidden\" name=\"ok\" value=\"add\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <div className=\"form-group command\">\n <label htmlFor=\"command\">{i18n.Command ?? 'Command'}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"command\"\n name=\"v_cmd\" />\n </div>\n\n <div className=\"cron-form-body\">\n\n <div className=\"body-col-1\">\n <div className=\"form-group\">\n <label htmlFor=\"h_min\">{i18n.Minute ?? 'Minute'}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"h_min\"\n onChange={event => changeInput(event.target)}\n value={state.generatedCronJob.h_min}\n name=\"v_min\" />\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"h_hour\">{i18n.Hour ?? 'Hour'}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"h_hour\"\n onChange={event => changeInput(event.target)}\n value={state.generatedCronJob.h_hour}\n name=\"v_hour\" />\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"h_day\">{i18n.Day ?? 'Day'}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"h_day\"\n onChange={event => changeInput(event.target)}\n value={state.generatedCronJob.h_day}\n name=\"v_day\" />\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"h_month\">{i18n.Month ?? 'Month'}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"h_month\"\n onChange={event => changeInput(event.target)}\n value={state.generatedCronJob.h_month}\n name=\"v_month\" />\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"h_wday\">{i18n['Day of week'] ?? 'Days of week'}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"h_wday\"\n onChange={event => changeInput(event.target)}\n value={state.generatedCronJob.h_wday}\n name=\"v_wday\" />\n </div>\n </div>\n\n <div className=\"body-col-2\">\n <Generator mode=\"add\" generatedCronJob={saveGeneratedCronJob} />\n </div>\n\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add ?? 'Add'}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/cron/')}>{i18n.Back ?? 'Back'}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddCronJob;","import React, { useEffect, useState } from 'react';\n\nimport TextInputWithExtraButton from '../../ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport { getAdditionalPackageInfo, addPackage } from '../../../ControlPanelService/Package';\nimport NameServers from '../../ControlPanel/AddItemLayout/Form/NameServers/NameServers';\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddPackage.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst AddPackage = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory();\n const [state, setState] = useState({\n loading: false,\n okMessage: '',\n errorMessage: '',\n webTemplates: [],\n webSystem: '',\n backendTemplates: [],\n backendSystem: '',\n proxySystem: '',\n proxyTemplates: [],\n dnsTemplates: [],\n dnsSystem: '',\n sshTemplates: [],\n usersNS: [],\n webDomains: '1',\n webAliases: '1',\n dnsDomains: '1',\n dnsRecords: '1',\n mailDomains: '1',\n mailAccounts: '1',\n databases: '1',\n cronJobs: '1',\n quota: '1000',\n bandwidth: '1000',\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/package/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n fetchData();\n }, []);\n\n const fetchData = () => {\n getAdditionalPackageInfo()\n .then(result => {\n setState({\n ...state,\n webTemplates: result.data.web_templates,\n webSystem: result.data.web_system,\n backendTemplates: result.data.backend_templates,\n backendSystem: result.data.web_backend,\n dnsTemplates: result.data.dns_templates,\n dnsSystem: result.data.dns_system,\n proxySystem: result.data.proxy_system,\n proxyTemplates: result.data.proxy_templates,\n sshTemplates: result.data.ssh_access,\n loading: false\n });\n })\n .catch(err => console.err(err));\n }\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newPackage = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newPackage[name] = value;\n }\n\n newPackage['token'] = token;\n newPackage['ok'] = 'Add';\n\n if (Object.keys(newPackage).length !== 0 && newPackage.constructor === Object) {\n setState({ ...state, loading: true });\n addPackage(newPackage)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const toggleUnlimited = inputName => {\n let inputNameToUpdate = state[inputName];\n let defaultValue;\n\n if (inputName === 'quota' || inputName === 'bandwidth') {\n defaultValue = '1000';\n } else {\n defaultValue = '1';\n }\n\n if (inputNameToUpdate !== 'unlimited') {\n setState({ ...state, [inputName]: 'unlimited' });\n } else {\n setState({ ...state, [inputName]: defaultValue });\n }\n }\n\n return (\n <div className=\"edit-template add-package\">\n <Helmet>\n <title>{`Vesta - ${i18n.PACKAGE}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding Package']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <TextInput name=\"v_package\" id=\"packageName\" title={i18n['Package Name']} />\n\n <SelectInput\n options={state.webTemplates}\n name=\"v_web_template\"\n id=\"webTemplates\"\n title={i18n['Web Template']}\n optionalTitle={state.webSystem} />\n\n <SelectInput\n options={state.backendTemplates}\n name=\"v_backend_template\"\n id=\"backendTemplates\"\n title={i18n['Backend Template']}\n optionalTitle={state.backendSystem} />\n\n <SelectInput\n options={state.proxyTemplates}\n name=\"v_proxy_template\"\n id=\"proxyTemplates\"\n title={i18n['Proxy Template']}\n optionalTitle={state.proxySystem} />\n\n <SelectInput\n options={state.dnsTemplates}\n name=\"v_dns_template\"\n id=\"dnsTemplates\"\n title={i18n['DNS Template']}\n optionalTitle={state.dnsSystem} />\n\n <SelectInput\n options={state.sshTemplates}\n name=\"v_shell\"\n id=\"shells\"\n title={i18n['SSH Access']} />\n\n <TextInputWithExtraButton title={i18n['Web Domains']} id=\"webDomains\" name=\"v_web_domains\" value={state.webDomains}>\n <button type=\"button\" onClick={() => toggleUnlimited('webDomains')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton title={i18n['Web Aliases']} optionalTitle={i18n['per domain']} id=\"webAliases\" name=\"v_web_aliases\" value={state.webAliases}>\n <button type=\"button\" onClick={() => toggleUnlimited('webAliases')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton title={i18n['DNS Domains']} id=\"dnsDomains\" name=\"v_dns_domains\" value={state.dnsDomains}>\n <button type=\"button\" onClick={() => toggleUnlimited('dnsDomains')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton title={i18n['DNS records']} optionalTitle={i18n['per domain']} id=\"dnsRecords\" name=\"v_dns_records\" value={state.dnsRecords}>\n <button type=\"button\" onClick={() => toggleUnlimited('dnsRecords')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton title={i18n['Mail Domains']} id=\"mailDomains\" name=\"v_mail_domains\" value={state.mailDomains}>\n <button type=\"button\" onClick={() => toggleUnlimited('mailDomains')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton title={i18n['Mail Accounts']} optionalTitle={i18n['per domain']} id=\"mailAccounts\" name=\"v_mail_accounts\" value={state.mailAccounts}>\n <button type=\"button\" onClick={() => toggleUnlimited('mailAccounts')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton title={i18n['Databases']} id=\"databases\" name=\"v_databases\" value={state.databases}>\n <button type=\"button\" onClick={() => toggleUnlimited('databases')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton title={i18n['Cron Jobs']} id=\"cronJobs\" name=\"v_cron_jobs\" value={state.cronJobs}>\n <button type=\"button\" onClick={() => toggleUnlimited('cronJobs')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInput name=\"v_backups\" id=\"backups\" value=\"1\" title={i18n['Backups']} />\n\n <TextInputWithExtraButton title={i18n['Quota']} optionalTitle={i18n['in megabytes']} id=\"quota\" name=\"v_disk_quota\" value={state.quota}>\n <button type=\"button\" onClick={() => toggleUnlimited('quota')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextInputWithExtraButton title={i18n['Bandwidth']} optionalTitle={i18n['in megabytes']} id=\"bandwidth\" name=\"v_bandwidth\" value={state.bandwidth}>\n <button type=\"button\" onClick={() => toggleUnlimited('bandwidth')}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <NameServers usersNS={['ns1.example.ltd', 'ns2.example.ltd']} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/package/')}>{i18n.Back}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddPackage;","import React from 'react';\n\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst EditServerWebOption = ({ proxySystem, webSystem, webBackend, webBackendPool, visible = false }) => {\n const { i18n } = useSelector(state => state.session);\n\n return (\n <div className=\"server-web-option\" style={{ display: `${visible ? 'block' : 'none'}` }}>\n\n {\n proxySystem && (\n <TextInput\n optionalTitle={<Link to={`/edit/server/${proxySystem}`}>{i18n['configure']}</Link>}\n title={i18n['Proxy Server'] + ' / '}\n name=\"v_proxy_system\"\n value={proxySystem}\n id=\"proxy_system\"\n disabled />\n )\n }\n\n {\n webSystem && (\n <TextInput\n optionalTitle={<Link to={`/edit/server/${webSystem}`}>{i18n['configure']}</Link>}\n title={i18n['Web Server'] + ' / '}\n name=\"v_web_system\"\n value={webSystem}\n id=\"web_system\"\n disabled />\n )\n }\n\n {\n webBackend && (\n <TextInput\n title={i18n['Backend Server']}\n name=\"v_web_backend\"\n value={webBackend}\n id=\"web_backend\"\n disabled />\n )\n }\n\n {\n webBackendPool && (\n <TextInput\n optionalTitle={<Link to={`/edit/server/${webBackendPool}`}>{i18n['configure']}</Link>}\n title={i18n['Backend Pool Mode']}\n name=\"v_web_backend_pool\"\n value={webBackendPool}\n id=\"web_backend_pool\"\n disabled\n />\n )\n }\n\n </div>\n );\n}\n\nexport default EditServerWebOption;","import React from 'react';\n\nimport SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst EditServerDnsOption = ({ dnsSystem, selected, dnsCluster, visible }) => {\n const { i18n } = useSelector(state => state.session);\n\n const printHosts = () => {\n return dnsCluster.map((cluster, index) => (\n <TextInput\n title={`${i18n['DNS Server']} #${index + 1}`}\n name=\"v_dns_remote_host\"\n id=\"dns-remote-host\"\n value={cluster}\n disabled />\n ));\n }\n\n return (\n <div className=\"server-dns-option\" style={{ display: `${visible ? 'block' : 'none'}` }}>\n <TextInput\n optionalTitle={<Link to={`/edit/server/${dnsSystem}`}>{i18n['configure']}</Link>}\n title={i18n['DNS Server'] + ' / '}\n name=\"v_dns_system\"\n value={dnsSystem}\n id=\"dns_system\"\n disabled />\n\n <SelectInput\n title={i18n['DNS Cluster']}\n selected={selected}\n options={[i18n['no'], i18n['yes']]}\n name=\"v_dns_cluster\"\n id=\"dns-cluster\"\n disabled />\n\n {\n selected === 'yes' && (\n <div className=\"hosts-wrapper\">\n {printHosts()}\n </div>\n )\n }\n </div>\n );\n}\n\nexport default EditServerDnsOption;","import React, { useEffect, useState } from 'react';\n\nimport SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst EditVestaPluginsOption = ({ data, visible }) => {\n const { i18n } = useSelector(state => state.session);\n const [sftpOptions, setSftpOptions] = useState([]);\n const [fmOptions, setFmOptions] = useState([]);\n const [sftpDescription, setSftpDescription] = useState(false);\n const [fmDescription, setFmDescription] = useState(false);\n const [softaculousDescription, setSoftaculousDescription] = useState(false);\n\n useEffect(() => {\n let sftpOptionsArray = [];\n let fmOptionsArray = [];\n\n if (data.sftpjail_key) {\n sftpOptionsArray.push(i18n['Disable and Cancel Licence']);\n }\n\n sftpOptionsArray.push(i18n['yes']);\n\n if (data.fm_key) {\n fmOptionsArray.push(i18n['Disable and Cancel Licence']);\n }\n\n fmOptionsArray.push(i18n['yes']);\n\n setSftpOptions(sftpOptionsArray);\n setFmOptions(fmOptionsArray);\n\n if (data.lead === 'sftp' || data.sftpjail_key !== 'no') {\n setSftpDescription(true);\n }\n\n if (data.lead === 'filemanager' || data.fm_key !== 'no') {\n setFmDescription(true);\n }\n\n if (data.lead === 'softaculous' || data.softaculous !== 'no') {\n setSoftaculousDescription(true);\n }\n }, []);\n\n const onChangeSftpChroot = value => {\n if (value !== i18n['yes']) {\n setSftpDescription(false);\n } else {\n setSftpDescription(true);\n }\n }\n\n const onChangeFm = value => {\n if (value !== i18n['yes']) {\n setFmDescription(false);\n } else {\n setFmDescription(true);\n }\n }\n\n const onChangeSoftaculous = value => {\n if (value !== i18n['yes']) {\n setSoftaculousDescription(true);\n } else {\n setSoftaculousDescription(false);\n }\n }\n\n return (\n <div className=\"server-plugins-option\" style={{ display: `${visible ? 'block' : 'none'}` }}>\n <TextInput\n title={i18n['Version']}\n value={data.version}\n name=\"v_version\"\n id=\"version\"\n disabled />\n\n <SelectInput\n title={i18n['FileSystem Disk Quota']}\n selected={data.disk_quota}\n options={data.yes_no_options}\n name=\"v_quota\"\n id=\"quota\" />\n\n <br />\n\n <SelectInput\n title={i18n['Firewall']}\n selected={data.firewall_system === 'iptables' ? i18n['yes'] : ''}\n options={data.yes_no_options}\n name=\"v_firewall\"\n id=\"firewall\" />\n\n <SelectInput\n title={i18n['Reseller Role']}\n options={[i18n['yes']]}\n name=\"v_reseller\"\n id=\"reseller\"\n disabled />\n\n <SelectInput\n title={i18n['Backup Migration Manager']}\n options={[i18n['yes']]}\n name=\"v_backup_manager\"\n id=\"backup_manager\"\n disabled />\n\n <SelectInput\n title={i18n['SFTP Chroot']}\n selected={data.lead === 'sftp' || data.sftpjail_key != '' ? i18n['yes'] : ''}\n name=\"v_backup_manager\"\n options={sftpOptions}\n onChange={onChangeSftpChroot}\n id=\"backup_manager\" />\n\n {\n sftpDescription\n ? (\n <div className=\"sftp-module\">\n <div>{i18n['Restrict users so that they cannot use SSH and access only their home directory.']}</div>\n <div className=\"license-description\">\n <span>{i18n['Licence Key']}:</span>\n <TextInput\n title={i18n['Version']}\n value={data.version}\n name=\"v_version\"\n id=\"version\" />\n </div>\n </div>\n )\n : (\n <div className=\"sftp-module\">\n <>\n <span>{i18n['Restrict users so that they cannot use SSH and access only their home directory.']}</span>\n <span>{i18n['This is a commercial module, you would need to purchace license key to enable it.']}</span>\n </>\n <div className=\"license-description\">\n <span>{i18n['Enter License Key']}:</span>\n <TextInput\n title={i18n['Version']}\n name=\"v_sftp_licence\"\n id=\"sftp_licence\" />\n </div>\n\n <div className=\"buy-license\">\n <a href={`https://vestacp.com/checkout/2co.php?product_id=6&referer=${data.http_host}`}>\n {i18n['Buy Licence']} 3$ {i18n['month']}\n </a>\n <a href={`https://vestacp.com/checkout/2co.php?product_id=9&referer=${data.http_host}`}>\n {i18n['Buy Lifetime License']} 18$\n </a>\n </div>\n\n <span>2Checkout.com Inc. (Ohio, USA) is a payment facilitator for goods and services provided by vestacp.com.</span>\n </div>\n )\n }\n\n <br />\n\n <SelectInput\n title={i18n['File Manager']}\n selected={data.lead === 'filemanager' || data.fm_key ? i18n['yes'] : ''}\n options={fmOptions}\n onChange={onChangeFm}\n name=\"v_filemanager\"\n id=\"filemanager\" />\n\n {\n fmDescription\n ? (\n <div className=\"fm-module\">\n <div>{i18n['Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.']}</div>\n <div className=\"license-description\">\n <span>{i18n['Licence Key']}:</span>\n <TextInput\n title={i18n['Version']}\n value={data.fm_licence_key_option}\n name=\"v_filemanager_licence\"\n id=\"filemanager_licence\" />\n </div>\n </div>\n )\n : (\n <div className=\"fm-module\">\n <>\n <span>{i18n['Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.']}</span>\n <span>{i18n['This is a commercial module, you would need to purchace license key to enable it.']}</span>\n </>\n <div className=\"license-description\">\n <span>{i18n['Enter License Key']}:</span>\n <TextInput\n title={i18n['Version']}\n value=\"\"\n name=\"v_filemanager_licence\"\n id=\"sftp_licence\" />\n </div>\n\n <div className=\"buy-license\">\n <a href={`https://vestacp.com/checkout/2co.php?product_id=7&referer=${data.http_host}`} target=\"_blank\" rel=\"noopener noreferrer\">\n {i18n['Buy Licence']} 3$ {i18n['month']}\n </a>\n <a href={`https://vestacp.com/checkout/2co.php?product_id=8&referer=${data.http_host}`} target=\"_blank\" rel=\"noopener noreferrer\">\n {i18n['Buy Lifetime License']} 28$\n </a>\n </div>\n\n <span>2Checkout.com Inc. (Ohio, USA) is a payment facilitator for goods and services provided by vestacp.com.</span>\n </div>\n )\n }\n\n <br />\n\n <SelectInput\n title=\"Softaculous\"\n selected={data.lead === 'softaculous' || data.softaculous === 'yes' ? i18n['yes'] : ''}\n options={[i18n['no'], i18n['yes']]}\n onChange={onChangeSoftaculous}\n name=\"v_softaculous\"\n id=\"softaculous\" />\n\n {\n softaculousDescription && (\n <div className=\"soft-module\">\n <div>\n <span style={{ fontWeight: 'bolder' }}>{i18n['* plugin installation will run in background']}</span>\n <span>\n Softaculous is a great Auto Installer having 426 great scripts, 1115 PHP Classes\n and we are still adding more. Softaculous is ideal for Web Hosting companies and\n it could give a significant boost to your sales. These scripts cover most of the\n uses a customer could ever have. We have covered a wide array of Categories so that\n everyone could find the required script one would need to power their Web Site.\n </span>\n </div>\n\n <div className=\"buy-license\">\n <a href=\"https://www.softaculous.com/softaculous/\" target=\"_blank\" rel=\"noopener noreferrer\">\n {i18n['Get Premium License'] ?? 'Get Premium License'}\n </a>\n </div>\n </div>\n )\n }\n </div>\n );\n}\n\nexport default EditVestaPluginsOption;\n","import React, { useEffect, useState } from 'react';\n\nimport SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextArea from 'src/components/ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport Checkbox from 'src/components/ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst EditVestaSslOption = ({ data, visible }) => {\n const { i18n } = useSelector(state => state.session);\n const [domainsVisible, setDomainsVisible] = useState(false);\n const [sslDomains, setSslDomains] = useState([]);\n\n useEffect(() => {\n const { ssl_domains } = data;\n\n if (ssl_domains) {\n setSslDomains(['', ...ssl_domains]);\n } else {\n setSslDomains(['']);\n }\n\n }, []);\n\n return (\n <div className=\"server-ssl-option\" style={{ display: `${visible ? 'block' : 'none'}` }}>\n <Checkbox\n onChange={checked => setDomainsVisible(checked)}\n title={i18n['Use Web Domain SSL Certificate']}\n defaultChecked={data.vesta_certificate}\n name=\"v_web_ssl_domain_checkbox\"\n id=\"web_ssl_domain_checkbox\"\n checked={domainsVisible}\n />\n\n {\n domainsVisible && (\n <div className=\"domain-group\">\n <SelectInput\n selected={data.vesta_certificate}\n name=\"v_web_ssl_domain\"\n title={i18n['Domain']}\n options={sslDomains}\n id=\"web_ssl_domain\" />\n </div>\n )\n }\n\n <TextArea\n title={i18n['SSL Certificate']}\n defaultValue={data.sys_ssl_crt}\n name=\"v_sys_ssl_crt\"\n id=\"sys_ssl_crt\" />\n\n <TextArea\n defaultValue={data.sys_ssl_key}\n id=\"sys_ssl_key\"\n name=\"v_sys_ssl_key\"\n title={i18n['SSL Key']} />\n\n <div className=\"additional-info\">\n {\n data.sys_ssl_subject && (\n <div>\n <span>{i18n['SUBJECT']}:</span>\n <span>{data.sys_ssl_subject}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_aliases && (\n <div>\n <span>{i18n['ALIASES']}:</span>\n <span>{data.sys_ssl_aliases}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_not_before && (\n <div>\n <span>{i18n['NOT_BEFORE']}:</span>\n <span>{data.sys_ssl_not_before}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_not_after && (\n <div>\n <span>{i18n['NOT_AFTER']}:</span>\n <span>{data.sys_ssl_not_after}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_signature && (\n <div>\n <span>{i18n['SIGNATURE']}:</span>\n <span>{data.sys_ssl_signature}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_pub_key && (\n <div>\n <span>{i18n['PUB_KEY']}:</span>\n <span>{data.sys_ssl_pub_key}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_issuer && (\n <div>\n <span>{i18n['ISSUER']}:</span>\n <span>{data.sys_ssl_issuer}</span>\n </div>\n )\n }\n </div>\n </div>\n );\n}\n\nexport default EditVestaSslOption;","import React, { useEffect, useState } from 'react';\n\nimport SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from 'src/components/ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst EditDatabaseOption = ({ data, visible }) => {\n const { i18n } = useSelector(state => state.session);\n\n const printPhpMyAdminHosts = () => {\n if (data.mysql_hosts.length) {\n return data.mysql_hosts.map((host, index) => (\n <div className=\"hosts\">\n <TextInput\n title={`${i18n['Host']} #${index + 1}`}\n value={host['HOST']}\n name=\"v_mysql_host\"\n id=\"mysql_host\"\n disabled />\n\n <TextInput\n title={i18n['Password']}\n name=\"v_mysql_password\"\n id=\"mysql_password\" />\n\n <TextInput\n title={i18n['Maximum Number Of Databases']}\n value={host['MAX_DB']}\n name=\"v_mysql_max\"\n id=\"mysql_max\"\n disabled />\n\n <TextInput\n title={i18n['Current Number Of Databases']}\n value={host['U_DB_BASES']}\n name=\"v_mysql_max\"\n id=\"current-databases\"\n disabled />\n </div>\n ));\n }\n }\n\n const printPgSqlHosts = () => {\n return data.pgsql_hosts.map((host, index) => (\n <div className=\"hosts\">\n <TextInput\n title={`${i18n['Host']} #${index + 1}`}\n value={host['HOST']}\n name=\"v_pgsql_host\"\n id=\"pgsql_host\"\n disabled />\n\n <TextInput\n title={i18n['Maximum Number Of Databases']}\n value={host['MAX_DB']}\n name=\"v_psql_max\"\n id=\"psql_max\"\n disabled />\n\n <TextInput\n title={i18n['Current Number Of Databases']}\n value={host['U_DB_BASES']}\n name=\"v_pgsql_max\"\n id=\"pgsql_current\"\n disabled />\n </div>\n ));\n }\n\n return (\n <div className=\"server-mail-option\" style={{ display: `${visible ? 'block' : 'none'}` }}>\n <SelectInput\n optionalTitle={<Link to=\"/edit/server/mysql\">{i18n['configure']}</Link>}\n title={i18n['MySQL Support'] + ' / '}\n selected={data.mysql}\n options={[i18n['no'], i18n['yes']]}\n name=\"v_mysql\"\n id=\"mysql\"\n disabled />\n\n {\n data.mysql === 'yes' && (\n <>\n <TextInput\n title={i18n['phpMyAdmin URL']}\n value={data.db_pma_url}\n name=\"v_mysql_url\"\n id=\"mysql_url\" />\n\n {printPhpMyAdminHosts()}\n </>\n )\n }\n\n <SelectInput\n optionalTitle={<Link to=\"/edit/server/postgresql\">{i18n['configure']}</Link>}\n title={i18n['PostgreSQL Support'] + ' / '}\n selected={data.pgsql}\n options={[i18n['no'], i18n['yes']]}\n name=\"v_pgsql\"\n id=\"pgsql\"\n disabled />\n\n {\n data.pgsql === 'yes' && (\n <>\n <TextInput\n title={i18n['phpPgAdmin URL']}\n value={data.pgsql_url}\n name=\"v_pgsql_url\"\n id=\"pgsql_url\" />\n\n {printPgSqlHosts()}\n </>\n )\n }\n </div>\n );\n}\n\nexport default EditDatabaseOption;","import React, { useState } from 'react';\n\nimport SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useSelector } from 'react-redux';\n\nconst EditBackupOption = ({ data, visible }) => {\n const { i18n } = useSelector(state => state.session);\n const [remoteBackup, setRemoteBackup] = useState(false);\n\n return (\n <div className=\"server-dns-option\" style={{ display: `${visible ? 'block' : 'none'}` }}>\n <SelectInput\n options={[i18n['no'], i18n['yes']]}\n title={i18n['Local backup']}\n selected={data.backup}\n name=\"v_backup\"\n id=\"backup\" />\n\n <SelectInput\n options={['1', '2', '3', '4', '5', '6', '7', '8', '9']}\n title={i18n['Compression level']}\n selected={data.backup_gzip}\n name=\"v_backup_gzip\"\n id=\"backup-gzip\" />\n\n <TextInput\n title={i18n['Directory']}\n value={data.backup_dir}\n name=\"v_backup_dir\"\n id=\"v-backup-dir\" />\n\n {\n data.backup_remote_adv && (\n <>\n <button type=\"button\" onClick={() => setRemoteBackup(!remoteBackup)}>\n {i18n['Remote backup']}\n {remoteBackup ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n {\n remoteBackup && (\n <>\n <SelectInput\n selected={data.backup_type}\n options={data.protocols}\n title={i18n['Protocol']}\n name=\"v_backup_type\"\n id=\"backup_type\" />\n\n <TextInput\n title={i18n['Host']}\n value={data.backup_host}\n name=\"v_backup_host\"\n id=\"backup_host\" />\n\n <TextInput\n title={i18n['Username']}\n value={data.backup_username}\n name=\"v_backup_username\"\n id=\"backup_username\" />\n\n <TextInput\n title={i18n['Password']}\n value={data.backup_password}\n name=\"v_backup_password\"\n id=\"backup_password\" />\n\n <TextInput\n title={i18n['Directory']}\n value={data.backup_bpath}\n name=\"v_backup_bpath\"\n id=\"backup_bpath\" />\n </>\n )\n }\n </>\n )\n }\n </div>\n );\n}\n\nexport default EditBackupOption;","import React, { useEffect, useState } from 'react';\n\nimport SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from 'src/components/ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst EditMailOption = ({ data, visible }) => {\n const { i18n } = useSelector(state => state.session);\n const [mailCertificateSystem, setMailCertificateSystem] = useState(false);\n\n useEffect(() => {\n if (data.mail_certificate) {\n setMailCertificateSystem(true);\n }\n }, []);\n\n const getMailCertificateOptions = () => {\n let result = ['', ...data.ssl_domains];\n return result;\n }\n\n return (\n <div className=\"server-mail-option\" style={{ display: `${visible ? 'block' : 'none'}` }}>\n <TextInput\n optionalTitle={<Link to={`/edit/server/${data.mail_system}`}>{i18n['configure']}</Link>}\n title={i18n['MAIL Server'] + ' / '}\n name=\"v_mail_system\"\n value={data.mail_system}\n id=\"mail_system\"\n disabled />\n\n {\n data.antivirus_system && (\n <TextInput\n optionalTitle={<Link to={`/edit/server/${data.antivirus_system}`}>{i18n['configure']}</Link>}\n title={i18n['Antivirus'] + ' / '}\n name=\"v_antivirus_system\"\n value={data.antivirus_system}\n id=\"antivirus_system\"\n disabled />\n )\n }\n\n {\n data.antispam_system && (\n <TextInput\n optionalTitle={<Link to={`/edit/server/${data.antispam_system}`}>{i18n['configure']}</Link>}\n title={i18n['DNS Server'] + ' / '}\n name=\"v_antispam_system\"\n value={data.antispam_system}\n id=\"antispam_system\"\n disabled />\n )\n }\n\n <TextInput\n title={i18n['Webmail URL']}\n name=\"v_mail_url\"\n value={data.mail_url}\n id=\"mail-url\" />\n\n <br /><br />\n\n <Checkbox\n onChange={checked => setMailCertificateSystem(checked)}\n title={i18n['Use Web Domain SSL Certificate']}\n name=\"v_mail_ssl_domain_checkbox\"\n id=\"mail-ssl-domain-checkbox\"\n checked={!!data.mail_certificate} />\n\n {\n mailCertificateSystem && (\n <div className=\"mail-cert-info\">\n <SelectInput\n options={getMailCertificateOptions()}\n selected={data.mail_certificate}\n name=\"v_mail_ssl_domain\"\n title={i18n['Domain']}\n id=\"mail-ssl-domain\" />\n\n <div className=\"additional-info\">\n {\n data.sys_ssl_subject && (\n <div>\n <span>{i18n['SUBJECT']}:</span>\n <span>{data.sys_ssl_subject}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_aliases && (\n <div>\n <span>{i18n['ALIASES']}:</span>\n <span>{data.sys_ssl_aliases}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_not_before && (\n <div>\n <span>{i18n['NOT_BEFORE']}:</span>\n <span>{data.sys_ssl_not_before}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_not_after && (\n <div>\n <span>{i18n['NOT_AFTER']}:</span>\n <span>{data.sys_ssl_not_after}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_signature && (\n <div>\n <span>{i18n['SIGNATURE']}:</span>\n <span>{data.sys_ssl_signature}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_pub_key && (\n <div>\n <span>{i18n['PUB_KEY']}:</span>\n <span>{data.sys_ssl_pub_key}</span>\n </div>\n )\n }\n\n {\n data.sys_ssl_issuer && (\n <div>\n <span>{i18n['ISSUER']}:</span>\n <span>{data.sys_ssl_issuer}</span>\n </div>\n )\n }\n </div>\n </div>\n )\n }\n </div>\n );\n}\n\nexport default EditMailOption;","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport { getServerAdditionalInfo, updateService } from '../../../ControlPanelService/Server';\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport EditServerWebOption from './EditServerWebOption';\nimport EditServerDnsOption from './EditServerDnsOption';\nimport EditVestaPluginsOption from './EditVestaPlugins';\nimport EditVestaSslOption from './EditVestaSslOption';\nimport EditDatabaseOption from './EditDatabaseOption';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport EditBackupOption from './EditBackupOption';\nimport EditMailOption from './EditMailOption';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './EditServer.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst EditServer = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n webOption: false,\n dnsOption: false,\n mailOption: false,\n backupOption: false,\n sslOption: false,\n pluginsOption: false,\n dbOption: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getServerAdditionalInfo()\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedServer = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedServer[name] = value;\n }\n\n updatedServer['save'] = 'save';\n updatedServer['token'] = token;\n\n if (Object.keys(updatedServer).length !== 0 && updatedServer.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedServer)\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n setState({ ...state, errorMessage: error_msg || '', okMessage: ok_msg || '', loading: false });\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const toggleOption = option => {\n setState({\n ...state,\n [option]: !state[option]\n });\n }\n\n return (\n <div className=\"edit-template edit-server\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Configuring Server']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-server\">\n <TextInput\n value={state.data.hostname}\n title={i18n['Hostname']}\n name=\"v_hostname\"\n id=\"hostname\" />\n\n {\n state.data.timezones && (\n <div className=\"form-group select-group\">\n <label className=\"label-wrapper\" htmlFor=\"timezone\">\n {i18n['Time Zone']}\n </label>\n <select className=\"form-control\" id=\"timezone\" name=\"v_timezone\">\n {\n Object.keys(state.data.timezones).map(key => {\n const value = state.data.timezones[key];\n\n return <option key={key} value={key} selected={state.data.timezone === key}>{value}</option>;\n })\n }\n </select>\n </div>\n )\n }\n\n <SelectInput\n options={state.data.languages}\n selected={state.data.language}\n title={i18n['Default Language']}\n name=\"v_language\"\n id=\"language\" />\n\n <div className=\"modules\">\n <button type=\"button\" onClick={() => toggleOption('webOption')}>\n {i18n['WEB']}\n {state.webOption ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n <EditServerWebOption\n webBackendPool={state.data.web_backend_pool}\n proxySystem={state.data.proxy_system}\n webBackend={state.data.web_backend}\n webSystem={state.data.web_system}\n visible={state.webOption} />\n\n <button type=\"button\" onClick={() => toggleOption('dnsOption')}>\n {i18n['DNS']}\n {state.dnsOption ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n <EditServerDnsOption\n selected={state.data.v_dns_cluster}\n dnsCluster={state.data.dns_cluster}\n dnsSystem={state.data.dns_system}\n visible={state.dnsOption} />\n\n <button type=\"button\" onClick={() => toggleOption('mailOption')}>\n {i18n['MAIL']}\n {state.mailOption ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n <EditMailOption data={state.data} visible={state.mailOption} />\n\n <button type=\"button\" onClick={() => toggleOption('dbOption')}>\n {i18n['DB']}\n {state.dbOption ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n <EditDatabaseOption data={state.data} visible={state.dbOption} />\n\n <button type=\"button\" onClick={() => toggleOption('backupOption')}>\n {i18n['BACKUP']}\n {state.backupOption ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n <EditBackupOption data={state.data} visible={state.backupOption} />\n\n <button type=\"button\" onClick={() => toggleOption('sslOption')}>\n {i18n['Vesta SSL']}\n {state.sslOption ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n <EditVestaSslOption data={state.data} visible={state.sslOption} />\n\n <button type=\"button\" onClick={() => toggleOption('pluginsOption')}>\n {i18n['Vesta Control Panel Plugins']}\n {state.pluginsOption ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n <EditVestaPluginsOption data={state.data} visible={state.pluginsOption} />\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditServer;\n","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../../actions/MainNavigation/mainNavigationActions\";\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport { getServiceInfo, updateService } from 'src/ControlPanelService/Server';\nimport AddItemLayout from '../../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../../components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './Dovecot.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst Dovecot = () => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getServiceInfo('dovecot')\n .then(response => {\n if (!response.data.config) {\n history.push('/list/server');\n }\n\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedService = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedService[name] = value;\n }\n\n if (Object.keys(updatedService).length !== 0 && updatedService.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedService, '/dovecot')\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-dovecot\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">\n {i18n['Configuring Server']} / {state.data.service_name}\n </div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-dovecot\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextArea\n defaultValue={state.data.config}\n title={state.data.config_path}\n name=\"v_config\"\n id=\"v_config\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config1}\n title={state.data.config_path1}\n name=\"v_config1\"\n id=\"v_config1\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config2}\n title={state.data.config_path2}\n name=\"v_config2\"\n id=\"v_config2\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config3}\n title={state.data.config_path3}\n name=\"v_config3\"\n id=\"v_config3\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config4}\n title={state.data.config_path4}\n name=\"v_config4\"\n id=\"v_config4\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config5}\n title={state.data.config_path5}\n name=\"v_config5\"\n id=\"v_config5\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config6}\n title={state.data.config_path6}\n name=\"v_config6\"\n id=\"v_config6\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config7}\n title={state.data.config_path7}\n name=\"v_config7\"\n id=\"v_config7\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config8}\n title={state.data.config_path8}\n name=\"v_config8\"\n id=\"v_config8\"\n rows=\"10\" />\n\n <br />\n\n <Checkbox\n title={i18n['restart']}\n defaultChecked={true}\n name=\"v_restart\"\n id=\"restart\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div >\n );\n}\n\nexport default Dovecot;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/mail/index.php';\nconst addMailApiUri = '/api/v1/add/mail/index.php';\nconst mailInfoUri = '/api/v1/edit/mail/index.php';\nconst updateMailUri = '/api/v1/edit/mail/index.php';\n\nexport const getMailList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const getMailAccountList = domain => {\n return axios.get(`${BASE_URL}${webApiUri}?domain=${domain}`)\n}\n\nexport const getMailAccountInfo = (domain, account) => {\n return axios.get(`${BASE_URL}${mailInfoUri}?domain=${domain}&account=${account}`)\n}\n\nexport const bulkAction = (action, domainNameSystems) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n domainNameSystems.forEach(domainNameSystem => {\n formData.append(\"domain[]\", domainNameSystem);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/mail/', formData);\n};\n\nexport const bulkMailAccountAction = (action, domain, accounts = []) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n formData.append(\"domain\", domain);\n\n accounts.forEach(account => {\n formData.append(\"account[]\", account);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/mail/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const addMail = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addMailApiUri, formDataObject);\n}\n\nexport const addMailAccount = (data, domain) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(`${BASE_URL}${addMailApiUri}?domain=${domain}`, formDataObject);\n}\n\nexport const editMailAccount = (data, domain, account) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(`${BASE_URL}${updateMailUri}?domain=${domain}&account=${account}`, formDataObject);\n}\n\nexport const getMailInfo = domain => {\n return axios.get(BASE_URL + mailInfoUri, {\n params: {\n domain,\n token: getAuthToken()\n }\n });\n}\n\nexport const updateMail = (data, domain) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updateMailUri, formDataObject, {\n params: {\n domain,\n token: getAuthToken()\n }\n });\n}\n\nexport const mailInfoBlockSelectOptions = i18n => [\n {\n value: i18n['Use server hostname'],\n type: 'hostname',\n },\n {\n value: i18n['Use domain hostname'],\n type: 'domain',\n },\n {\n value: i18n['Use STARTTLS'],\n type: 'starttls',\n },\n {\n value: i18n['Use SSL / TLS'],\n type: 'ssl',\n },\n {\n value: i18n['No encryption'],\n type: 'no_encryption',\n }\n];","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { mailInfoBlockSelectOptions } from 'src/ControlPanelService/Mail';\n\nimport './MailInfoBlock.scss';\n\nexport default function MailInfoBlock({ webMail, hostName, domain, password }) {\n const { i18n } = useSelector(state => state.session);\n const [selectedOption, setSelectedOption] = useState('');\n const { userName } = useSelector(state => state.session);\n const [state, setState] = useState({\n imapHostName: hostName,\n smtpHostName: hostName,\n imapEncryption: i18n['STARTTLS'],\n smtpEncryption: i18n['STARTTLS'],\n imapPort: '143',\n smtpPort: '587',\n });\n\n useEffect(() => {\n if (selectedOption === 'hostname') {\n setState({ ...state, imapHostName: hostName, smtpHostName: hostName });\n } else if (selectedOption === \"domain\") {\n setState({ ...state, imapHostName: domain, smtpHostName: domain });\n } else if (selectedOption === \"starttls\") {\n setState({ ...state, imapPort: '143', imapEncryption: 'STARTTLS', smtpPort: '587', smtpEncryption: 'STARTTLS' });\n } else if (selectedOption === \"ssl\") {\n setState({ ...state, imapPort: '993', imapEncryption: 'SSL / TLS', smtpPort: '465', smtpEncryption: 'SSL / TLS' });\n } else if (selectedOption === \"no_encryption\") {\n setState({\n ...state,\n imapHostName: domain,\n smtpHostName: domain,\n imapPort: '143',\n smtpPort: '25',\n imapEncryption: i18n['No encryption'],\n smtpEncryption: i18n['No encryption']\n });\n }\n }, [selectedOption]);\n\n const renderSelectOptions = () => {\n const options = mailInfoBlockSelectOptions(i18n);\n return options.map(option =>\n <option key={option.type} value={option.type}>{option.value}</option>\n );\n }\n\n return (\n <div className=\"mail-info-block\">\n <div class=\"form-group select-group\">\n <select class=\"form-control\" onChange={event => setSelectedOption(event.target.value)}>\n {renderSelectOptions()}\n </select>\n\n <div className=\"details\">\n <div>\n <span>{i18n['Username']}:</span>\n <span>{`${userName}@${domain}`}</span>\n </div>\n\n <div>\n <span>{i18n['Password']}:</span>\n <span>{password || '******'}</span>\n </div>\n\n <div>\n <span>{i18n['IMAP hostname']}:</span>\n <span>{state.imapHostName}</span>\n </div>\n\n <div>\n <span>{i18n['IMAP port']}:</span>\n <span>{state.imapPort}</span>\n </div>\n\n <div>\n <span>{i18n['IMAP security']}:</span>\n <span>{state.imapEncryption}</span>\n </div>\n\n <div>\n <span>{i18n['IMAP auth method']}:</span>\n <span>{i18n['Normal password']}</span>\n </div>\n\n <div>\n <span>{i18n['SMTP hostname']}:</span>\n <span>{state.smtpHostName}</span>\n </div>\n\n <div>\n <span>{i18n['SMTP port']}:</span>\n <span>{state.smtpPort}</span>\n </div>\n\n <div>\n <span>{i18n['SMTP security']}:</span>\n <span>{state.smtpEncryption}</span>\n </div>\n\n <div>\n <span>{i18n['SMTP auth method']}:</span>\n <span>{i18n['Normal password']}</span>\n </div>\n\n <div>\n <span>{i18n['Webmail URL']}:</span>\n <span><a href={webMail}>{webMail}</a></span>\n </div>\n\n <input type=\"hidden\" name={i18n['Username']} value={`@${domain}`} />\n <input type=\"hidden\" name={i18n['IMAP hostname']} value={state.imapHostName} />\n <input type=\"hidden\" name={i18n['SMTP hostname']} value={state.smtpHostName} />\n <input type=\"hidden\" name={i18n['IMAP port']} value={state.imapPort} />\n <input type=\"hidden\" name={i18n['SMTP port']} value={state.smtpPort} />\n <input type=\"hidden\" name={i18n['IMAP security']} value={state.imapEncryption} />\n <input type=\"hidden\" name={i18n['SMTP security']} value={state.smtpEncryption} />\n <input type=\"hidden\" name={i18n['IMAP auth method']} value={i18n['Normal password']} />\n <input type=\"hidden\" name={i18n['SMTP auth method']} value={i18n['Normal password']} />\n </div>\n </div>\n </div>\n );\n}","import React, { useEffect, useState } from 'react';\n\nimport TextInputWithExtraButton from 'src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Password from 'src/components/ControlPanel/AddItemLayout/Form/Password/Password';\nimport TextArea from 'src/components/ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport Checkbox from 'src/components/ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport { editMailAccount, getMailAccountInfo } from '../../../ControlPanelService/Mail';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport MailInfoBlock from '../MailInfoBlock/MailInfoBlock';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nexport default function EditMailAccount(props) {\n const [autoreplyChecked, setAutoreplyChecked] = useState(false);\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory();\n const [state, setState] = useState({\n data: {},\n quotaValue: '',\n loading: false,\n password: '',\n okMessage: '',\n errorMessage: '',\n });\n\n useEffect(() => {\n dispatch(addActiveElement(`/list/mail/`));\n dispatch(removeFocusedElement());\n setState({ ...state, loading: true });\n\n fetchData();\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newMailDomain = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newMailDomain[name] = value;\n }\n\n newMailDomain['v_domain'] = props.domain;\n newMailDomain['v_account'] = props.account;\n newMailDomain['Password'] = newMailDomain['v_password'];\n\n if (Object.keys(newMailDomain).length !== 0 && newMailDomain.constructor === Object) {\n setState({ ...state, loading: true });\n editMailAccount(newMailDomain, props.domain, props.account)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const fetchData = () => {\n setState({ ...state, loading: true });\n\n getMailAccountInfo(props.domain, props.account)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n\n setAutoreplyChecked(response.data.autoreply === 'yes');\n })\n .catch(err => console.error(err));\n }\n\n const toggleQuota = () => {\n const value = state.data.quota === 'unlimited' ? '1000' : 'unlimited';\n setState({ ...state, data: { ...state.data, quota: value } });\n }\n\n const goBack = () => {\n history.push(`/list/mail/?domain=${props.domain}`);\n }\n\n return (\n <div className=\"edit-template add-mail-account\">\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing Mail Account']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <div className=\"r-1\">\n <div className=\"c-1\">\n <TextInput\n title={i18n['Domain']}\n value={props.domain}\n name=\"v_domain\"\n id=\"domain\"\n disabled />\n\n <Password name=\"v_password\" onChange={password => setState({ ...state, password })} />\n\n <TextInputWithExtraButton title={i18n['Quota']} optionalTitle={i18n['in megabytes']} id=\"quota\" name=\"v_quota\" value={state.data.quota}>\n <button type=\"button\" onClick={toggleQuota}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextArea\n optionalTitle={`${i18n['use local-part']}`}\n defaultValue={state.data.aliases}\n title={i18n['Aliases']}\n name=\"v_aliases\"\n id=\"aliases\" />\n\n <TextArea\n optionalTitle={`${i18n['one or more email addresses']}`}\n defaultValue={state.data.fwd}\n title={i18n['Forward to']}\n name=\"v_fwd\"\n id=\"fwd\" />\n\n <Checkbox\n title={i18n['Do not store forwarded mail']}\n defaultChecked={state.data.fwd_only === 'yes'}\n name=\"v_fwd_only\"\n id=\"fwd_only\" />\n\n <Checkbox\n title={i18n['Autoreply']}\n checked={autoreplyChecked}\n onChange={checked => setAutoreplyChecked(checked)}\n name=\"v_autoreply\"\n id=\"autoreply\" />\n\n {\n autoreplyChecked && (\n <div style={{ transform: 'translateX(3rem)' }}>\n <TextArea\n defaultValue={state.data.autoreply_message}\n title={i18n['Message']}\n name=\"v_autoreply_message\"\n id=\"autoreply_message\" />\n </div>\n )\n }\n\n <TextInput\n title={i18n['Send login credentials to email address']}\n value={state.data.send_email}\n name=\"v_credentials\"\n id=\"credentials\" />\n </div>\n\n <div className=\"c-2\">\n <MailInfoBlock\n webMail={state.data.webmail}\n hostName={state.data.hostname}\n password={state.password}\n domain={props.domain} />\n </div>\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={goBack}>{i18n.Back}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport { getMailInfo, updateMail } from '../../../ControlPanelService/Mail';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditMail.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst EditMail = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n const { domain } = queryParams;\n\n dispatch(addActiveElement('/list/mail/'));\n dispatch(removeFocusedElement());\n\n if (domain) {\n setState({ ...state, loading: true });\n\n getMailInfo(domain)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedDomain = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedDomain[name] = value;\n }\n\n updatedDomain['v_domain'] = state.data.domain;\n\n if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateMail(updatedDomain, state.data.domain)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-mail\">\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing Mail Domain']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-mail\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextInput id=\"domain\" name=\"v_domain\" title={i18n['Domain']} value={state.data.domain} disabled />\n\n <Checkbox\n name=\"v_antispam\"\n id=\"antispam\"\n title={i18n['AntiSpam Support']}\n defaultChecked={state.data.antispam === 'yes'} />\n\n <Checkbox\n name=\"v_antivirus\"\n id=\"antivirus\"\n title={i18n['AntiVirus Support']}\n defaultChecked={state.data.antivirus === 'yes'} />\n\n <Checkbox\n name=\"v_dkim\"\n id=\"dkim\"\n title={i18n['DKIM Support']}\n defaultChecked={state.data.dkim === 'yes'} />\n\n <TextInput id=\"catchall\" name=\"v_catchall\" title={i18n['Catchall email']} value={state.data.catchall} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/mail/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditMail;","import React, { useEffect, useState } from 'react';\nimport EditMailAccount from 'src/components/MailAccount/Edit/EditMailAccount';\nimport EditMail from 'src/components/Mail/Edit/EditMail';\nimport { useHistory } from 'react-router-dom';\nimport QueryString from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\n\nexport default function EditMailWrapper() {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n const [isMailAccount, setIsMailAccount] = useState(false);\n\n useEffect(() => {\n if (parsedQueryString.domain && parsedQueryString.account) {\n setIsMailAccount(true);\n } else {\n setIsMailAccount(false);\n }\n }, [history.location]);\n\n return (\n <>\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n {\n isMailAccount\n ? <EditMailAccount domain={parsedQueryString.domain} account={parsedQueryString.account} />\n : <EditMail />\n }\n </>\n );\n}","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../../actions/MainNavigation/mainNavigationActions\";\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport AddItemLayout from '../../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { getServiceInfo, updateService } from 'src/ControlPanelService/Server';\nimport Spinner from '../../../../components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './Service.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst Service = ({ serviceName = '' }) => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n if (!serviceName) {\n history.push('/list/server');\n }\n\n setState({ ...state, loading: true });\n\n getServiceInfo(serviceName)\n .then(response => {\n const { config } = response.data;\n\n if (!config || config.includes(\"file doesn't exist\")) {\n history.push('/list/server');\n }\n\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedService = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedService[name] = value;\n }\n\n if (Object.keys(updatedService).length !== 0 && updatedService.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedService, serviceName)\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-service\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">\n {i18n['Configuring Server']} / {state.data.service_name}\n </div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-service\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextArea\n defaultValue={state.data.config}\n title={state.data.config_path}\n name=\"v_config\"\n id=\"v_config\"\n rows=\"18\" />\n\n <br />\n\n <Checkbox\n title={i18n['restart']}\n defaultChecked={true}\n name=\"v_restart\"\n id=\"restart\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div >\n );\n}\n\nexport default Service;","import React, { useEffect, useState } from 'react';\n\nimport TextInputWithExtraButton from 'src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Password from 'src/components/ControlPanel/AddItemLayout/Form/Password/Password';\nimport TextArea from 'src/components/ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport Checkbox from 'src/components/ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { addMailAccount, getMailList } from '../../../ControlPanelService/Mail';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport MailInfoBlock from '../MailInfoBlock/MailInfoBlock';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddMailAccount.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nexport default function AddMailAccount(props) {\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const token = localStorage.getItem(\"token\");\n const history = useHistory();\n const [state, setState] = useState({\n data: {},\n advancedOptions: false,\n autoreplyChecked: false,\n quotaValue: '',\n loading: false,\n password: '',\n okMessage: '',\n errorMessage: '',\n });\n\n useEffect(() => {\n dispatch(addActiveElement(`/list/mail/`));\n dispatch(removeFocusedElement());\n\n fetchData();\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newMailDomain = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newMailDomain[name] = value;\n }\n\n newMailDomain['ok_acc'] = 'add';\n newMailDomain['token'] = token;\n newMailDomain['v_domain'] = props.domain;\n newMailDomain['Password'] = newMailDomain['v_password'];\n\n if (Object.keys(newMailDomain).length !== 0 && newMailDomain.constructor === Object) {\n setState({ ...state, loading: true });\n addMailAccount(newMailDomain, props.domain)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const fetchData = () => {\n setState({ ...state, loading: true });\n\n getMailList()\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n\n const toggleOptions = () => {\n setState({ ...state, advancedOptions: !state.advancedOptions });\n }\n\n const toggleQuotaValue = () => {\n if (state.quotaValue !== 'unlimited') {\n setState({ ...state, quotaValue: 'unlimited' });\n } else {\n setState({ ...state, quotaValue: '' });\n }\n }\n\n return (\n <div className=\"edit-template add-mail-account\">\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding Mail Account']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <div className=\"r-1\">\n <div className=\"c-1\">\n <TextInput\n title={i18n['Domain']}\n value={props.domain}\n name=\"v_domain\"\n id=\"domain\"\n disabled />\n\n <TextInput\n title={i18n['Account']}\n name=\"v_account\"\n id=\"account\" />\n\n <Password name=\"v_password\" onChange={password => setState({ ...state, password })} />\n </div>\n\n <div className=\"c-2\">\n <MailInfoBlock\n webMail={state.data.webmail}\n hostName={state.data.hostname}\n password={state.password}\n domain={props.domain} />\n </div>\n </div>\n\n <div className=\"r-2\">\n <button type=\"button\" onClick={toggleOptions}>\n {i18n['Advanced options']}\n {state.advancedOptions ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n\n {\n state.advancedOptions && (\n <>\n <TextInputWithExtraButton title={i18n['Quota']} optionalTitle={i18n['in megabytes']} id=\"quota\" name=\"v_quota\" value={state.quotaValue}>\n <button type=\"button\" onClick={toggleQuotaValue}>\n <FontAwesomeIcon icon=\"infinity\" />\n </button>\n </TextInputWithExtraButton>\n\n <TextArea\n optionalTitle={`${i18n['use local-part']}`}\n defaultValue={state.data.v_aliases}\n title={i18n['Aliases']}\n name=\"v_aliases\"\n id=\"aliases\" />\n\n <TextArea\n optionalTitle={`${i18n['one or more email addresses']}`}\n defaultValue={state.data.forward}\n title={i18n['Forward to']}\n name=\"v_fwd\"\n id=\"fwd\" />\n\n <Checkbox\n title={i18n['Do not store forwarded mail']}\n name=\"v_fwd_only\"\n id=\"fwd_only\" />\n </>\n )\n }\n\n <TextInput\n title={i18n['Send login credentials to email address']}\n name=\"v_credentials\"\n id=\"credentials\" />\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push(`/list/mail/?domain=${props.domain}`)}>{i18n.Back}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { addMail } from '../../../ControlPanelService/Mail';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddMail.scss'\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst AddMail = props => {\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const token = localStorage.getItem(\"token\");\n const history = useHistory();\n const [state, setState] = useState({\n loading: false,\n antiSpamChecked: true,\n antiVirusChecked: true,\n dkimChecked: true,\n okMessage: '',\n errorMessage: '',\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/mail/'));\n dispatch(removeFocusedElement());\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newMailDomain = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newMailDomain[name] = value;\n }\n\n if (Object.keys(newMailDomain).length !== 0 && newMailDomain.constructor === Object) {\n setState({ ...state, loading: true });\n addMail(newMailDomain)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template add-web\">\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding Mail Domain']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <input type=\"hidden\" name=\"ok\" value=\"add\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <div className=\"form-group\">\n <label htmlFor=\"domain\">{i18n.Domain}</label>\n <input type=\"text\" className=\"form-control\" id=\"domain\" name=\"v_domain\" />\n </div>\n\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n name=\"v_antispam\"\n id=\"antispam-support\"\n onChange={event => setState({ ...state, antiSpamChecked: event.target.checked })}\n checked={state.antiSpamChecked} />\n <label htmlFor=\"antispam-support\">{i18n['AntiSpam Support']}</label>\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n name=\"v_antivirus\"\n id=\"antivirus-support\"\n onChange={event => setState({ ...state, antiVirusChecked: event.target.checked })}\n checked={state.antiVirusChecked} />\n <label htmlFor=\"antivirus-support\">{i18n['AntiVirus Support']}</label>\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"checkbox-wrapper\">\n <input\n type=\"checkbox\"\n name=\"v_dkim\"\n id=\"dkim-support\"\n onChange={event => setState({ ...state, dkimChecked: event.target.checked })}\n checked={state.dkimChecked} />\n <label htmlFor=\"dkim-support\">{i18n['DKIM Support']}</label>\n </div>\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/mail/')}>{i18n.Back}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddMail;","import React, { useEffect, useState } from 'react';\nimport AddMailAccount from 'src/components/MailAccount/Add/AddMailAccount';\nimport AddMail from 'src/components/Mail/Add/AddMail';\nimport { useHistory } from 'react-router-dom';\nimport QueryString from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\n\nexport default function AddMailWrapper() {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const [domain, setDomain] = useState(false);\n\n useEffect(() => {\n const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n\n if (parsedQueryString.domain) {\n setDomain(parsedQueryString.domain);\n } else {\n setDomain('');\n }\n }, [history.location]);\n\n return (\n <>\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n {\n domain\n ? <AddMailAccount domain={domain} />\n : <AddMail />\n }\n </>\n );\n}","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst updateDNSUri = '/api/v1/edit/dns/index.php';\nconst addDnsApiUri = '/api/v1/add/dns/index.php';\nconst dNSInfoUri = '/api/v1/edit/dns/index.php';\nconst BASE_URL = window.location.origin;\nconst dnsApiUri = '/api/v1/list/dns/index.php';\n\nexport const getDnsList = () => {\n return axios.get(BASE_URL + dnsApiUri);\n}\n\nexport const getDNSRecordsList = domain => {\n return axios.get(`${BASE_URL}${dnsApiUri}?domain=${domain}`);\n}\n\nexport const getDNSRecordInfo = (domain, recordId) => {\n return axios.get(`${BASE_URL}${updateDNSUri}?domain=${domain}&record_id=${recordId}`);\n}\n\nexport const bulkDomainAction = (action, domains) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n domains.forEach(record => {\n formData.append(\"domain[]\", record);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/dns/', formData);\n};\n\nexport const bulkAction = (action, records, domain) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n formData.append(\"domain\", domain);\n\n records.forEach(record => {\n formData.append(\"record[]\", record);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/dns/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const addDomainNameSystem = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addDnsApiUri, formDataObject);\n}\n\nexport const addDomainNameSystemRecord = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + addDnsApiUri, formDataObject);\n}\n\nexport const getDNSInfo = domain => {\n return axios.get(BASE_URL + dNSInfoUri, {\n params: {\n domain,\n token: getAuthToken()\n }\n });\n}\n\nexport const updateDNS = (data, domain, recordId) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updateDNSUri, formDataObject, {\n params: {\n domain,\n record_id: recordId,\n token: getAuthToken()\n }\n });\n}","import axios from \"axios\";\n\nconst BASE_URL = window.location.origin;\nconst resetPasswordUri = '/api/v1/reset/index.php';\n\nexport const resetPassword = (user = '', code = '', password = '', confirmPassword = '') => {\n const formData = new FormData();\n\n if (password) {\n formData.append('password', password);\n }\n\n if (confirmPassword) {\n formData.append('password_confirm', confirmPassword);\n }\n\n if (user) {\n formData.append('user', user);\n }\n\n if (code) {\n formData.append('code', code);\n }\n\n return axios.post(BASE_URL + resetPasswordUri, formData);\n};\n","import { LOGIN, LOGOUT, LOGGED_OUT_AS, CHECK_AUTH, RESET_PASSWORD } from './sessionTypes';\nimport { checkAuth, signIn, signInAs, signOut } from 'src/services/session';\nimport { resetPassword } from 'src/ControlPanelService/ResetPassword';\nimport { resetAuthToken, setAuthToken } from 'src/utils/token';\nimport { REFRESH_COUNTERS } from '../MenuCounters/menuCounterTypes';\n\nconst LOGOUT_RESPONSE = 'logged_out';\nconst LOGOUT_AS_RESPONSE = 'logged_out_as';\n\nexport const login = (user, password) => dispatch => {\n return new Promise((resolve, reject) => {\n signIn({ user, password }).then((response) => {\n const { error, session, token, panel, data, user, i18n } = response.data;\n\n if (token) setAuthToken(token);\n\n dispatch({\n type: LOGIN,\n value: {\n token: token || '',\n panel,\n session,\n i18n: i18n || {},\n userName: user,\n error\n },\n });\n dispatch({\n type: REFRESH_COUNTERS,\n value: {\n user: data,\n }\n });\n resolve(token);\n }, (error) => {\n reject(error);\n });\n });\n}\n\nexport const reset = ({ user = '', code = '', password = '', password_confirm = '' }) => dispatch => {\n return new Promise((resolve, reject) => {\n resetPassword(user, code, password, password_confirm).then((response) => {\n const { error, session, token, panel, user } = response.data;\n\n dispatch({\n type: RESET_PASSWORD,\n value: {\n token,\n panel,\n session,\n userName: user,\n error\n },\n });\n dispatch({\n type: REFRESH_COUNTERS,\n value: {\n user: {},\n }\n });\n resolve(token);\n }, (error) => {\n reject(error);\n });\n });\n}\n\nexport const loginAs = username => dispatch => {\n return new Promise((resolve, reject) => {\n signInAs(username).then((response) => {\n const { error, token, session, panel, data, user, i18n } = response.data;\n if (token) setAuthToken(token);\n\n dispatch({\n type: LOGIN,\n value: {\n userName: user,\n i18n,\n session,\n panel,\n token,\n error\n }\n });\n dispatch({\n type: REFRESH_COUNTERS,\n value: {\n user: data,\n }\n });\n\n resolve(token);\n }, (error) => {\n console.error(error);\n reject();\n });\n });\n}\n\nexport const logout = () => (dispatch, getState) => {\n return new Promise((resolve, reject) => {\n signOut().then((response) => {\n const { logout_response, error, userName, user, i18n, session, panel } = response.data;\n\n if (logout_response === LOGOUT_RESPONSE) {\n resetAuthToken();\n\n dispatch({\n type: LOGOUT,\n value: {\n userName: '',\n token: '',\n panel: {},\n session: {},\n i18n: [],\n error,\n },\n });\n dispatch({\n type: REFRESH_COUNTERS,\n value: {\n user: {},\n }\n });\n\n resolve();\n } else if (logout_response === LOGOUT_AS_RESPONSE) {\n dispatch({\n type: LOGGED_OUT_AS,\n value: {\n userName,\n session,\n panel,\n token: '',\n i18n,\n error,\n },\n });\n dispatch({\n type: REFRESH_COUNTERS,\n value: {\n user,\n }\n });\n\n resolve();\n } else {\n resolve(`Error while signing out: ${logout_response}`);\n }\n }, (error) => {\n console.error(error);\n reject();\n });\n });\n}\n\nexport const checkAuthHandler = () => (dispatch, getState) => {\n return new Promise((resolve, reject) => {\n checkAuth()\n .then(res => {\n const { user, data, session, panel, error, i18n, token } = res.data;\n\n if (token) setAuthToken(token);\n\n dispatch({\n type: CHECK_AUTH,\n value: {\n userName: user,\n i18n,\n session,\n panel,\n token,\n error\n }\n });\n dispatch({\n type: REFRESH_COUNTERS,\n value: {\n user: data,\n }\n });\n\n resolve(token);\n })\n .catch(err => {\n reject();\n console.error(err);\n });\n });\n}\n\nexport const removeToken = () => {\n return {\n type: LOGOUT,\n value: {\n token: '',\n error: ''\n }\n }\n}\n","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { getDNSInfo, updateDNS } from '../../../ControlPanelService/Dns';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditDomainNameSystem.scss';\nimport { Helmet } from 'react-helmet';\nimport { andler } from 'src/actions/Session/sessionActions';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst EditDomainNameSystem = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n const { domain } = queryParams;\n\n dispatch(addActiveElement('/list/dns/'));\n dispatch(removeFocusedElement());\n\n if (domain) {\n setState({ ...state, loading: true });\n\n getDNSInfo(domain)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedDomain = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedDomain[name] = value;\n }\n\n updatedDomain['v_domain'] = state.data.domain;\n\n if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateDNS(updatedDomain, state.data.domain)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-dns\">\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing DNS Domain']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-dns\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextInput id=\"domain\" name=\"v_domain\" title={i18n['Domain']} value={state.data.domain} disabled />\n\n <TextInput id=\"ip\" name=\"v_ip\" title={i18n['IP Address']} value={state.data.ip} />\n\n <SelectInput\n optionalTitle={state.data.dns_system}\n options={state.data.templates}\n selected={state.data.template}\n title={i18n['Template']}\n name=\"v_template\"\n id=\"templates\" />\n\n <TextInput\n optionalTitle={state.data['YYYY-MM-DD']}\n title={i18n['Expiration Date']}\n value={state.data.exp}\n name=\"v_exp\"\n id=\"exp\" />\n\n <TextInput id=\"soa\" name=\"v_soa\" title=\"SOA\" value={state.data.soa} />\n\n <TextInput id=\"ttl\" name=\"v_ttl\" title=\"TTL\" value={state.data.ttl} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/dns/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditDomainNameSystem;","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { updateDNS, getDNSRecordInfo } from 'src/ControlPanelService/Dns';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nexport default function EditDNSRecord(props) {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory();\n const [state, setState] = useState({\n data: {},\n selectOptions: [\n 'A',\n 'AAAA',\n 'NS',\n 'CNAME',\n 'MX',\n 'TXT',\n 'SRV',\n 'DNSKEY',\n 'KEY',\n 'IPSECKEY',\n 'PTR',\n 'SPF',\n 'TLSA',\n 'CAA'\n ],\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n const { domain, record_id } = props;\n\n dispatch(addActiveElement('/list/dns/'));\n dispatch(removeFocusedElement());\n\n if (domain) {\n setState({ ...state, loading: true });\n\n getDNSRecordInfo(domain, record_id)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedRecord = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedRecord[name] = value;\n }\n\n updatedRecord['v_domain'] = state.data.domain;\n updatedRecord['v_record_id'] = props.record_id;\n updatedRecord['v_type'] = state.data.type;\n\n if (Object.keys(updatedRecord).length !== 0 && updatedRecord.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateDNS(updatedRecord, props.domain, props.record_id)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-dns-rec\">\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing DNS Record']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-dns-rec\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextInput\n title={i18n['Domain']}\n value={props.domain}\n name=\"v_domain\"\n id=\"domain\"\n disabled />\n\n <TextInput\n value={state.data.rec}\n title={i18n['Record']}\n name=\"v_record_id\"\n id=\"domain\"\n disabled />\n\n <SelectInput\n options={state.selectOptions}\n selected={state.data.type}\n title={i18n['Type']}\n name=\"v_type\"\n id=\"type\"\n disabled />\n\n <TextInput\n title={i18n['IP or Value']}\n value={state.data.val}\n name=\"v_val\"\n id=\"val\" />\n\n <TextInput\n optionalTitle={`(${i18n['optional']})`}\n value={state.data.priority}\n title={i18n['Priority']}\n name=\"v_priority\"\n id=\"priority\" />\n\n <TextInput\n optionalTitle={`(${i18n['internal']})`}\n title={i18n['Record Number']}\n value={state.data.record_id}\n name=\"v_priority\"\n id=\"priority\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push(`/list/dns?domain=${props.domain}`)}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}","import React, { useEffect, useState } from 'react';\nimport EditDomainNameSystem from 'src/components/DomainNameSystem/Edit/EditDomainNameSystem';\nimport EditDNSRecord from 'src/components/DNSRecord/Edit/EditDNSRecord';\nimport { useHistory } from 'react-router-dom';\nimport QueryString from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\n\nexport default function EditDNSWrapper() {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n const [isDnsRecord, setIsDnsRecord] = useState(false);\n\n useEffect(() => {\n if (parsedQueryString.domain && parsedQueryString.record_id) {\n setIsDnsRecord(true);\n } else {\n setIsDnsRecord(false);\n }\n }, [history.location]);\n\n return (\n <>\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n {\n isDnsRecord\n ? <EditDNSRecord domain={parsedQueryString.domain} record_id={parsedQueryString.record_id} />\n : <EditDomainNameSystem />\n }\n </>\n );\n}","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport SelectInput from '../../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\n\nimport './SslSupport.scss';\n\nconst SslSupport = props => {\n const { i18n } = useSelector(state => state.session);\n const [letsEncrypt, setLetsEncrypt] = useState(false);\n const [sslHomeOptions, setSslHomeOptions] = useState(['public_html', 'public_shtml']);\n\n useEffect(() => {\n setLetsEncrypt(props.letsEncrypt);\n }, []);\n\n const onChangeLetsEncrypt = checked => {\n setLetsEncrypt(checked);\n }\n\n return (\n <div className=\"ssl-support\">\n <Checkbox\n onChange={onChangeLetsEncrypt}\n name=\"v_letsencrypt\"\n id=\"lets-encrypt\"\n title={i18n['Lets Encrypt Support']}\n defaultChecked={letsEncrypt} />\n\n <SelectInput\n options={sslHomeOptions}\n selected={props.sslHome === 'same' ? 'public_html' : 'public_shtml'}\n name=\"v_ssl_home\"\n id=\"ssl_home\"\n title={i18n['SSL Home Directory']} />\n\n <TextArea\n id=\"ssl-certificate\"\n name=\"v_ssl_crt\"\n title={i18n['SSL Certificate']}\n defaultValue={props.sslCertificate}\n disabled={letsEncrypt}\n optionalTitle={\n !letsEncrypt\n ? (<>/ <Link className=\"generate-csr\" target=\"_blank\" to={`/generate/ssl/?domain=${props.domain}`}>{i18n['Generate CSR']}</Link></>)\n : ''\n } />\n\n <TextArea\n id=\"ssl-key\"\n name=\"v_ssl_key\"\n disabled={letsEncrypt}\n defaultValue={props.sslKey}\n title={i18n['SSL Key']} />\n\n <TextArea\n id=\"ssl-key\"\n name=\"v_ssl_key\"\n disabled={letsEncrypt}\n defaultValue={props.sslCertificateAuthority}\n title={i18n['SSL Certificate Authority / Intermediate']}\n optionalTitle={`( ${i18n['optional']} )`} />\n\n <div className=\"additional-info\">\n {\n props.sslSubject.length > 0\n && (\n <div>\n <span>{i18n['SUBJECT']}:</span>\n <span>{props.sslSubject}</span>\n </div>\n )\n }\n\n {\n props.sslAliases.length > 0\n && (\n <div>\n <span>{i18n['ALIASES']}:</span>\n <span>{props.sslAliases}</span>\n </div>\n )\n }\n\n {\n props.sslNotBefore.length > 0\n && (\n <div>\n <span>{i18n['NOT_BEFORE']}:</span>\n <span>{props.sslNotBefore}</span>\n </div>\n )\n }\n\n {\n props.sslNotAfter.length > 0\n && (\n <div>\n <span>{i18n['NOT_AFTER']}:</span>\n <span>{props.sslNotAfter}</span>\n </div>\n )\n }\n\n {\n props.sslSignature.length > 0\n && (\n <div>\n <span>{i18n['SIGNATURE']}:</span>\n <span>{props.sslSignature}</span>\n </div>\n )\n }\n\n {\n props.sslPubKey.length > 0\n && (\n <div>\n <span>{i18n['PUB_KEY']}:</span>\n <span>{props.sslPubKey}</span>\n </div>\n )\n }\n\n {\n props.sslIssuer.length > 0\n && (\n <div>\n <span>{i18n['ISSUER']}:</span>\n <span>{props.sslIssuer}</span>\n </div>\n )\n }\n </div>\n\n <br />\n <br />\n </div>\n );\n}\n\nexport default SslSupport;","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport { updateWebDomain, getDomainInfo } from '../../../ControlPanelService/Web';\nimport Password from '../../../components/ControlPanel/AddItemLayout/Form/Password/Password';\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport AdditionalFtpWrapper from '../Add/AdditionalFtpWrapper/AdditionalFtpWrapper';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport SslSupport from './SslSupport/SslSupport';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditWeb.scss';\nimport TextArea from '../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst EditWeb = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n domain: '',\n webStat: '',\n sslSupport: false,\n letsEncrypt: false,\n additionalFtp: false,\n statAuth: false,\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n const { domain } = queryParams;\n\n dispatch(addActiveElement('/list/web/'));\n dispatch(removeFocusedElement());\n\n if (domain) {\n setState({ ...state, loading: true });\n\n getDomainInfo(domain)\n .then(response => {\n setState({\n ...state,\n domain,\n webStat: response.data.v_stats ? response.data.v_stats : 'none',\n sslSupport: response.data.ssl === 'yes',\n letsEncrypt: response.data.letsencrypt === 'yes',\n data: response.data,\n additionalFtp: !!response.data.ftp_user,\n statAuth: response.data.stats_user,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedDomain = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedDomain[name] = value;\n }\n\n updatedDomain['v_domain'] = state.domain;\n\n if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateWebDomain(updatedDomain, state.domain)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const formatData = object => {\n let result = [];\n\n for (let i in object) {\n result.push(i);\n }\n\n return result;\n }\n\n const onChangeSslSupport = checked => {\n setState({ ...state, sslSupport: checked });\n }\n\n const onChangeWebStats = webStat => {\n setState({ ...state, webStat });\n }\n\n const onChangeStatisticsAuth = statAuth => {\n setState({ ...state, statAuth });\n }\n\n const onChangeAdditionalFtp = additionalFtp => {\n setState({ ...state, additionalFtp });\n }\n\n return (\n <div className=\"edit-template edit-web\">\n <Helmet>\n <title>{`Vesta - ${i18n.WEB}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing Domain']}</div>\n <div className=\"error\"><span className=\"error-message\">{state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}</span></div>\n <div className=\"success\">\n <span className=\"ok-message\">{state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span> </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"add-web\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextInput id=\"domain\" name=\"v_domain\" title={i18n['Domain']} value={state.domain} disabled />\n\n <SelectInput\n options={formatData(state.data.ips)}\n selected={state.data.ip}\n name=\"v_ip\"\n id=\"ip\"\n title={i18n['IP Address']} />\n\n <TextArea\n id=\"proxy-aliases\"\n name=\"v_aliases\"\n title={i18n['Aliases']}\n value={state.data.aliases} />\n\n <SelectInput\n options={state.data.templates}\n selected={state.data.template}\n name=\"v_template\"\n id=\"web-template\"\n optionalTitle={state.data.web_system}\n title={i18n['Web Template']} />\n\n {\n state.data.web_backend\n && (\n <SelectInput\n options={state.data.backend_templates}\n selected={state.data.backend_template || 'default'}\n name=\"v_backend_template\"\n id=\"backend-template\"\n optionalTitle={state.data.web_backend}\n title={i18n['Backend Template']} />\n )\n }\n\n {\n state.data.proxy_system\n && (\n <SelectInput\n options={state.data.proxy_templates}\n selected={state.data.proxy_template || 'default'}\n optionalTitle={state.data.proxy_system}\n name=\"v_proxy_template\"\n id=\"proxy_template\"\n title={i18n['Proxy Template']} />\n )\n }\n\n <TextArea\n id=\"proxy-extensions\"\n name=\"v_proxy_ext\"\n title={i18n['Proxy Extensions']}\n defaultValue={state.data.proxy_ext} />\n\n <Checkbox\n onChange={onChangeSslSupport}\n name=\"v_shared\"\n id=\"ssl-support\"\n title={i18n['SSL Support'] ?? 'SSL Support'}\n defaultChecked={state.sslSupport} />\n\n {\n state.sslSupport\n && (\n <SslSupport\n sslSubject={state.data.ssl_subject}\n sslAliases={state.data.ssl_aliases}\n sslNotBefore={state.data.ssl_not_before}\n sslNotAfter={state.data.ssl_not_after}\n sslSignature={state.data.ssl_signature}\n sslPubKey={state.data.ssl_pub_key}\n sslIssuer={state.data.ssl_issuer}\n sslCertificate={state.data.ssl_crt}\n sslKey={state.data.key}\n sslCertificateAuthority={state.data.ca}\n domain={state.domain}\n sslHome={state.data.ssl_home}\n letsEncrypt={state.letsEncrypt}\n />\n )\n }\n\n <SelectInput\n options={state.data.stats}\n selected={state.webStat}\n title={i18n['Web Statistics']}\n onChange={onChangeWebStats}\n name=\"v_stats\"\n id=\"stats\" />\n\n {\n state.webStat !== 'none' && (\n <div className=\"web-stat-additional\">\n <Checkbox\n onChange={onChangeStatisticsAuth}\n name=\"v_stats_auth\"\n id=\"stat-auth\"\n defaultChecked={state.data.stats_user}\n title={i18n['Statistics Authorization']} />\n\n {\n state.statAuth && (\n <>\n <TextInput id=\"domain\" name=\"v_stats_user\" title={i18n['Username']} value={state.data.stats_user} />\n\n <Password name='v_stats_password' />\n </>\n )\n }\n </div>\n )\n }\n\n <Checkbox\n onChange={onChangeAdditionalFtp}\n name=\"v_ftp\"\n id=\"add-ftp\"\n checked={state.additionalFtp}\n title={i18n['Additional FTP Account']} />\n\n <AdditionalFtpWrapper\n checked={state.additionalFtp}\n prefixI18N={state.data.prefixI18N}\n ftps={state.data.ftp_users}\n ftpUserPrePath={state.data.ftp_user_prepath}\n unCheckAdditionalFtpBox={() => onChangeAdditionalFtp(false)} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/web/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditWeb;\n","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../../actions/MainNavigation/mainNavigationActions\";\nimport TextInput from '../../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport { getServiceInfo, updateService } from 'src/ControlPanelService/Server';\nimport AddItemLayout from '../../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../../components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { Link, useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './EditPhp.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst EditPhp = ({ serviceName = '' }) => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n basicOptions: true,\n advancedOptions: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n if (!serviceName) {\n history.push('/list/server');\n }\n\n setState({ ...state, loading: true });\n\n getServiceInfo(serviceName)\n .then(response => {\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedService = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedService[name] = value;\n }\n\n if (Object.keys(updatedService).length !== 0 && updatedService.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedService, `/${serviceName}`)\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const toggleOptions = () => {\n setState({\n ...state,\n advancedOptions: !state.advancedOptions,\n basicOptions: !state.basicOptions\n });\n }\n\n return (\n <div className=\"edit-template edit-php\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\"><Link to={`/edit/server/${state.data.web_system}`}>{i18n['Configuring Server']} / {state.data.web_system}</Link></div>\n <div className=\"link\"><Link to=\"/edit/server/php\">{i18n['Configure']} php.ini</Link></div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-mail\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n {\n !state.basicOptions && (\n <button type=\"button\" onClick={() => toggleOptions()}>\n {i18n['Basic options']}\n {state.basicOptions ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n )\n }\n\n {\n state.basicOptions && (\n <>\n <TextInput\n id=\"max_execution_time\"\n title=\"max_execution_time\"\n name=\"v_max_execution_time\"\n value={parseInt(state.data.max_execution_time)} />\n\n <TextInput\n id=\"worker_connections\"\n title=\"worker_connections\"\n name=\"v_worker_connections\"\n value={parseInt(state.data.max_input_time)} />\n\n <TextInput\n id=\"memory_limit\"\n title=\"memory_limit\"\n name=\"v_memory_limit\"\n value={parseInt(state.data.memory_limit)} />\n\n <TextInput\n id=\"error_reporting\"\n title=\"error_reporting\"\n name=\"v_error_reporting\"\n value={state.data.error_reporting} />\n\n <TextInput\n id=\"display_errors\"\n title=\"display_errors\"\n name=\"v_display_errors\"\n value={state.data.display_errors} />\n\n <TextInput\n id=\"post_max_size\"\n title=\"post_max_size\"\n name=\"v_post_max_size\"\n value={state.data.post_max_size} />\n\n <TextInput\n id=\"upload_max_filesize\"\n title=\"upload_max_filesize\"\n name=\"v_upload_max_filesize\"\n value={state.data.upload_max_filesize} />\n </>\n )\n }\n\n {\n !state.advancedOptions && (\n <button type=\"button\" onClick={() => toggleOptions()}>\n {i18n['Advanced options']}\n {state.advancedOptions ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n )\n }\n\n <br />\n <br />\n\n {\n state.advancedOptions && (\n <>\n <TextArea\n defaultValue={state.data.config}\n title={state.data.config_path}\n name=\"v_config\"\n id=\"v_config\"\n rows=\"25\" />\n\n <br />\n\n <Checkbox\n title={i18n['restart']}\n defaultChecked={true}\n name=\"v_restart\"\n id=\"restart\" />\n </>\n )\n }\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditPhp;","import React from 'react';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport Container from '../ControlPanel/Container/Container';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst Database = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(data.NAME, 'add');\n } else {\n props.toggleFav(data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(data.NAME);\n }\n\n const handleSuspend = () => {\n let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend';\n props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/db/index.php?database=${data.NAME}`);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/db/index.php?database=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n date={data.DATE}\n toggleFav={toggleFav}\n checkItem={checkItem}\n starred={data.STARRED}\n focused={data.FOCUSED}\n checked={data.isChecked}\n suspended={data.SUSPENDED === 'yes'}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.DATABASE}</div>\n <br />\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"disk\">{i18n.Disk}: <span><span className=\"stat\">{data.U_DISK}</span>{i18n.mb}</span></div>\n </Container>\n <Container className=\"c-2\">\n <div>{i18n.User}: <span className=\"stat\">{data.DBUSER}</span></div>\n <div>{i18n.Charset}: <span className=\"stat\">{data.CHARSET}</span></div>\n </Container>\n <Container className=\"c-3\">\n <div>{i18n.Host}: <span className=\"stat\">{data.HOST}</span></div>\n <div>{i18n.Type}: <span className=\"stat\">{data.TYPE}</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <Link className=\"link-edit\" to={`/edit/db/?database=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button\n className=\"link-gray\"\n onClick={() => handleSuspend()}>\n {i18n[data.suspend_action]}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default Database;","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport { bulkAction, getDatabaseList, handleAction } from '../../ControlPanelService/Db';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport Database from '../../components/Database/Database';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Spinner from '../../components/Spinner/Spinner';\nimport './Databases.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Databases = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: '',\n });\n const [state, setState] = useState({\n databases: [],\n dbFav: [],\n toggledAll: false,\n dbAdmin: '',\n dbAdminLink: '',\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/db/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.databases]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = databases => {\n databases[0]['FOCUSED'] = databases[0]['NAME'];\n setState({ ...state, databases });\n dispatch(addControlPanelContentFocusedElement(databases[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let databases = [...state.databases];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(databases);\n return;\n }\n\n let focusedElementPosition = databases.findIndex(database => database.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== databases.length - 1) {\n let nextFocusedElement = databases[focusedElementPosition + 1];\n databases[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, databases });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let databases = [...state.databases];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(databases);\n return;\n }\n\n let focusedElementPosition = databases.findIndex(database => database.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = databases[focusedElementPosition - 1];\n databases[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, databases });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return handleEdit();\n case 83: return handleSuspend();\n default: break;\n }\n }\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/database?domain=${controlPanelFocusedElement}`);\n }\n\n const handleSuspend = () => {\n const { databases } = state;\n let currentDatabaseData = databases.filter(database => database.NAME === controlPanelFocusedElement)[0];\n let suspendedStatus = currentDatabaseData.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n\n displayModal(currentDatabaseData.suspend_conf, `/api/v1/${suspendedStatus}/database/index.php?domain=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { databases } = state;\n let currentDatabaseData = databases.filter(database => database.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentDatabaseData.delete_conf, `/api/v1/delete/database/index.php?domain=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getDatabaseList()\n .then(result => {\n setState({\n ...state,\n databases: reformatData(result.data.data),\n dbAdmin: result.data.db_admin,\n dbAdminLink: result.data.db_admin_link,\n dbFav: result.data.dbFav,\n selection: [],\n toggledAll: false,\n totalAmount: result.data.totalAmount\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let databases = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n databases.push(data[i]);\n }\n\n return databases;\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const databases = () => {\n const { databases } = state;\n const result = [];\n const dbFav = { ...state.dbFav };\n\n databases.forEach(database => {\n database.FOCUSED = controlPanelFocusedElement === database.NAME;\n\n if (dbFav[database.NAME]) {\n database.STARRED = dbFav[database.NAME];\n } else {\n database.STARRED = 0;\n }\n\n result.push(database);\n });\n\n let sortedResult = sortArray(result);\n\n return sortedResult.map((item, index) => {\n return <Database data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, databases } = state;\n let duplicate = [...selection];\n let dbDuplicate = databases;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = dbDuplicate.findIndex(db => db.NAME === name);\n dbDuplicate[incomingItem].isChecked = !dbDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, databases: dbDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortingColumn = sortBy(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Date, Database, Disk, User, Host, Starred } = i18n;\n\n switch (sorting) {\n case Date: return 'DATE';\n case Database: return 'DATABASE';\n case Disk: return 'U_DISK';\n case User: return 'DBUSER';\n case Host: return 'HOST';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n const { dbFav } = state;\n let dbFavDuplicate = dbFav;\n\n if (type === 'add') {\n dbFavDuplicate[value] = 1;\n\n addFavorite(value, 'db')\n .then(() => {\n setState({ ...state, dbFav: dbFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n dbFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'db')\n .then(() => {\n setState({ ...state, dbFav: dbFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const databasesDuplicate = [...state.databases];\n\n if (toggled) {\n let dbNames = []\n\n let databases = databasesDuplicate.map(database => {\n dbNames.push(database.NAME);\n database.isChecked = true;\n return database;\n });\n\n setState({ ...state, databases, selection: dbNames, toggledAll: toggled });\n } else {\n let databases = databasesDuplicate.map(database => {\n database.isChecked = false;\n return database;\n });\n\n setState({ ...state, databases, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setLoading(true);\n bulkAction(action, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: true,\n text: text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n return (\n <div className=\"databases\">\n <Helmet>\n <title>{`Vesta - ${i18n.DB}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name=\"Add Database\" href=\"/add/db\" showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <a href={state.dbAdminLink} className=\"button-extra\" type=\"submit\" target=\"_blank\" rel=\"noopener noreferrer\">{state.dbAdmin}</a>\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='dbList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"dbList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"mails-wrapper\">\n {loading\n ? <Spinner />\n : (<>\n {databases()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)}\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Databases;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport { Link } from 'react-router-dom';\nimport './Firewall.scss';\nimport { useSelector } from 'react-redux';\n\nconst Firewall = ({ data, ...props }) => {\n const { i18n } = useSelector(state => state.session);\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(data.NAME, 'add');\n } else {\n props.toggleFav(data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(data.NAME);\n }\n\n const handleSuspend = () => {\n let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/firewall/index.php?rule=${data.NAME}`);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/firewall/index.php?rule=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n date={data.DATE}\n starred={data.STARRED}\n focused={data.FOCUSED}\n checked={data.isChecked}\n toggleFav={toggleFav}\n checkItem={checkItem}\n suspended={data.SUSPENDED === 'yes'}>\n\n <Container className=\"cron-jobs-list r-col w-85\">\n <div className=\"stats\">\n <Container className=\"cron-col\">\n <div><span className=\"stat\">{data.ACTION}</span></div>\n </Container>\n <Container className=\"cron-col\">\n <div><span><span className=\"stat\">{data.PROTOCOL}</span> / {data.COMMENT}</span></div>\n </Container>\n <Container className=\"cron-col\">\n <div></div>\n </Container>\n <Container className=\"cron-col\">\n <div><span className=\"stat\">{data.PORT}</span></div>\n </Container>\n <Container className=\"cron-col\">\n <div><span className=\"stat\">{data.IP}</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <Link className=\"link-edit\" to={`/edit/firewall/?rule=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button\n className=\"link-gray\"\n onClick={() => handleSuspend()}>\n {i18n[data.suspend_action]}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default Firewall;\n","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport { bulkAction, getFirewallList, handleAction } from '../../ControlPanelService/Firewalls';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport Firewall from '../../components/Firewall/Firewall';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport './Firewalls.scss';\nimport { Helmet } from 'react-helmet';\nimport { Link } from 'react-router-dom';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Firewalls = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n const [state, setState] = useState({\n firewalls: [],\n firewallFav: [],\n selection: [],\n firewallExtension: '',\n toggledAll: false,\n sorting: i18n.Action,\n order: \"descending\",\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/firewall/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.firewalls]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = firewalls => {\n firewalls[0]['FOCUSED'] = firewalls[0]['NAME'];\n setState({ ...state, firewalls });\n dispatch(addControlPanelContentFocusedElement(firewalls[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let firewalls = [...state.firewalls];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(firewalls);\n return;\n }\n\n let focusedElementPosition = firewalls.findIndex(firewall => firewall.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== firewalls.length - 1) {\n let nextFocusedElement = firewalls[focusedElementPosition + 1];\n firewalls[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, firewalls });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let firewalls = [...state.firewalls];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(firewalls);\n return;\n }\n\n let focusedElementPosition = firewalls.findIndex(firewall => firewall.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = firewalls[focusedElementPosition - 1];\n firewalls[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, firewalls });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return handleEdit();\n case 83: return handleSuspend();\n default: break;\n }\n }\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/firewall?rule=${controlPanelFocusedElement}`);\n }\n\n const handleSuspend = () => {\n const { firewalls } = state;\n let currentFirewallData = firewalls.filter(firewall => firewall.NAME === controlPanelFocusedElement)[0];\n let suspendedStatus = currentFirewallData.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n\n displayModal(currentFirewallData.suspend_conf, `/api/v1/${suspendedStatus}/firewall/index.php?rule=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { firewalls } = state;\n let currentFirewallData = firewalls.filter(firewall => firewall.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentFirewallData.delete_conf, `/api/v1/delete/firewall/index.php?rule=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getFirewallList()\n .then(result => {\n setState({\n ...state,\n firewalls: reformatData(result.data.data),\n firewallFav: result.data.firewallFav,\n selection: [],\n firewallExtension: result.data.firewallExtension,\n totalAmount: result.data.totalAmount,\n toggledAll: false\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let firewalls = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n firewalls.push(data[i]);\n }\n\n return firewalls;\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const firewalls = () => {\n const firewallFav = { ...state.firewallFav };\n let firewalls = [...state.firewalls];\n\n firewalls.forEach(firewall => {\n firewall.FOCUSED = controlPanelFocusedElement === firewall.NAME;\n\n if (firewallFav[firewall.NAME]) {\n firewall.STARRED = firewallFav[firewall.NAME];\n } else {\n firewall.STARRED = 0;\n }\n });\n\n let sortedResult = sortArray(firewalls);\n\n return sortedResult.map((item, index) => {\n return <Firewall data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, firewalls } = state;\n let duplicate = [...selection];\n let firewallsDuplicate = firewalls;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = firewallsDuplicate.findIndex(db => db.NAME === name);\n firewallsDuplicate[incomingItem].isChecked = !firewallsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, firewalls: firewallsDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortingColumn = sortBy(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Action, Protocol, Port, Comment, Starred } = i18n;\n\n switch (sorting) {\n case Action: return 'ACTION';\n case Protocol: return 'PROTOCOL';\n case Port: return 'PORT';\n case i18n['IP address']: return 'IP';\n case Comment: return 'COMMENT';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n const { firewallFav } = state;\n let firewallFavDuplicate = firewallFav;\n\n if (type === 'add') {\n firewallFavDuplicate[value] = 1;\n\n addFavorite(value, 'firewall')\n .then(() => {\n setState({ ...state, firewallFav: firewallFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n firewallFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'firewall')\n .then(() => {\n setState({ ...state, firewallFav: firewallFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n if (toggled) {\n let firewallNames = [];\n\n let firewalls = state.firewalls.map(firewall => {\n firewallNames.push(firewall.NAME);\n firewall.isChecked = true;\n return firewall;\n });\n\n setState({ ...state, firewalls, selection: firewallNames, toggledAll: toggled });\n } else {\n let firewalls = state.firewalls.map(firewall => {\n firewall.isChecked = false;\n return firewall;\n });\n\n setState({ ...state, firewalls, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setLoading(true);\n bulkAction(action, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, actionUrl) => {\n setModal({ ...modal, visible: !modal.visible, text, actionUrl });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({ ...modal, visible: !modal.visible, text: '', actionUrl: '' });\n }\n\n return (\n <div className=\"firewalls\">\n <Helmet>\n <title>{`Vesta - ${i18n.FIREWALL}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton href=\"/add/firewall/\" name={i18n['Add Rule']} showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Link to='/list/firewall/banlist/' className=\"button-extra\" type=\"submit\">{i18n['list fail2ban']}</Link>\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='firewallList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"firewallList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"firewalls-wrapper\">\n {loading\n ? <Spinner />\n : (<>\n {firewalls()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)}\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Firewalls;\n","import axios from 'axios';\nimport { getAuthToken } from 'src/utils/token';\n\nconst BASE_URL = window.location.origin;\nconst usersUri = '/api/v1/list/user/index.php';\nconst addUsersUri = '/api/v1/add/user/index.php';\nconst userInfoUri = '/api/v1/edit/user/index.php';\nconst updateUserUri = '/api/v1/edit/user/index.php';\n\nexport const getUsersList = () => {\n return axios.get(BASE_URL + usersUri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const bulkAction = (action, selectedUsers) => {\n const formData = new FormData();\n formData.append(\"token\", getAuthToken());\n formData.append(\"action\", action);\n\n selectedUsers.forEach(user => {\n formData.append(\"user[]\", user);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/user/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const addUser = data => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n formDataObject.append(\"token\", getAuthToken());\n formDataObject.append(\"ok\", \"Add\");\n\n return axios.post(BASE_URL + addUsersUri, formDataObject);\n}\n\nexport const getUserInfo = username => {\n return axios.get(BASE_URL + userInfoUri, {\n params: {\n user: username,\n token: getAuthToken()\n }\n });\n}\n\nexport const updateUser = (data, user) => {\n let formDataObject = new FormData();\n\n for (let key in data) {\n formDataObject.append(key, data[key]);\n }\n\n return axios.post(BASE_URL + updateUserUri, formDataObject, {\n params: {\n user,\n token: getAuthToken()\n }\n });\n}\n","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport Password from '../../../components/ControlPanel/AddItemLayout/Form/Password/Password';\nimport SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport NameServers from '../../ControlPanel/AddItemLayout/Form/NameServers/NameServers';\nimport TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport { updateUser, getUserInfo } from '../../../ControlPanelService/Users';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QS from 'qs';\n\nimport './EditUser.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst EditUser = props => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n username: '',\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });\n const { user } = queryParams;\n\n dispatch(addActiveElement('/list/user/'));\n dispatch(removeFocusedElement());\n\n if (user) {\n setState({ ...state, loading: true });\n\n getUserInfo(user)\n .then(response => {\n setState({\n ...state,\n username: user,\n data: response.data, errorMessage: response.data['error_msg'], okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedUser = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedUser[name] = value;\n }\n\n updatedUser['v_username'] = state.username;\n\n if (Object.keys(updatedUser).length !== 0 && updatedUser.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateUser(updatedUser, state.username)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const convertObjectOfObjectsToArrayOfObjects = object => {\n let result = [];\n\n for (let i in object) {\n result.push(i);\n }\n\n return result;\n }\n\n return (\n <div className=\"edit-template edit-user\">\n <Helmet>\n <title>{`Vesta - ${i18n.USER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Editing User']}</div>\n <div className=\"error\"><span className=\"error-message\">{state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}</span></div>\n <div className=\"success\">\n <span className=\"ok-message\">{state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span> </span>\n </div>\n </Toolbar>\n <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"add-user\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextInput id=\"username\" name=\"v_user\" title={i18n['Username']} value={state.username} disabled />\n\n <Password name='v_password' />\n\n <TextInput id=\"email\" name=\"v_email\" title={i18n['Email']} value={state.data.email} />\n\n <SelectInput\n options={convertObjectOfObjectsToArrayOfObjects(state.data.packages)}\n selected={state.data.package}\n name=\"v_package\"\n id=\"packages\"\n title={i18n['Package']} />\n\n <SelectInput\n options={state.data.languages}\n selected={state.data.language}\n name=\"v_language\"\n id=\"languages\"\n title={i18n['Language']} />\n\n <TextInput id=\"first-name\" name=\"v_fname\" title={i18n['First Name']} value={state.data.fname} />\n\n <TextInput id=\"last-name\" name=\"v_lname\" title={i18n['Last Name']} value={state.data.lname} />\n\n <SelectInput\n options={state.data.shells}\n selected={state.data.shell}\n name=\"v_shell\"\n id=\"shell\"\n title={i18n['SSH Access']} />\n\n <NameServers usersNS={state.data.nameservers} />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/user/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default EditUser;","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../../actions/MainNavigation/mainNavigationActions\";\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport AddItemLayout from '../../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { getServiceInfo, updateService } from 'src/ControlPanelService/Server';\nimport Spinner from '../../../../components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './Bind9.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst Bind9 = () => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getServiceInfo('bind9')\n .then(response => {\n if (response.data.config.includes('Error')) {\n history.push('/list/server');\n }\n\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedService = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedService[name] = value;\n }\n\n if (Object.keys(updatedService).length !== 0 && updatedService.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedService, '/bind9')\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template edit-bind9\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">\n {i18n['Configuring Server']} / {state.data.service_name}\n </div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-bind9\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <TextArea\n defaultValue={state.data.options}\n title={state.data.options_path}\n name=\"v_options\"\n id=\"v_options\"\n rows=\"10\" />\n\n <br />\n\n <TextArea\n defaultValue={state.data.config}\n title={state.data.config_path}\n name=\"v_config\"\n id=\"v_config\"\n rows=\"10\" />\n\n <br />\n\n <Checkbox\n title={i18n['restart']}\n defaultChecked={true}\n name=\"v_restart\"\n id=\"restart\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div >\n );\n}\n\nexport default Bind9;","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../../actions/MainNavigation/mainNavigationActions\";\nimport TextInput from '../../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Checkbox from '../../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';\nimport TextArea from '../../../ControlPanel/AddItemLayout/Form/TextArea/TextArea';\nimport { getServiceInfo, updateService } from 'src/ControlPanelService/Server';\nimport AddItemLayout from '../../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from '../../../../components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './Mysql.scss';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst Mysql = ({ serviceName = '' }) => {\n const token = localStorage.getItem(\"token\");\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n data: {},\n loading: false,\n basicOptions: true,\n advancedOptions: false,\n errorMessage: '',\n okMessage: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n\n if (!serviceName) {\n history.push('/list/server');\n }\n\n setState({ ...state, loading: true });\n\n getServiceInfo('mysql')\n .then(response => {\n if (response.data.config.includes('Error')) {\n history.push('/list/server');\n }\n\n setState({\n ...state,\n data: response.data,\n errorMessage: response.data['error_msg'],\n okMessage: response.data['ok_msg'],\n loading: false\n });\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let updatedService = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n updatedService[name] = value;\n }\n\n if (Object.keys(updatedService).length !== 0 && updatedService.constructor === Object) {\n setState({ ...state, loading: true });\n\n updateService(updatedService, `/${serviceName}`)\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const toggleOptions = () => {\n setState({\n ...state,\n advancedOptions: !state.advancedOptions,\n basicOptions: !state.basicOptions\n });\n }\n\n return (\n <div className=\"edit-template edit-mysql\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Configuring Server']} / {state.data.service_name}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.data.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}\n </span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"edit-mysql\">\n <input type=\"hidden\" name=\"save\" value=\"save\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n {\n !state.basicOptions && (\n <button type=\"button\" onClick={() => toggleOptions()}>\n {i18n['Basic options']}\n {state.basicOptions ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n )\n }\n\n {\n state.basicOptions && (\n <>\n <TextInput\n id=\"max_connections\"\n title=\"max_connections\"\n name=\"v_max_connections\"\n value={state.data.max_connections} />\n\n <TextInput\n id=\"v_max_user_connections\"\n title=\"v_max_user_connections\"\n name=\"v_max_user_connections\"\n value={state.data.max_user_connections} />\n\n <TextInput\n id=\"v_wait_timeout\"\n title=\"v_wait_timeout\"\n name=\"v_wait_timeout\"\n value={state.data.wait_timeout} />\n\n <TextInput\n id=\"v_interactive_timeout\"\n title=\"v_interactive_timeout\"\n name=\"v_interactive_timeout\"\n value={state.data.interactive_timeout} />\n\n <TextInput\n id=\"v_display_errors\"\n title=\"v_display_errors\"\n name=\"v_display_errors\"\n value={state.data.max_allowed_packet} />\n </>\n )\n }\n\n {\n !state.advancedOptions && (\n <button type=\"button\" onClick={() => toggleOptions()}>\n {i18n['Advanced options']}\n {state.advancedOptions ? <FontAwesomeIcon icon=\"caret-up\" /> : <FontAwesomeIcon icon=\"caret-down\" />}\n </button>\n )\n }\n\n <br />\n <br />\n\n {\n state.advancedOptions && (\n <>\n <TextArea\n defaultValue={state.data.config}\n title={state.data.config_path}\n name=\"v_config\"\n id=\"v_config\"\n rows=\"25\" />\n\n <br />\n\n <Checkbox\n title={i18n['restart']}\n defaultChecked={true}\n name=\"v_restart\"\n id=\"restart\" />\n </>\n )\n }\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Save}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/server/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default Mysql;","import axios from \"axios\";\n\nconst BASE_URL = window.location.origin;\nconst userNSApiUri = '/api/v1/list-user-ns.php';\n\nexport const getUserNS = () => {\n return axios.get(BASE_URL + userNSApiUri);\n}","import React, { useEffect, useState } from 'react';\nimport dayjs from 'dayjs';\n\nimport './AdvancedOptions.scss';\nimport { useSelector } from 'react-redux';\n\nconst AdvancedOptions = props => {\n const { i18n } = useSelector(state => state.session);\n const [state, setState] = useState({\n nameServersAmount: [],\n userNS: props.userNS\n });\n\n useEffect(() => {\n if (props.userNS.length) {\n let initNameServersAmount = props.userNS.map((userNS, index) => index + 1);\n setState({ ...state, nameServersAmount: initNameServersAmount });\n }\n }, []);\n\n const renderNameServerInputs = () => {\n return state.nameServersAmount.map((nameServer, index) => {\n return (\n <div className=\"name-server-input-wrapper\" key={index}>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`v_ns${nameServer}`}\n defaultValue={state.userNS[index] || ''}\n name={`v_ns${nameServer}`} />\n <button\n type=\"button\"\n className={nameServer < 3 ? 'hide' : 'show delete'}\n onClick={() => onDeleteNameServer(nameServer)}>\n {i18n.delete ?? 'Delete'}\n </button>\n </div>\n );\n });\n }\n\n const onDeleteNameServer = index => {\n let nameServersDuplicate = [...state.nameServersAmount];\n\n nameServersDuplicate.splice(index - 1, 1);\n\n setState({ ...state, nameServersAmount: nameServersDuplicate });\n }\n\n const addNameServer = () => {\n let nameServersLength = state.nameServersAmount.length;\n let nameServersDuplicate = [...state.nameServersAmount];\n\n nameServersDuplicate.push(nameServersLength + 1);\n\n setState({ ...state, nameServersAmount: nameServersDuplicate });\n }\n\n const addNameServerClassName = () => {\n return state.nameServersAmount.length === 8 ? 'hide' : 'show optional';\n }\n\n const getCurrentDatePlusYear = () => {\n let currentDatePlusYear = dayjs().add(1, 'year').format('YYYY-MM-DD');\n return currentDatePlusYear;\n }\n\n return (\n <div>\n <div className=\"form-group exp-date\">\n <label htmlFor=\"exp_date\">\n {i18n['Expiration Date'] ?? 'Expiration Date'}\n <span className=\"optional\">({i18n['YYYY-MM-DD'] ?? 'YYYY-MM-DD'})</span>\n </label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"exp_date\"\n required\n defaultValue={getCurrentDatePlusYear()}\n name=\"v_exp\" />\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"name_servers\">TTL</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"name_servers\"\n required\n defaultValue=\"14400\"\n name=\"v_ttl\" />\n </div>\n\n <div className=\"form-group name-servers\">\n <label htmlFor=\"v_ns1\">{i18n['Name servers'] ?? 'Name servers'}</label>\n {renderNameServerInputs()}\n </div>\n\n <button\n type=\"button\"\n className={addNameServerClassName()}\n onClick={() => addNameServer()}>\n {i18n['Add one more Name Server'] ?? 'Add one more Name Server'}\n </button>\n </div>\n );\n}\n\nexport default AdvancedOptions;","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { getUserNS } from '../../../ControlPanelService/UserNS';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddDomainNameSystem.scss';\nimport AdvancedOptions from './AdvancedOptions/AdvancedOptions';\nimport { addDomainNameSystem } from '../../../ControlPanelService/Dns';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst AddDomainNameSystem = props => {\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const token = localStorage.getItem(\"token\");\n const history = useHistory();\n const [state, setState] = useState({\n loading: false,\n showAdvancedOptions: false,\n okMessage: '',\n domain: '',\n errorMessage: '',\n userNS: []\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/dns/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n getUserNS()\n .then(result => {\n if (result.data.length) {\n setState({ ...state, userNS: result.data, loading: false });\n }\n })\n .catch(err => console.error(err));\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let domainNameSystem = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n domainNameSystem[name] = value;\n }\n\n if (Object.keys(domainNameSystem).length !== 0 && domainNameSystem.constructor === Object) {\n setState({ ...state, loading: true });\n addDomainNameSystem(domainNameSystem)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const renderAdvancedOptions = () => {\n if (state.showAdvancedOptions) {\n return <AdvancedOptions prefixI18N={state.prefixI18N} userNS={state.userNS} domain={state.domain} webStats={state.webStats} />;\n }\n }\n\n const showAdvancedOption = () => {\n setState({ ...state, showAdvancedOptions: !state.showAdvancedOptions });\n }\n\n return (\n <div className=\"edit-template add-dns\">\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding DNS Domain'] ?? 'Adding DNS Domain'}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <input type=\"hidden\" name=\"ok\" value=\"add\" />\n <input type=\"hidden\" name=\"token\" value={token} />\n\n <div className=\"form-group\">\n <label htmlFor=\"domain\">{i18n.Domain ?? 'Domain'}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"domain\"\n required\n name=\"v_domain\" />\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"ip_address\">{i18n['IP address'] ?? 'IP address'}</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"ip_address\"\n required\n name=\"v_ip\" />\n </div>\n\n <div className=\"form-group advanced-options-button\">\n <button type=\"button\" onClick={() => showAdvancedOption()}>\n {i18n['Advanced options'] ?? 'Advanced options'}\n {state.showAdvancedOptions ? <FontAwesomeIcon icon=\"caret-down\" /> : <FontAwesomeIcon icon=\"caret-up\" />}\n </button>\n </div>\n\n {renderAdvancedOptions()}\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add ?? 'Add'}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/dns/')}>{i18n.Back ?? 'Back'}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddDomainNameSystem;","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { addDomainNameSystemRecord } from '../../../ControlPanelService/Dns';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from '../../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddDNSRecord.scss'\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nexport default function AddDNSRecord(props) {\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const token = localStorage.getItem(\"token\");\n const history = useHistory();\n const [state, setState] = useState({\n data: {},\n selectOptions: [\n 'A',\n 'AAAA',\n 'NS',\n 'CNAME',\n 'MX',\n 'TXT',\n 'SRV',\n 'DNSKEY',\n 'KEY',\n 'IPSECKEY',\n 'PTR',\n 'SPF',\n 'TLSA',\n 'CAA'\n ],\n loading: false,\n okMessage: '',\n errorMessage: '',\n });\n\n useEffect(() => {\n dispatch(addActiveElement(`/list/dns/`));\n dispatch(removeFocusedElement());\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newDnsRecord = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newDnsRecord[name] = value;\n }\n\n newDnsRecord['ok_rec'] = 'add';\n newDnsRecord['token'] = token;\n newDnsRecord['v_domain'] = props.domain;\n\n if (Object.keys(newDnsRecord).length !== 0 && newDnsRecord.constructor === Object) {\n setState({ ...state, loading: true });\n addDomainNameSystemRecord(newDnsRecord)\n .then(result => {\n if (result.status === 200) {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n return (\n <div className=\"edit-template add-dns-record\">\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding DNS Record']}</div>\n <div className=\"error\">\n <span className=\"error-message\">\n {state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n {state.errorMessage}</span>\n </div>\n <div className=\"success\">\n <span className=\"ok-message\">\n {state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''}\n <span>{HtmlParser(state.okMessage)}</span>\n </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> : (\n <form onSubmit={event => submitFormHandler(event)}>\n <TextInput\n title={i18n['Domain']}\n value={props.domain}\n name=\"v_domain\"\n id=\"domain\"\n disabled />\n\n <TextInput\n title={i18n['Record']}\n name=\"v_rec\"\n id=\"domain\" />\n\n <SelectInput\n options={state.selectOptions}\n title={i18n['Type']}\n name=\"v_type\"\n id=\"type\" />\n\n <TextInput\n title={i18n['IP or Value']}\n name=\"v_val\"\n id=\"val\" />\n\n <TextInput\n optionalTitle={`(${i18n['optional']})`}\n title={i18n['Priority']}\n name=\"v_priority\"\n id=\"priority\" />\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push(`/list/dns/?domain=${props.domain}`)}>{i18n.Back}</button>\n </div>\n </form>\n )}\n </AddItemLayout>\n </div>\n );\n}","import React, { useEffect, useState } from 'react';\nimport AddDomainNameSystem from 'src/components/DomainNameSystem/Add/AddDomainNameSystem';\nimport AddDNSRecord from 'src/components/DNSRecord/Add/AddDNSRecord';\nimport { useHistory } from 'react-router-dom';\nimport QueryString from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\n\nexport default function AddDNSWrapper() {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n const [isDnsRecord, setIsDnsRecord] = useState(false);\n\n useEffect(() => {\n if (parsedQueryString.domain) {\n setIsDnsRecord(true);\n } else {\n setIsDnsRecord(false);\n }\n }, [history.location]);\n\n return (\n <>\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n {\n isDnsRecord\n ? <AddDNSRecord domain={parsedQueryString.domain} />\n : <AddDomainNameSystem />\n }\n </>\n );\n}","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../../ControlPanel/Container/Container';\nimport ListItem from '../../ControlPanel/ListItem/ListItem';\nimport { Link } from 'react-router-dom';\n\nimport './RestoreSetting.scss';\nimport { useSelector } from 'react-redux';\n\nexport default function RestoreSetting({ data, checkItemFunc = () => { }, restoreSetting = () => { } }) {\n const { i18n } = useSelector(state => state.session);\n\n const displayBackupDetailName = type => {\n switch (type) {\n case 'WEB': return `WEB ${i18n['domain']}`;\n case 'MAIL': return `MAIL ${i18n['domain']}`;\n case 'DNS': return `DNS ${i18n['domain']}`;\n case 'CRON': return i18n['cron'];\n case 'UDIR': return i18n['user dir'];\n default: return i18n['domain'];\n }\n }\n\n const checkItem = () => {\n checkItemFunc(data.NAME);\n }\n\n return (\n <ListItem\n date={false}\n id={data.NAME}\n focused={data.FOCUSED}\n checked={data.isChecked}\n checkItem={checkItem}>\n\n <Container className=\"r-col w-85\">\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div style={{ textTransform: 'uppercase' }}>{displayBackupDetailName(data.type)}</div>\n </Container>\n <Container className=\"c-2\">\n <b>{data.name}</b>\n </Container>\n <Container className=\"c-3\"></Container>\n <Container className=\"c-4\"></Container>\n <Container className=\"c-5\"></Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <button className=\"link-restore\" onClick={() => restoreSetting(data.restoreLinkParams)}>\n {i18n['restore']}\n {data.FOCUSED ? <span className=\"shortcut-button\">R</span> : <FontAwesomeIcon icon=\"play\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from 'src/actions/ControlPanelContent/controlPanelContentActions';\nimport * as MainNavigation from 'src/actions/MainNavigation/mainNavigationActions';\nimport SearchInput from 'src/components/MainNav/Toolbar/SearchInput/SearchInput';\nimport LeftButton from 'src/components/MainNav/Toolbar/LeftButton/LeftButton';\nimport { getBackupDetails, restoreBackupSetting, bulkRestore } from 'src/ControlPanelService/Backup';\nimport Checkbox from 'src/components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from 'src/components/MainNav/Toolbar/Select/Select';\nimport Toolbar from 'src/components/MainNav/Toolbar/Toolbar';\nimport RestoreSetting from '../RestoreSetting/RestoreSetting';\nimport Modal from 'src/components/ControlPanel/Modal/Modal';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport { Link } from 'react-router-dom';\nimport { Helmet } from 'react-helmet';\n\nimport './BackupRestoreSettings.scss';\n\nexport default function BackupRestoreSettings(props) {\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [backupDetailsData, setBackupDetailsData] = useState([]);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n });\n const [state, setState] = useState({\n loading: false,\n backupDetails: [],\n toggledAll: false,\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(removeControlPanelContentFocusedElement());\n fetchData();\n\n return () => dispatch(removeControlPanelContentFocusedElement());\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, backupDetailsData]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 65) {\n handleRestore(`?backup=${props.backup}`);\n return;\n }\n\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = backupDetails => {\n backupDetails[0]['FOCUSED'] = backupDetails[0]['NAME'];\n setBackupDetailsData(backupDetails);\n dispatch(addControlPanelContentFocusedElement(backupDetails[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let backupDetails = [...backupDetailsData];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(backupDetails);\n return;\n }\n\n let nextFocusedElement = backupDetails[controlPanelFocusedElement + 1];\n\n if (nextFocusedElement) {\n backupDetails[controlPanelFocusedElement]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setBackupDetailsData(backupDetails);\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let backupDetails = [...backupDetailsData];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(backupDetails);\n return;\n }\n\n let nextFocusedElement = backupDetails[controlPanelFocusedElement - 1];\n\n if (nextFocusedElement) {\n backupDetails[controlPanelFocusedElement]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setBackupDetailsData(backupDetails);\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement > 0 || controlPanelFocusedElement !== '' && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 82: return handleRestore();\n default: break;\n }\n }\n }\n\n const handleRestore = params => {\n const paramsUri = params ? params : backupDetailsData[controlPanelFocusedElement].restoreLinkParams;\n\n restoreBackupSetting(paramsUri)\n .then(response => displayModal(response.data.message))\n .catch(err => console.error(err));\n }\n\n const fetchData = () => {\n setState({ ...state, loading: true });\n\n getBackupDetails(props.backup)\n .then(result => {\n reformatData(result.data.data[props.backup]);\n setState({\n ...state,\n totalAmount: result.data.totalAmount,\n selection: [],\n toggledAll: false,\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n\n const reformatData = data => {\n let reformattedData = ['WEB', 'DNS', 'MAIL', 'DB', 'UDIR', 'CRON'].reduce((acc, cat) => {\n data[cat].split(',').map(item => {\n acc.push({\n type: cat,\n name: item,\n restoreLinkParams: `?backup=${props.backup}&type=${cat.toLowerCase()}&object=${item}`\n });\n });\n\n return acc;\n }, []);\n\n setBackupDetailsData(reformattedData);\n }\n\n const listBackups = () => {\n const backupDetails = [...backupDetailsData];\n const result = [];\n\n backupDetails.forEach((backupDetail, index) => {\n backupDetail.NAME = index;\n backupDetail.FOCUSED = controlPanelFocusedElement === index;\n result.push(backupDetail);\n });\n\n return result.map((item, index) => {\n return <RestoreSetting data={item} key={index} checkItemFunc={name => checkItem(name)} restoreSetting={handleRestore} />;\n });\n }\n\n const checkItem = name => {\n const { selection } = state;\n let duplicate = [...selection];\n let backupDetailsDuplicate = [...backupDetailsData];\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = backupDetailsDuplicate.findIndex(backupDetail => backupDetail.NAME === name);\n backupDetailsDuplicate[incomingItem].isChecked = !backupDetailsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(backupDetailsDuplicate[name]['name'], 1);\n } else {\n duplicate.push(backupDetailsDuplicate[name]['name']);\n }\n\n setState({ ...state, selection: duplicate });\n setBackupDetailsData(backupDetailsDuplicate);\n }\n\n const toggleAll = toggled => {\n const backupDetailsDuplicate = [...backupDetailsData];\n\n if (toggled) {\n let backupDetailNames = [];\n let backupDetails = backupDetailsDuplicate.map(backupDetail => {\n backupDetailNames.push(backupDetail.name);\n backupDetail.isChecked = true;\n return backupDetail;\n });\n\n setState({ ...state, selection: backupDetailNames, toggledAll: toggled });\n setBackupDetailsData(backupDetails);\n } else {\n let backupDetails = backupDetailsDuplicate.map(backupDetail => {\n backupDetail.isChecked = false;\n return backupDetail;\n });\n\n setState({ ...state, selection: [], toggledAll: toggled });\n setBackupDetailsData(backupDetails);\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setState({ ...state, loading: true });\n bulkRestore(action, selection, props.backup)\n .then(result => {\n if (result.status === 200) {\n displayModal(result.data.message);\n toggleAll(false);\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = text => {\n setState({ ...state, loading: false });\n setModal({ ...modal, visible: true, text });\n }\n\n const modalCancelHandler = () => {\n setModal({ ...modal, visible: false, text: '' });\n }\n\n return (\n <div className=\"mail-accounts backups-restore-settings\">\n <Helmet>\n <title>{`Vesta - ${i18n.BACKUP}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name={i18n['Restore All']} list=\"backup-details\" onClick={() => handleRestore(`?backup=${props.backup}`)} showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='backupDetailList' bulkAction={bulk} />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n {state.loading\n ? <Spinner />\n : (\n <>\n <div className=\"mail-accounts-wrapper\">\n <div className=\"subtitle\">\n <span>{`${i18n['Listing']} ${props.backup}`}</span>\n </div>\n {listBackups()}\n </div>\n <div className=\"footer-actions-wrapper\">\n <div className=\"total\">{state.totalAmount}</div>\n <div className=\"back\">\n <Link to=\"/list/backup/\">{i18n['Back']}</Link>\n </div>\n </div>\n </>\n )\n }\n\n <Modal\n onSave={modalCancelHandler}\n showCancelButton={false}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}","import React, { } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport Container from '../ControlPanel/Container/Container';\nimport { faFileDownload } from '@fortawesome/free-solid-svg-icons'\nimport './Backup.scss';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst Backup = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(props.data.NAME, 'add');\n } else {\n props.toggleFav(props.data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(props.data.NAME);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/backup/?backup=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n date={data.DATE}\n toggleFav={toggleFav}\n checkItem={checkItem}\n focused={data.FOCUSED}\n starred={data.STARRED}\n checked={data.isChecked}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.NAME}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div>{i18n['Backup Size']}: <span><span className=\"stat\">{data.SIZE}</span>{i18n.mb}</span></div>\n </Container>\n <Container className=\"c-2\">\n <div>{i18n.Type}: <span className=\"stat\">{data.TYPE}</span></div>\n </Container>\n <Container className=\"c-3\">\n <div>{i18n['Run Time']}: <span className=\"stat\">{data.RUNTIME} minute</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n\n {data.UPDATED === 'no' && <div><a href={`/update/vesta/?pkg=${data.NAME}`}>{i18n.update} <FontAwesomeIcon icon=\"wrench\" /></a></div>}\n\n <div>\n <a className=\"link-download\" href={`/api/v1/download/backup/?backup=${data.NAME}&token=${token}`}>\n {i18n.download}\n {data.FOCUSED ? <span className=\"shortcut-button\">D</span> : <FontAwesomeIcon icon={faFileDownload} />}\n </a>\n </div>\n\n <div>\n <Link className=\"link-download\" to={`/list/backup?backup=${data.NAME}`}>\n {i18n['configure restore settings']}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"list\" />}\n </Link>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n\n </div>\n </ListItem>\n );\n}\n\nexport default Backup;","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport { bulkAction, getBackupList, handleAction, scheduleBackup } from '../../ControlPanelService/Backup';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Backup from '../../components/Backup/Backup';\nimport { Helmet } from 'react-helmet';\nimport { Link } from 'react-router-dom';\nimport './Backups.scss';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Backups = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n const [state, setState] = useState({\n backups: [],\n backupFav: [],\n toggledAll: false,\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/backup/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.backups]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = backups => {\n backups[0]['FOCUSED'] = backups[0]['NAME'];\n setState({ ...state, backups });\n dispatch(addControlPanelContentFocusedElement(backups[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let backups = [...state.backups];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(backups);\n return;\n }\n\n let focusedElementPosition = backups.findIndex(backup => backup.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== backups.length - 1) {\n let nextFocusedElement = backups[focusedElementPosition + 1];\n backups[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, backups });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let backups = [...state.backups];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(backups);\n return;\n }\n\n let focusedElementPosition = backups.findIndex(backup => backup.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = backups[focusedElementPosition - 1];\n backups[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, backups });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return configureRestoreSettings();\n case 68: return download();\n default: break;\n }\n }\n }\n\n const configureRestoreSettings = () => {\n props.history.push(`/list/backup?backup=${controlPanelFocusedElement}`);\n }\n\n const download = () => {\n window.open(`/api/v1/download/backup?backup=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { backups } = state;\n let currentBackupData = backups.filter(backup => backup.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentBackupData.delete_conf, `/api/v1/delete/cron/?job=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getBackupList()\n .then(result => {\n setState({\n ...state,\n backups: reformatData(result.data.data),\n backupFav: result.data.backup_fav,\n totalAmount: result.data.totalAmount,\n selection: [],\n toggledAll: false\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let backups = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['isChecked'] = false;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n backups.push(data[i]);\n }\n\n return backups;\n }\n\n const backups = () => {\n const { backups } = state;\n const result = [];\n const backupFav = { ...state.backupFav };\n\n backups.forEach(backup => {\n backup.FOCUSED = controlPanelFocusedElement === backup.NAME;\n\n if (backupFav[backup.NAME]) {\n backup.STARRED = backupFav[backup.NAME];\n } else {\n backup.STARRED = 0;\n }\n\n result.push(backup);\n });\n\n return result.map((item, index) => {\n return <Backup data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, backups } = state;\n let duplicate = [...selection];\n let backupDuplicate = [...backups];\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = backupDuplicate.findIndex(backup => backup.NAME === name);\n backupDuplicate[incomingItem].isChecked = !backupDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, backups: backupDuplicate, selection: duplicate });\n }\n\n const toggleFav = (value, type) => {\n const { backupFav } = state;\n let backupFavDuplicate = backupFav;\n\n if (type === 'add') {\n backupFavDuplicate[value] = 1;\n\n addFavorite(value, 'backup')\n .then(() => {\n setState({ ...state, backupFav: backupFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n backupFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'backup')\n .then(() => {\n setState({ ...state, backupFav: backupFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const backupsDuplicate = [...state.backups];\n\n if (toggled) {\n let backupNames = [];\n\n let backups = backupsDuplicate.map(backup => {\n backupNames.push(backup.NAME);\n backup.isChecked = true;\n return backup;\n });\n\n setState({ ...state, backups, selection: backupNames, toggledAll: toggled });\n } else {\n let backups = backupsDuplicate.map(backup => {\n backup.isChecked = false;\n return backup;\n });\n setState({ ...state, backups, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setLoading(true);\n bulkAction(action, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setLoading(false);\n setModal({\n ...modal,\n visible: true,\n text: text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n const scheduleBackupButton = () => {\n setLoading(true);\n scheduleBackup()\n .then(result => {\n if (result.data.error) {\n displayModal(result.data.error, '');\n } else {\n displayModal(result.data.ok, '');\n }\n })\n .catch(err => console.error(err));\n }\n\n return (\n <div className=\"backups\">\n <Helmet>\n <title>{`Vesta - ${i18n.BACKUP}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <div className=\"l-menu\">\n <button onClick={scheduleBackupButton}>\n <FontAwesomeIcon icon=\"plus\" />\n <span className=\"add\">{i18n[\"Create Backup\"]}</span>\n </button>\n </div>\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Link to='/list/backup/exclusions' className=\"button-extra\" type=\"submit\">{i18n['backup exclusions']}</Link>\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='backupList' bulkAction={bulk} />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"backups-wrapper\">\n {loading\n ? <Spinner />\n : (<>\n {backups()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)}\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Backups;\n","import React, { useEffect, useState } from 'react';\nimport BackupRestoreSettings from '../../components/Backup/RestoreSettings/BackupRestoreSettings';\nimport { useHistory } from 'react-router-dom';\nimport Backups from '../Backups/Backups';\nimport QueryString from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\n\nexport default function BackupWrapper(props) {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n const [isBackupSettings, setIsBackupSettings] = useState(false);\n\n useEffect(() => {\n if (parsedQueryString.backup) {\n setIsBackupSettings(true);\n } else {\n setIsBackupSettings(false);\n }\n }, [history.location]);\n\n return (\n <>\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n {\n isBackupSettings\n ? <BackupRestoreSettings backup={parsedQueryString.backup} />\n : <Backups {...props} changeSearchTerm={props.changeSearchTerm} />\n }\n </>\n );\n}","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"src/actions/MainNavigation/mainNavigationActions\";\nimport AddItemLayout from 'src/components/ControlPanel/AddItemLayout/AddItemLayout';\nimport { getBanIps, addBanIp } from 'src/ControlPanelService/Firewalls';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport Toolbar from '../../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet';\nimport HtmlParser from 'react-html-parser';\n\nconst AddBanIP = () => {\n const { i18n } = useSelector(state => state.session);\n const userLanguage = localStorage.getItem(\"language\");\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n banIps: [],\n errorMessage: '',\n okMessage: '',\n loading: false\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/firewall/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n getBanIps()\n .then(result => {\n setState({ ...state, ip: result.data.ip, chain: result.data.chain, loading: false });\n });\n }, []);\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newUser = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newUser[name] = value;\n }\n\n if (Object.keys(newUser).length !== 0 && newUser.constructor === Object) {\n setState({ ...state, loading: true });\n addBanIp(newUser)\n .then(result => {\n if (result.status === 200) {\n const { error_msg, ok_msg } = result.data;\n\n if (error_msg) {\n setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });\n } else if (ok_msg) {\n setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });\n } else {\n setState({ ...state, loading: false });\n }\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const renderChainOptions = () => {\n return ['SSH', 'WEB', 'FTP', 'DNS', 'MAIL', 'DB', 'VESTA'].map((chain, index) => (\n <option key={index} selected={userLanguage === chain} value={chain}>{chain}</option>\n ));\n }\n\n return (\n <div className=\"edit-template add-user\">\n <Helmet>\n <title>{`Vesta - ${i18n.FIREWALL}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding IP Address to Banlist']}</div>\n <div className=\"error\"><span className=\"error-message\">{state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}</span></div>\n <div className=\"success\">\n <span className=\"ok-message\">{state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span> </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"add-user\">\n <input type=\"hidden\" name=\"ok\" value=\"add\" />\n\n <div class=\"form-group\">\n <label htmlFor=\"chain\">{i18n.Banlist}</label>\n <select class=\"form-control\" id=\"chain\" name=\"v_chain\">\n {renderChainOptions()}\n </select>\n </div>\n\n <div className=\"form-group exp-date\">\n <label htmlFor=\"ip\">\n {i18n['IP address']}\n <span className=\"optional\">({i18n['CIDR format is supported']})</span>\n </label>\n <input\n type=\"text\"\n className=\"form-control\"\n id=\"ip\"\n required\n name=\"v_ip\" />\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/firewall/banlist')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddBanIP;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport Container from '../ControlPanel/Container/Container';\nimport './CronJob.scss';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst CronJob = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(props.data.NAME, 'add');\n } else {\n props.toggleFav(props.data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(props.data.NAME);\n }\n\n const handleSuspend = () => {\n let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend';\n props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/cron/index.php?job=${data.NAME}`);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/cron/index.php?job=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n date={data.DATE}\n checkItem={checkItem}\n toggleFav={toggleFav}\n focused={data.FOCUSED}\n starred={data.STARRED}\n checked={data.isChecked}\n suspended={data.SUSPENDED === 'yes'}>\n\n <Container className=\"cron-jobs-list r-col w-85\">\n <div className=\"name\">{data.CMD}</div>\n <div className=\"stats\">\n <Container className=\"cron-col\">\n <div>{i18n.Min} <span>{data.MIN}</span></div>\n </Container>\n <Container className=\"cron-col\">\n <div>{i18n.Hour} <span>{data.HOUR}</span></div>\n </Container>\n <Container className=\"cron-col\">\n <div>{i18n.Day} <span>{data.DAY}</span></div>\n </Container>\n <Container className=\"cron-col\">\n <div>{i18n.Month} <span>{data.MONTH}</span></div>\n </Container>\n <Container className=\"cron-col\">\n <div>{i18n['Day of week']} <span>{data.WDAY}</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n\n <div>\n <Link className=\"link-edit\" to={`/edit/cron/?job=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button\n className=\"link-gray\"\n onClick={() => handleSuspend()}>\n {i18n[data.suspend_action]}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n\n </div>\n </ListItem>\n );\n}\n\nexport default CronJob;","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport { bulkAction, getCronList, handleAction } from '../../ControlPanelService/Cron';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport CronJob from '../../components/CronJob/CronJob';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useSelector, useDispatch } from 'react-redux';\nimport './CronJobs.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst CronJobs = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: '',\n });\n const [state, setState] = useState({\n cronJobs: [],\n cronFav: [],\n toggledAll: false,\n cronReports: '',\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/cron/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.cronJobs]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = cronJobs => {\n cronJobs[0]['FOCUSED'] = cronJobs[0]['NAME'];\n setState({ ...state, cronJobs });\n dispatch(addControlPanelContentFocusedElement(cronJobs[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let cronJobs = [...state.cronJobs];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(cronJobs);\n return;\n }\n\n let focusedElementPosition = cronJobs.findIndex(cronJob => cronJob.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== cronJobs.length - 1) {\n let nextFocusedElement = cronJobs[focusedElementPosition + 1];\n cronJobs[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, cronJobs });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let cronJobs = [...state.cronJobs];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(cronJobs);\n return;\n }\n\n let focusedElementPosition = cronJobs.findIndex(cronJob => cronJob.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = cronJobs[focusedElementPosition - 1];\n cronJobs[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, cronJobs });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return handleEdit();\n case 83: return handleSuspend();\n default: break;\n }\n }\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/cron?job=${controlPanelFocusedElement}`);\n }\n\n const handleSuspend = () => {\n const { cronJobs } = state;\n let currentCronJobData = cronJobs.filter(cronJob => cronJob.NAME === controlPanelFocusedElement)[0];\n let suspendedStatus = currentCronJobData.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n\n displayModal(currentCronJobData.suspend_conf, `/api/v1/${suspendedStatus}/cron/index.php?job=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { cronJobs } = state;\n let currentCronJobData = cronJobs.filter(cronJob => cronJob.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentCronJobData.delete_conf, `/api/v1/delete/cron/index.php?job=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getCronList()\n .then(result => {\n setState({\n ...state,\n cronJobs: reformatData(result.data.data),\n cronReports: result.data.cron_reports,\n cronFav: result.data.cron_fav,\n selection: [],\n toggledAll: false,\n totalAmount: result.data.totalAmount\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let cronJobs = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['isChecked'] = false;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n cronJobs.push(data[i]);\n }\n\n return cronJobs;\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const cronJobs = () => {\n const { cronJobs } = state;\n const result = [];\n const cronFav = { ...state.cronFav };\n\n cronJobs.forEach(cronJob => {\n cronJob.FOCUSED = controlPanelFocusedElement === cronJob.NAME;\n\n if (cronFav[cronJob.NAME]) {\n cronJob.STARRED = cronFav[cronJob.NAME];\n } else {\n cronJob.STARRED = 0;\n }\n\n result.push(cronJob);\n });\n\n let sortedResult = sortArray(result);\n\n return sortedResult.map((item, index) => {\n return <CronJob data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, cronJobs } = state;\n let duplicate = [...selection];\n let cronDuplicate = cronJobs;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = cronDuplicate.findIndex(cronJob => cronJob.NAME === name);\n cronDuplicate[incomingItem].isChecked = !cronDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, cronJobs: cronDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortingColumn = sortBy(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Date, Command, Starred } = i18n;\n\n switch (sorting) {\n case Date: return 'DATE';\n case Command: return 'CMD';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n const { cronFav } = state;\n let cronFavDuplicate = cronFav;\n\n if (type === 'add') {\n cronFavDuplicate[value] = 1;\n\n addFavorite(value, 'cron')\n .then(() => {\n setState({ ...state, cronFav: cronFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n cronFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'cron')\n .then(() => {\n setState({ ...state, cronFav: cronFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const cronJobsDuplicate = [...state.cronJobs];\n\n if (toggled) {\n let cronJobNames = [];\n\n let cronJobs = cronJobsDuplicate.map(cronJob => {\n cronJobNames.push(cronJob.NAME);\n cronJob.isChecked = true;\n return cronJob;\n });\n\n setState({ ...state, cronJobs, selection: cronJobNames, toggledAll: toggled });\n } else {\n let cronJobs = cronJobsDuplicate.map(cronJob => {\n cronJob.isChecked = false;\n return cronJob;\n });\n setState({ ...state, cronJobs, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n const notifications = state.cronReports === 'yes' ? 'delete-cron-reports' : 'add-cron-reports';\n\n if (action === notifications) {\n return handleCronNotifications();\n }\n\n if (selection.length && action) {\n setLoading(true);\n bulkAction(action, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: !state.modalVisible,\n text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n const handleCronNotifications = () => {\n const token = localStorage.getItem(\"token\");\n const url = `/api/v1/${state.cronReports === 'yes' ? 'delete' : 'add'}/cron/reports/?token=${token}`;\n\n handleAction(url)\n .then(res => {\n displayModal(res.data.message, '');\n fetchData();\n })\n .catch(err => console.error(err));\n }\n\n return (\n <div className=\"cronJobs\">\n <Helmet>\n <title>{`Vesta - ${i18n.CRON}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name={i18n['Add Cron Job']} href=\"/add/cron\" showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <button onClick={handleCronNotifications} className=\"button-extra\" type=\"submit\">\n {state.cronReports === 'yes' ? i18n['turn off notifications'] : i18n['turn on notifications']}\n </button>\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='cronList' bulkAction={bulk} cronReports={state.cronReports === 'yes'} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"cronList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"cron-wrapper\">\n {loading\n ? <Spinner />\n : (<>\n {cronJobs()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)}\n </div>\n <Modal\n showCancelButton={modal.actionUrl}\n onCancel={modalCancelHandler}\n onSave={modalConfirmHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default CronJobs;\n","import React, { } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport './Package.scss';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst Package = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n\n const printNameServers = servers => {\n let serversArray = servers.split(',');\n\n return serversArray.map(\n (server, index) => <div key={index}>{server}</div>\n );\n }\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(data.NAME, 'add');\n } else {\n props.toggleFav(data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(data.NAME);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/package/index.php?package=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n date={data.DATE}\n toggleFav={toggleFav}\n checkItem={checkItem}\n starred={data.STARRED}\n focused={data.FOCUSED}\n checked={data.isChecked}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.NAME}</div>\n <div>{data.FNAME} {data.LNAME}</div>\n <div className=\"stats\">\n <Container className=\"c-1 w-30\">\n <div>{i18n['Web Template']}: <span><span className=\"stat\">{data.WEB_TEMPLATE}</span></span></div>\n <div>{i18n['Proxy Template']}: <span><span className=\"stat\">{data.PROXY_TEMPLATE}</span></span></div>\n <div>{i18n['DNS Template']}: <span><span className=\"stat\">{data.DNS_TEMPLATE}</span></span></div>\n <div>{i18n['SSH Access']}: <span><span className=\"stat\">{data.SHELL}</span></span></div>\n <div>{i18n['Web Domains']}: <span><span className=\"stat\">{data.WEB_DOMAINS}</span></span></div>\n <div>{i18n['Web Aliases']}: <span><span className=\"stat\">{data.WEB_ALIASES}</span></span></div>\n </Container>\n <Container className=\"c-2 w-35\">\n <div>{i18n['DNS domains']}: <span><span className=\"stat\">{data.DNS_DOMAINS}</span></span></div>\n <div>{i18n['DNS records']}: <span><span className=\"stat\">{data.DNS_RECORDS}</span></span></div>\n <div>{i18n['Mail Domains']}: <span><span className=\"stat\">{data.MAIL_DOMAINS}</span></span></div>\n <div>{i18n['Mail Accounts']}: <span><span className=\"stat\">{data.MAIL_ACCOUNTS}</span></span></div>\n <div>{i18n.Databases}: <span><span className=\"stat\">{data.DATABASES}</span></span></div>\n <div>{i18n['Cron Jobs']}: <span><span className=\"stat\">{data.CRON_JOBS}</span></span></div>\n </Container>\n <Container className=\"c-3 w-35\">\n <div><span>{i18n.Backups}:</span> <span><span className=\"stat\">{data.BACKUPS}</span></span></div>\n <div><span>{i18n.Bandwidth}:</span> <span><span><span className=\"stat\">{data.BANDWIDTH}</span> {i18n.mb}</span></span></div>\n <div><span>{i18n.Disk}:</span> <span><span><span className=\"stat\">{data.DISK_QUOTA}</span> {i18n.mb}</span></span></div>\n <div className=\"ns\"><span>{i18n['Name Servers']}:</span> <span><span className=\"stat\">{printNameServers(data.NS)}</span></span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <Link className=\"link-edit\" to={`/edit/package/?package=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default Package;","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport { bulkAction, getPackageList, handleAction } from '../../ControlPanelService/Package';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport Package from '../../components/Package/Package';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport './Packages.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Packages = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n const [state, setState] = useState({\n packages: [],\n packagesFav: [],\n toggledAll: false,\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/package/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.packages]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = packages => {\n packages[0]['FOCUSED'] = packages[0]['NAME'];\n setState({ ...state, packages });\n dispatch(addControlPanelContentFocusedElement(packages[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let packages = [...state.packages];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(packages);\n return;\n }\n\n let focusedElementPosition = packages.findIndex(pack => pack.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== packages.length - 1) {\n let nextFocusedElement = packages[focusedElementPosition + 1];\n packages[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, packages });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let packages = [...state.packages];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(packages);\n return;\n }\n\n let focusedElementPosition = packages.findIndex(pack => pack.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = packages[focusedElementPosition - 1];\n packages[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, packages });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return handleEdit();\n default: break;\n }\n }\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/package/?package=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { packages } = state;\n let currentPackageData = packages.filter(pack => pack.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentPackageData.delete_conf, `/api/v1/delete/package/index.php?package=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getPackageList()\n .then(result => {\n setState({\n ...state,\n packages: reformatData(result.data.data),\n packagesFav: result.data.packagesFav,\n totalAmount: result.data.totalAmount,\n selection: [],\n toggledAll: false\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let packages = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n packages.push(data[i]);\n }\n\n return packages;\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const packages = () => {\n const { packages } = state;\n const packagesFav = { ...state.packagesFav };\n const result = [];\n\n packages.forEach(pack => {\n pack.FOCUSED = controlPanelFocusedElement === pack.NAME;\n\n if (packagesFav[pack.NAME]) {\n pack.STARRED = packagesFav[pack.NAME];\n } else {\n pack.STARRED = 0;\n }\n\n result.push(pack);\n });\n\n let sortedResult = sortArray(result);\n\n return sortedResult.map((item, index) => {\n return <Package data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, packages } = state;\n let duplicate = [...selection];\n let packagesDuplicate = packages;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = packagesDuplicate.findIndex(pack => pack.NAME === name);\n packagesDuplicate[incomingItem].isChecked = !packagesDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, packages: packagesDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortingColumn = sortBy(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Date, Starred } = i18n;\n\n switch (sorting) {\n case Date: return 'DATE';\n case i18n['Package Name']: return 'NAME';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n const { packagesFav } = state;\n let packagesFavDuplicate = packagesFav;\n\n if (type === 'add') {\n packagesFavDuplicate[value] = 1;\n\n addFavorite(value, 'package')\n .then(() => {\n setState({ ...state, packagesFav: packagesFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n packagesFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'package')\n .then(() => {\n setState({ ...state, packagesFav: packagesFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const packagesDuplicate = [...state.packages];\n\n if (toggled) {\n let packageNames = [];\n\n let packages = packagesDuplicate.map(pack => {\n packageNames.push(pack.NAME);\n pack.isChecked = true;\n return pack;\n });\n\n setState({ ...state, packages, selection: packageNames, toggledAll: toggled });\n } else {\n let packages = packagesDuplicate.map(pack => {\n pack.isChecked = false;\n return pack;\n });\n\n setState({ ...state, packages, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setLoading(true);\n bulkAction(action, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, actionUrl) => {\n setModal({ ...modal, visible: !modal.visible, text, actionUrl })\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({ ...modal, visible: false, text: '', actionUrl: '' })\n }\n\n return (\n <div className=\"packages\">\n <Helmet>\n <title>{`Vesta - ${i18n.PACKAGE}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name={i18n['Add Package']} href=\"/add/package/\" showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='packagesList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"packagesList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"packages-wrapper\">\n {\n loading\n ? <Spinner />\n : (<>\n {packages()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)\n }\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Packages;\n","import axios from \"axios\";\n\nconst webApiUri = '/api/v1/languages.php';\nconst BASE_URL = window.location.origin;\n\nexport const getLanguages = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const languagesMock = [\n \"ar\",\n \"az\",\n \"bg\",\n \"bs\",\n \"cn\",\n \"cz\",\n \"da\",\n \"de\",\n \"el\",\n \"en\",\n \"es\",\n \"fa\",\n \"fi\",\n \"fr\",\n \"hu\",\n \"id\",\n \"it\",\n \"ja\",\n \"ka\",\n \"ko\",\n \"nl\",\n \"no\",\n \"pl\",\n \"pt-BR\",\n \"pt\",\n \"ro\",\n \"ru\",\n \"se\",\n \"sr\",\n \"th\",\n \"tr\",\n \"tw\",\n \"ua\",\n \"ur\",\n \"vi\"\n];","import React, { useEffect, useState } from 'react';\nimport { addActiveElement, removeFocusedElement } from \"../../../actions/MainNavigation/mainNavigationActions\";\nimport Password from '../../../components/ControlPanel/AddItemLayout/Form/Password/Password';\nimport AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';\nimport { getLanguages } from '../../../ControlPanelService/Languages';\nimport { getPackageList } from '../../../ControlPanelService/Package';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { addUser } from '../../../ControlPanelService/Users';\nimport Spinner from '../../../components/Spinner/Spinner';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport './AddUser.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\nimport HtmlParser from 'react-html-parser';\n\nconst AddUser = props => {\n const { i18n } = useSelector(state => state.session);\n const userLanguage = localStorage.getItem(\"language\");\n const history = useHistory();\n const dispatch = useDispatch();\n const [state, setState] = useState({\n vEmail: '',\n vNotify: '',\n languages: [],\n packages: [],\n errorMessage: '',\n okMessage: '',\n loading: false\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/user/'));\n dispatch(removeFocusedElement());\n\n setState({ ...state, loading: true });\n\n Promise.all([getAllPackages(), getAllLanguages()])\n .then(result => {\n const [packages, languages] = result;\n let packageNames = getPackageNames(packages.data.data);\n\n setState({ ...state, packages: packageNames, languages: languages.data, loading: false });\n });\n }, []);\n\n const getAllPackages = () => {\n return getPackageList().catch(err => console.error(err));\n }\n\n const getAllLanguages = () => {\n return getLanguages().catch(err => console.error(err));\n }\n\n const getPackageNames = packages => {\n let result = [];\n\n for (let i in packages) {\n result.push(i);\n }\n\n return result;\n }\n\n const submitFormHandler = event => {\n event.preventDefault();\n let newUser = {};\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n newUser[name] = value;\n }\n\n if (Object.keys(newUser).length !== 0 && newUser.constructor === Object) {\n setState({ ...state, loading: true });\n addUser(newUser)\n .then(result => {\n const { error_msg: errorMessage, ok_msg: okMessage } = result.data;\n\n if (errorMessage) {\n setState({ ...state, errorMessage, okMessage, loading: false });\n } else {\n dispatch(refreshCounters()).then(() => {\n setState({ ...state, okMessage, errorMessage: '', loading: false });\n });\n }\n })\n .catch(err => {\n setState({ ...state, loading: false });\n console.error(err);\n });\n }\n }\n\n const renderPackageOptions = () => {\n return state.packages.map((pack, index) => (\n <option key={index} value={pack}>{pack}</option>\n ));\n }\n\n const renderLanguageOptions = () => {\n return state.languages.map((language, index) => (\n <option key={index} selected={userLanguage === language} value={language}>{language}</option>\n ));\n }\n\n const onChangeEmail = value => {\n setState({ ...state, vEmail: value });\n }\n\n const onBlurEmail = () => {\n if (!state.vNotify) {\n setState({ ...state, vNotify: state.vEmail });\n }\n }\n\n const onChangeSecondEmail = value => {\n setState({ ...state, vNotify: value });\n }\n\n const repeatEmailHandler = checked => {\n if (checked) {\n if (state.vEmail) {\n setState({ ...state, vNotify: state.vEmail });\n }\n } else {\n setState({ ...state, vNotify: '' });\n }\n }\n\n return (\n <div className=\"edit-template add-user\">\n <Helmet>\n <title>{`Vesta - ${i18n.USER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div></div>\n <div className=\"search-toolbar-name\">{i18n['Adding User']}</div>\n <div className=\"error\"><span className=\"error-message\">{state.errorMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} {state.errorMessage}</span></div>\n <div className=\"success\">\n <span className=\"ok-message\">{state.okMessage ? <FontAwesomeIcon icon=\"long-arrow-alt-right\" /> : ''} <span>{HtmlParser(state.okMessage)}</span> </span>\n </div>\n </Toolbar>\n <AddItemLayout>\n {state.loading ? <Spinner /> :\n <form onSubmit={event => submitFormHandler(event)} id=\"add-user\">\n <div className=\"form-group\">\n <label htmlFor=\"username\">{i18n.Username}</label>\n <input type=\"text\" className=\"form-control\" id=\"username\" name=\"v_username\" />\n </div>\n\n <Password name='v_password' />\n\n <div className=\"form-group\">\n <label htmlFor=\"email\">\n {i18n.Email} /\n <div>\n <input\n type=\"checkbox\"\n id=\"send-credentials\"\n onChange={event => repeatEmailHandler(event.target.checked)} />\n <label htmlFor=\"send-credentials\">{i18n['Send login credentials to email address']}</label>\n </div>\n </label>\n <input\n type=\"email\"\n name=\"v_email\"\n className=\"form-control\"\n id=\"email\"\n value={state.vEmail}\n onChange={event => onChangeEmail(event.target.value)}\n onBlur={() => onBlurEmail()} />\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"package\">{i18n.Package}</label>\n <select class=\"form-control\" id=\"package\" name=\"v_package\">\n {renderPackageOptions()}\n </select>\n </div>\n\n <div class=\"form-group\">\n <label htmlFor=\"language\">{i18n.Language}</label>\n <select class=\"form-control\" id=\"language\" name=\"v_language\">\n {renderLanguageOptions()}\n </select>\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"firstName\">{i18n['First Name']}</label>\n <input type=\"text\" className=\"form-control\" id=\"firstName\" name=\"v_fname\" />\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"lastName\">{i18n['Last Name']}</label>\n <input type=\"text\" className=\"form-control\" id=\"lastName\" name=\"v_lname\" />\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"sendLoginCredentialsToEmailAddress\">{i18n['Send login credentials to email address']}</label>\n <input\n type=\"email\"\n className=\"form-control\"\n id=\"sendLoginCredentialsToEmailAddress\"\n value={state.vNotify}\n onChange={e => onChangeSecondEmail(e.target.value)}\n name=\"v_notify\" />\n </div>\n\n <div className=\"buttons-wrapper\">\n <button type=\"submit\" className=\"add\">{i18n.Add}</button>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/user/')}>{i18n.Back}</button>\n </div>\n\n </form>\n }\n </AddItemLayout>\n </div>\n );\n}\n\nexport default AddUser;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst deleteAutoUpdateUri = '/api/v1/delete/cron/autoupdate/';\nconst addAutoUpdateUri = '/api/v1/add/cron/autoupdate/';\nconst webApiUri = '/api/v1/list/updates/index.php';\nconst BASE_URL = window.location.origin;\n\nexport const getUpdatesList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport const bulkAction = (action, updates) => {\n const formData = new FormData();\n formData.append(\"action\", action);\n formData.append(\"token\", getAuthToken());\n\n updates.forEach(update => {\n formData.append(\"pkg[]\", update);\n });\n\n return axios.post(BASE_URL + '/api/v1/bulk/vesta/', formData);\n};\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n\nexport const enableAutoUpdate = () => {\n return axios.get(`${BASE_URL}${addAutoUpdateUri}`, {\n params: {\n token: getAuthToken()\n }\n });\n};\n\nexport const disableAutoUpdate = () => {\n return axios.get(`${BASE_URL}${deleteAutoUpdateUri}`, {\n params: {\n token: getAuthToken()\n }\n });\n};","import React, { } from 'react';\nimport { useSelector } from 'react-redux';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport './Update.scss';\n\nconst Update = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n\n const isUpdated = status => {\n if (status === 'no') {\n return 'OUTDATED';\n }\n\n return 'UPDATED';\n }\n\n const isOutdated = status => {\n return status === \"no\";\n }\n\n const checkItem = () => {\n props.checkItem(props.data.NAME);\n }\n\n return (\n <ListItem\n date={false}\n id={data.NAME}\n checkItem={checkItem}\n focused={data.FOCUSED}\n checked={data.isChecked}\n outdated={isOutdated(data.UPDATED)}\n leftNameText={isUpdated(data.UPDATED)}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.NAME}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"descr\"><span className=\"stat\">{data.DESCR}</span></div>\n </Container>\n <Container className=\"c-2\">\n <div>{i18n.Version}: <span><span className=\"stat\">{data.VERSION}</span> {`(${data.ARCH})`}</span></div>\n </Container>\n <Container className=\"c-3\">\n <div>{i18n.Release}: <span className=\"stat\">{data.RELEASE}</span></div>\n </Container>\n </div>\n </Container>\n\n </ListItem>\n );\n}\n\nexport default Update;","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport { bulkAction, getUpdatesList, enableAutoUpdate, disableAutoUpdate } from '../../ControlPanelService/Updates';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Modal from 'src/components/ControlPanel/Modal/Modal';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Spinner from '../../components/Spinner/Spinner';\nimport Update from '../../components/Update/Update';\nimport './Updates.scss';\nimport { Helmet } from 'react-helmet';\n\nconst Updates = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [state, setState] = useState({\n updates: [],\n selection: [],\n autoUpdate: '',\n token: '',\n loading: false,\n toggledAll: false\n });\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/updates/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData();\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n };\n }, [controlPanelFocusedElement, focusedElement, state.updates]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = updates => {\n updates[0]['FOCUSED'] = updates[0]['NAME'];\n setState({ ...state, updates });\n dispatch(addControlPanelContentFocusedElement(updates[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let updates = [...state.updates];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(updates);\n return;\n }\n\n let focusedElementPosition = updates.findIndex(update => update.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== updates.length - 1) {\n let nextFocusedElement = updates[focusedElementPosition + 1];\n updates[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, updates });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let updates = [...state.updates];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(updates);\n return;\n }\n\n let focusedElementPosition = updates.findIndex(update => update.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = updates[focusedElementPosition - 1];\n updates[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, updates });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const fetchData = () => {\n setState({ ...state, loading: true });\n\n getUpdatesList()\n .then(result => {\n setState({\n ...state,\n selection: [],\n updates: reformatData(result.data.data),\n autoUpdate: result.data.autoUpdate,\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n\n const reformatData = data => {\n let updates = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n updates.push(data[i]);\n }\n\n return updates;\n }\n\n const updates = () => {\n let updates = [...state.updates];\n\n updates.forEach(update => {\n update.FOCUSED = controlPanelFocusedElement === update.NAME;\n });\n\n return updates.map((item, index) => {\n return <Update data={item} key={index} checkItem={checkItem} />;\n });\n }\n\n const checkItem = name => {\n let duplicate = [...state.selection];\n let updatesDuplicate = [...state.updates];\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = updatesDuplicate.findIndex(update => update.NAME === name);\n updatesDuplicate[incomingItem].isChecked = !updatesDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, updates: updatesDuplicate, selection: duplicate });\n }\n\n const toggleAll = toggled => {\n const updatesDuplicate = [...state.updates];\n\n if (toggled) {\n let updateNames = [];\n\n let updates = updatesDuplicate.map(update => {\n updateNames.push(update.NAME);\n update.isChecked = true;\n return update;\n });\n\n setState({ ...state, updates, selection: updateNames, toggledAll: toggled });\n } else {\n let updates = updatesDuplicate.map(update => {\n update.isChecked = false;\n return update;\n });\n\n setState({ ...state, updates, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action !== 'apply to selected') {\n bulkAction(action, selection)\n .then(res => {\n toggleAll(false);\n if (res.status === 200) {\n if (res.data.error) {\n setState({ ...state, loading: false });\n return displayModal(res.data.error, '');\n }\n\n displayModal(res.data.message, '');\n fetchData();\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const handleAutoUpdate = () => {\n if (state.autoUpdate === 'Enabled') {\n disableAutoUpdate()\n .then(res => {\n if (res.data.error) {\n setState({ ...state, loading: false });\n return displayModal(res.data.error, '');\n }\n\n displayModal(res.data.message, '');\n fetchData();\n })\n .catch(err => {\n setState({ ...state, loading: false });\n console.error(err);\n });\n } else {\n enableAutoUpdate()\n .then(res => {\n if (res.data.error) {\n setState({ ...state, loading: false });\n return displayModal(res.data.error, '');\n }\n\n displayModal(res.data.message, '');\n fetchData();\n })\n .catch(err => {\n setState({ ...state, loading: false });\n console.error(err);\n });\n }\n }\n\n const displayModal = (text, url) => {\n setState({ ...state, loading: true });\n setModal({\n ...modal,\n visible: true,\n text: text,\n actionUrl: url\n });\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n const printAutoUpdateButtonName = () => {\n if (state.autoUpdate === 'Enabled') {\n return i18n['disable autoupdate'];\n } else {\n return i18n['enable autoupdate'];\n }\n }\n\n return (\n <div className=\"statistics-list updates\">\n <Helmet>\n <title>{`Vesta - ${i18n.UPDATES}`}</title>\n </Helmet>\n <Toolbar mobile={false} className=\"justify-right\">\n <LeftButton name=\"Add Cron Job\" showLeftMenu={false} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <button onClick={handleAutoUpdate} className=\"button-extra\">{printAutoUpdateButtonName()}</button>\n <Checkbox toggleAll={toggleAll} />\n <Select list='updatesList' bulkAction={bulk} />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n {state.loading ? <Spinner /> : updates()}\n <Modal\n onSave={modalCancelHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Updates;","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport './ServerSys.scss';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst Server = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n\n const checkItem = () => {\n props.checkItem(props.data.HOSTNAME);\n }\n\n return (\n <ListItem\n id={data.NAME}\n focused={data.FOCUSED}\n sysInfo={data.HOSTNAME}\n checked={data.isChecked}\n checkItem={checkItem}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.HOSTNAME}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"descr\"><span><span className=\"stat\">{data.OS} {data.VERSION}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {`(${data.ARCH})`}</span></div>\n </Container>\n <Container className=\"c-2\">\n <div>{i18n['Load Average']}: <span><span className=\"stat\">{data.LOADAVERAGE}</span></span></div>\n </Container>\n <Container className=\"c-3\">\n <div><span>{i18n.Uptime}: <span className=\"stat\">{data.UPTIME}</span></span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n\n <div>\n <Link className=\"link-list\" to={`/edit/server/`}>\n {i18n.configure}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"cogs\" />}\n </Link>\n </div>\n\n <div>\n <a className=\"link-download restart\" href={`/restart/service?srv=${data.NAME}`} >\n {i18n.restart}\n {\n data.FOCUSED\n ? <span className=\"shortcut-button\">R</span>\n : <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-arrow-repeat\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" d=\"M2.854 7.146a.5.5 0 0 0-.708 0l-2 2a.5.5 0 1 0 .708.708L2.5 8.207l1.646 1.647a.5.5 0 0 0 .708-.708l-2-2zm13-1a.5.5 0 0 0-.708 0L13.5 7.793l-1.646-1.647a.5.5 0 0 0-.708.708l2 2a.5.5 0 0 0 .708 0l2-2a.5.5 0 0 0 0-.708z\" />\n <path fill-rule=\"evenodd\" d=\"M8 3a4.995 4.995 0 0 0-4.192 2.273.5.5 0 0 1-.837-.546A6 6 0 0 1 14 8a.5.5 0 0 1-1.001 0 5 5 0 0 0-5-5zM2.5 7.5A.5.5 0 0 1 3 8a5 5 0 0 0 9.192 2.727.5.5 0 1 1 .837.546A6 6 0 0 1 2 8a.5.5 0 0 1 .501-.5z\" />\n </svg>\n }\n </a>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default Server;","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport './Server.scss';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst Server = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n\n const checkItem = () => {\n props.checkItem(data.NAME);\n }\n\n return (\n <ListItem\n id={data.NAME}\n focused={data.FOCUSED}\n checked={data.isChecked}\n checkItem={checkItem}>\n\n <Container className=\"r-col w-85\">\n <div className=\"server-name\">{data.NAME}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"descr\"><span className=\"stat\">{i18n[data.SYSTEM]}</span></div>\n </Container>\n <Container className=\"c-1\" />\n <Container className=\"c-1\">\n <div className=\"descr\"><span>{i18n.CPU}: <span className=\"stat\">{data.CPU}</span></span></div>\n </Container>\n <Container className=\"c-2\">\n <div><span>{i18n.Memory}: <span className=\"stat\">{data.MEM} {i18n.mb}</span></span></div>\n </Container>\n <Container className=\"c-3\">\n <div><span>{i18n.Uptime}: <span className=\"stat\">{data.RTIME}</span></span></div>\n </Container>\n <Container className=\"c-1\" />\n </div>\n </Container>\n <div className=\"actions\">\n\n <div>\n <Link className=\"link-list\" to={`/edit/server/${data.NAME}`}>\n {i18n.configure}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"cogs\" />}\n </Link>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => props.handleAction('/api/v1' + data.action_url)}>\n {data.STATE === 'running' ? i18n.stop : i18n.start}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.STATE === 'running' ? \"stop\" : \"play\"} />}\n </button>\n </div>\n\n <div>\n <button className=\"link-download restart\" onClick={() => props.handleAction(`/api/v1/restart/service/?srv=${data.NAME}`)}>\n {i18n.restart}\n {\n data.FOCUSED\n ? <span className=\"shortcut-button\">R</span>\n : <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-arrow-repeat\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" d=\"M2.854 7.146a.5.5 0 0 0-.708 0l-2 2a.5.5 0 1 0 .708.708L2.5 8.207l1.646 1.647a.5.5 0 0 0 .708-.708l-2-2zm13-1a.5.5 0 0 0-.708 0L13.5 7.793l-1.646-1.647a.5.5 0 0 0-.708.708l2 2a.5.5 0 0 0 .708 0l2-2a.5.5 0 0 0 0-.708z\" />\n <path fill-rule=\"evenodd\" d=\"M8 3a4.995 4.995 0 0 0-4.192 2.273.5.5 0 0 1-.837-.546A6 6 0 0 1 14 8a.5.5 0 0 1-1.001 0 5 5 0 0 0-5-5zM2.5 7.5A.5.5 0 0 1 3 8a5 5 0 0 0 9.192 2.727.5.5 0 1 1 .837.546A6 6 0 0 1 2 8a.5.5 0 0 1 .501-.5z\" />\n </svg>\n }\n </button>\n </div>\n\n </div>\n </ListItem>\n );\n}\n\nexport default Server;\n","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport { bulkAction, getServersList, handleAction } from '../../ControlPanelService/Server';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport ServerSys from '../../components/Server/ServerSys';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Server from '../../components/Server/Server';\nimport { Link } from 'react-router-dom';\nimport { Helmet } from 'react-helmet';\nimport './Servers.scss';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Servers = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: '',\n });\n const [state, setState] = useState({\n servers: [],\n selection: [],\n toggledAll: false,\n sorting: i18n.Action,\n order: \"descending\",\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/server/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.servers]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = servers => {\n servers[0]['FOCUSED'] = servers[0]['NAME'];\n setState({ ...state, servers });\n dispatch(addControlPanelContentFocusedElement(servers[0]));\n }\n\n const handleArrowDown = () => {\n let servers = [...state.servers];\n\n if (focusedElement) {\n removeFocusedElement();\n }\n\n if (controlPanelFocusedElement.NAME === '' || controlPanelFocusedElement === '') {\n initFocusedElement(servers);\n return;\n }\n\n let focusedElementPosition = servers.findIndex(server => server.NAME === controlPanelFocusedElement.NAME);\n\n if (focusedElementPosition !== servers.length - 1) {\n let nextFocusedElement = servers[focusedElementPosition + 1];\n servers[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, servers });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement));\n }\n }\n\n const handleArrowUp = () => {\n let servers = [...state.servers];\n\n if (focusedElement) {\n removeFocusedElement();\n }\n\n if (controlPanelFocusedElement.NAME === '' || controlPanelFocusedElement === '') {\n initFocusedElement(servers);\n return;\n }\n\n let focusedElementPosition = servers.findIndex(server => server.NAME === controlPanelFocusedElement.NAME);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = servers[focusedElementPosition - 1];\n servers[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, servers });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement.NAME && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 13: return handleConfigure();\n case 82: return handleRestart();\n case 83: return handleStop();\n default: break;\n }\n }\n }\n\n const handleConfigure = () => {\n if (controlPanelFocusedElement.NAME !== state.servers[0].NAME) {\n props.history.push(`/edit/server/${controlPanelFocusedElement.NAME}`);\n } else {\n props.history.push('/edit/server/');\n }\n }\n\n const handleStop = () => {\n onHandleAction('/api/v1' + controlPanelFocusedElement.action_url);\n }\n\n const handleRestart = () => {\n onHandleAction(`/api/v1/restart/service/?srv=${controlPanelFocusedElement.NAME}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getServersList()\n .then(result => {\n setState({\n ...state,\n selection: [],\n toggledAll: false,\n servers: reformatData(result.data.data, result.data.sys)\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = (servers, sysInfo) => {\n let result = [];\n\n for (let i in servers) {\n servers[i]['NAME'] = i;\n servers[i]['FOCUSED'] = controlPanelFocusedElement.NAME === i;\n\n result.push(servers[i]);\n }\n\n result.splice(0, 0, Object.values(sysInfo)[0]);\n result[0]['NAME'] = result[0]['HOSTNAME'];\n\n return result;\n }\n\n const servers = () => {\n const result = [];\n\n state.servers.forEach(server => {\n server.FOCUSED = controlPanelFocusedElement.NAME === server.NAME;\n result.push(server);\n });\n\n return result.map((item, index) => {\n if (item.HOSTNAME) {\n return <ServerSys data={item} key={index} checkItem={checkItem} handleAction={onHandleAction} />\n } else {\n return <Server data={item} key={index} checkItem={checkItem} handleAction={onHandleAction} />\n }\n });\n }\n\n const onHandleAction = uri => {\n dispatch(removeControlPanelContentFocusedElement());\n if (uri) {\n setLoading(true);\n handleAction(uri)\n .then(res => {\n if (res.data.error) {\n displayModal(res.data.error);\n }\n\n setLoading(false);\n })\n .catch(err => {\n setLoading(false);\n console.error(err)\n });\n }\n }\n\n const toggleAll = toggled => {\n let serversDuplicate = [...state.servers];\n\n if (toggled) {\n let serverNames = [];\n\n let servers = serversDuplicate.map(server => {\n serverNames.push(server.NAME);\n server.isChecked = true;\n return server;\n });\n\n setState({ ...state, servers, selection: serverNames, toggledAll: toggled });\n } else {\n let servers = serversDuplicate.map(server => {\n server.isChecked = false;\n return server;\n });\n\n setState({ ...state, servers, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setState({ ...state, loading: true });\n bulkAction(action, selection)\n .then(res => {\n if (res.data.error) {\n displayModal(res.data.error);\n }\n\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n })\n .catch(err => console.error(err));\n }\n }\n\n const checkItem = name => {\n const { selection } = state;\n let duplicate = [...selection];\n let serversDuplicate = [...state.servers];\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = serversDuplicate.findIndex(server => server.NAME === name);\n serversDuplicate[incomingItem].isChecked = !serversDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, servers: serversDuplicate, selection: duplicate });\n }\n\n const displayModal = text => {\n setModal({ ...modal, visible: true, text });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({ ...modal, visible: false, text: '' });\n }\n\n return (\n <div className=\"servers-list\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <LeftButton href=\"/edit/server/\" list=\"server\" name={i18n.configure} showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Link to=\"/list/server/cpu\" className=\"button-extra\">{i18n['show: CPU / MEM / NET / DISK']}</Link>\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='serverList' bulkAction={bulk} />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n {loading ? <Spinner /> : (\n <div className=\"servers-wrapper\">\n {servers()}\n </div>\n )}\n\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n showSaveButton={false}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Servers;\n","import React, { useEffect } from 'react';\nimport { addActiveElement } from '../../../actions/MainNavigation/mainNavigationActions';\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\n\nimport './Menu.scss';\n\nconst className = height => {\n if (height === 35) {\n return \"menu-stat shadow\";\n } else {\n return \"menu-stat\";\n }\n}\n\nconst style = ({ menuHeight, mobile }) => {\n if (mobile) {\n return;\n }\n\n if (document.documentElement.clientWidth > 900) {\n return menuHeight\n } else {\n return 45;\n }\n}\n\nconst Menu = props => {\n const { activeElement, focusedElement } = useSelector(state => state.mainNavigation);\n const { i18n, session: { look } } = useSelector(state => state.session);\n const { user } = useSelector(state => state.menuCounters);\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (user.LANGUAGE) {\n localStorage.setItem(\"language\", user.LANGUAGE);\n }\n }, [user]);\n\n const handleState = (tab, event) => {\n if (`${window.location.pathname}${window.location.search}` === tab) {\n return event.preventDefault();\n }\n\n dispatch(addActiveElement(tab));\n }\n\n const statClassName = activeName => {\n return `stat ${activeName === activeElement && 'l-active'} ${activeName === focusedElement && 'focus'}`;\n }\n\n const sizeFormatter = (bytes, decimals) => {\n if (!bytes) return null;\n\n if (bytes === \"0\") {\n return <span className=\"value\">0 <span className=\"unit\">b</span></span>;\n }\n\n let k = 1024,\n dm = decimals <= 0 ? 0 : decimals || 2,\n sizes = ['b', 'kb', 'Mb', 'GB'],\n i = Math.floor(Math.log(bytes) / Math.log(k));\n return (<span className=\"value\">{parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} <span className=\"unit\">{sizes[i]}</span></span>);\n }\n\n return (\n <div className=\"menu-wrapper\">\n <div className={className(props.menuHeight)} style={{ height: style(props) }}>\n <div className={statClassName(\"/list/user/\")}>\n <Link to=\"/list/user/\" onClick={event => handleState(\"/list/user/\", event)} onKeyPress={event => event.preventDefault()}>\n <h3>{i18n.USER}</h3>\n <div className=\"stats\">\n {\n look\n ? (<>\n <div><span>{i18n.Disk}:</span> <span>{sizeFormatter(user.U_DISK)}</span></div>\n <div><span>{i18n.Bandwidth}:</span> <span>{sizeFormatter(user.U_BANDWIDTH)}</span></div>\n </>)\n : (<>\n <div><span>{i18n.users}:</span> <span>{user.U_USERS}</span></div>\n <div><span>{i18n.spnd}:</span> <span>{user.SUSPENDED_USERS}</span></div>\n </>)\n }\n </div>\n </Link>\n </div>\n <div className={statClassName(\"/list/web/\")}>\n <Link to=\"/list/web/\" onClick={event => handleState(\"/list/web/\", event)} onKeyPress={event => event.preventDefault()}>\n <h3>{i18n.WEB}</h3>\n <div className=\"stats\">\n <div><span>{i18n.domains}:</span> <span>{user.U_WEB_DOMAINS}</span></div>\n <div><span>{i18n.aliases}:</span> <span>{user.U_WEB_ALIASES}</span></div>\n <div><span>{i18n.spnd}:</span> <span>{user.SUSPENDED_WEB}</span></div>\n </div>\n </Link>\n </div>\n <div className={statClassName(\"/list/dns/\")}>\n <Link to=\"/list/dns/\" onClick={event => handleState(\"/list/dns/\", event)} onKeyPress={event => event.preventDefault()}>\n <h3>{i18n.DNS}</h3>\n <div className=\"stats\">\n <div><span>{i18n.domains}:</span> <span>{user.U_DNS_DOMAINS}</span></div>\n <div><span>{i18n.records}:</span> <span>{user.U_DNS_RECORDS}</span></div>\n <div><span>{i18n.spnd}:</span> <span>{user.SUSPENDED_DNS}</span></div>\n </div>\n </Link>\n </div>\n <div className={statClassName(\"/list/mail/\")}>\n <Link to=\"/list/mail/\" onClick={event => handleState(\"/list/mail/\", event)} onKeyPress={event => event.preventDefault()}>\n <h3>{i18n.MAIL}</h3>\n <div className=\"stats\">\n <div><span>{i18n.domains}:</span> <span>{user.U_MAIL_DOMAINS}</span></div>\n <div><span>{i18n.accounts}:</span> <span>{user.U_MAIL_ACCOUNTS}</span></div>\n <div><span>{i18n.spnd}:</span> <span>{user.SUSPENDED_MAIL}</span></div>\n </div>\n </Link>\n </div>\n <div className={statClassName(\"/list/db/\")}>\n <Link to=\"/list/db/\" onClick={event => handleState(\"/list/db/\", event)} onKeyPress={event => event.preventDefault()}>\n <h3>{i18n.DB}</h3>\n <div className=\"stats\">\n <div><span>{i18n.databases}:</span> <span>{user.U_DATABASES}</span></div>\n <div><span>{i18n.spnd}:</span> <span>{user.SUSPENDED_DB}</span></div>\n </div>\n </Link>\n </div>\n <div className={statClassName(\"/list/cron/\")}>\n <Link to=\"/list/cron/\" onClick={event => handleState(\"/list/cron/\", event)} onKeyPress={event => event.preventDefault()}>\n <h3>{i18n.CRON}</h3>\n <div className=\"stats\">\n <div><span>{i18n.jobs}:</span> <span>{user.U_CRON_JOBS}</span></div>\n <div><span>{i18n.spnd}:</span> <span>{user.SUSPENDED_CRON}</span></div>\n </div>\n </Link>\n </div>\n <div className={statClassName(\"/list/backup/\") + ' last'}>\n <Link to=\"/list/backup/\" onClick={event => handleState(\"/list/backup/\", event)} onKeyPress={event => event.preventDefault()}>\n <h3>{i18n.BACKUP}</h3>\n <div className=\"stats\">\n <div><span>{i18n.backups}:</span> <span>{user.U_BACKUPS}</span></div>\n </div>\n </Link>\n </div>\n </div>\n </div>\n );\n}\n\nexport default Menu;\n","import React, { Component } from 'react';\nimport Menu from '../../MainNav/Stat-menu/Menu';\nimport Toolbar from '../../MainNav/Toolbar/Toolbar';\nimport './MobileTopNav.scss';\n\nclass MobileTopNav extends Component {\n render() {\n return (\n <div className={this.props.class}>\n <div className=\"mobile-menu\">\n <div>\n <div>Packages</div>\n <div>IP</div>\n <div>Graphs</div>\n <div>Statistics</div>\n <div>Log</div>\n </div>\n <div>\n <div>Updates</div>\n <div>Firewall</div>\n <div className=\"fm\">File Manager</div>\n <div>Apps</div>\n <div>Server</div>\n </div>\n </div>\n <div className=\"mobile-stat-menu\">\n <Menu mobile={true} />\n </div>\n <div className=\"mobile-toolbar\">\n <Toolbar mobile={true} />\n </div>\n </div>\n );\n }\n}\n\nexport default MobileTopNav;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\nlet BASE_URL = window.location.origin;\nlet getNotificationsUri = '/api/v1/list/notifications/index.php';\nlet deleteNotificationsUri = '/api/v1/delete/notification/index.php';\n\nexport const getAppNotifications = () => {\n return axios.get(BASE_URL + getNotificationsUri, {\n params: {\n ajax: 1,\n token: getAuthToken()\n }\n });\n}\n\nexport const deleteNotification = id => {\n return axios.get(BASE_URL + deleteNotificationsUri, {\n params: {\n 'delete': 1,\n 'notification_id': id,\n token: getAuthToken()\n }\n });\n}","import React from 'react';\n\nexport default function Bell(props) {\n return (\n <svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" id=\"_24x24_On_Light_Notification\" data-name=\"24x24/On Light/Notification\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect id=\"view-box\" width=\"24\" height=\"24\" fill=\"none\" />\n <path id=\"Shape\" d=\"M6,17v-.5H2.25A2.253,2.253,0,0,1,0,14.25v-.382a2.542,2.542,0,0,1,1.415-2.289A1.248,1.248,0,0,0,2.1,10.572l.446-4.91a6.225,6.225,0,0,1,12.4,0l.446,4.91a1.26,1.26,0,0,0,.686,1.005,2.547,2.547,0,0,1,1.418,2.29v.382a2.252,2.252,0,0,1-2.25,2.25H11.5V17A2.75,2.75,0,0,1,6,17Zm1.5,0A1.25,1.25,0,0,0,10,17v-.5H7.5ZM4.045,5.8,3.6,10.708A2.738,2.738,0,0,1,2.089,12.92a1.055,1.055,0,0,0-.589.949v.382A.751.751,0,0,0,2.25,15h13A.751.751,0,0,0,16,14.25v-.382a1.054,1.054,0,0,0-.586-.948A2.739,2.739,0,0,1,13.9,10.708L13.456,5.8a4.725,4.725,0,0,0-9.411,0Z\" transform=\"translate(3.25 2.25)\" fill=\"#f8b014\" />\n </svg>);\n}\n","import React from 'react';\n\nexport default function BellUnread(props) {\n return (<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" id=\"_24x24_On_Light_Notification-Alert\" data-name=\"24x24/On Light/Notification-Alert\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect id=\"view-box\" width=\"24\" height=\"24\" fill=\"none\" />\n <path id=\"Shape\" d=\"M6,17v-.5H2.25A2.253,2.253,0,0,1,0,14.25v-.382a2.542,2.542,0,0,1,1.415-2.289A1.247,1.247,0,0,0,2.1,10.572l.446-4.91A6.227,6.227,0,0,1,10.618.286a5.477,5.477,0,0,0-.635,1.374A4.794,4.794,0,0,0,8.75,1.5,4.7,4.7,0,0,0,4.045,5.8L3.6,10.708A2.739,2.739,0,0,1,2.089,12.92a1.055,1.055,0,0,0-.589.949v.382A.751.751,0,0,0,2.25,15h13A.751.751,0,0,0,16,14.25v-.382a1.053,1.053,0,0,0-.586-.948A2.739,2.739,0,0,1,13.9,10.708l-.2-2.18a5.473,5.473,0,0,0,1.526.221l.166,1.822a1.26,1.26,0,0,0,.686,1.005,2.547,2.547,0,0,1,1.418,2.29v.382a2.252,2.252,0,0,1-2.25,2.25H11.5V17A2.75,2.75,0,0,1,6,17Zm1.5,0A1.25,1.25,0,0,0,10,17v-.5H7.5ZM15.047,6.744A3.486,3.486,0,0,1,13.5,6.28L13.456,5.8a4.7,4.7,0,0,0-1.648-3.185,3.5,3.5,0,0,1,.61-1.417A6.221,6.221,0,0,1,14.95,5.662l.1,1.081v0Z\" transform=\"translate(3.25 2.25)\" fill=\"#f8b014\" />\n <path id=\"Shape-2\" data-name=\"Shape\" d=\"M3.5,7A3.5,3.5,0,1,1,7,3.5,3.5,3.5,0,0,1,3.5,7Z\" transform=\"translate(15 2)\" fill=\"#f8b014\" />\n </svg>);\n}\n","import React, { useState, useEffect } from 'react';\nimport { getAppNotifications, deleteNotification } from 'src/ControlPanelService/Notifications';\nimport { addNotifications } from 'src/actions/Notification/notificationActions';\nimport Bell from './Bell';\nimport BellUnread from './BellUnread';\nimport { useDispatch, useSelector } from 'react-redux';\nimport './Notifications.scss';\nimport HtmlParser from 'react-html-parser';\n\nconst Notifications = () => {\n const { i18n } = useSelector(state => state.session);\n const { notifications } = useSelector(state => state.notifications);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (!notifications) {\n fetchData();\n }\n }, [notifications]);\n\n const fetchData = () => {\n setLoading(true);\n getAppNotifications()\n .then(res => {\n const result = [];\n\n for (let notification in res.data.result) {\n result.push(res.data.result[notification]);\n }\n\n dispatch(addNotifications(result));\n setLoading(false);\n })\n .catch(err => {\n console.error(err);\n setLoading(false);\n });\n }\n\n const removeNotification = id => {\n deleteNotification(id)\n .then(() => {\n fetchData();\n })\n .catch(err => console.error(err));\n }\n\n const renderOptions = () => {\n if (notifications && notifications.length) {\n return notifications.map(item => {\n return (\n <>\n <div className=\"dropdown-item\">\n <span className=\"title\"><b>{item.TOPIC}</b></span>\n <span className=\"delete-notification\" onClick={() => removeNotification(item.ID)}></span>\n </div>\n <div>{HtmlParser(item.NOTICE)}</div>\n <div className=\"dropdown-divider\"></div>\n </>\n );\n });\n } else {\n return (\n <div className=\"dropdown-item\" style={{ cursor: 'default', marginBottom: '10' }}>\n <span className=\"title\">{i18n['no notifications']}</span>\n </div>\n );\n }\n }\n\n return (\n <div className=\"btn-group\">\n <button type=\"button\" className=\"btn btn-danger dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <div className=\"bell\">\n {\n notifications && notifications.length\n ? <BellUnread />\n : <Bell />\n }\n </div>\n </button>\n <div className=\"dropdown-menu\">\n {loading ? 'Loading' : renderOptions()}\n </div>\n </div>\n );\n};\n\nexport default Notifications;","import { ADD_NOTIFICATIONS, REMOVE_NOTIFICATIONS } from './notificationTypes';\n\nexport const addNotifications = value => {\n return {\n type: ADD_NOTIFICATIONS,\n value\n };\n};\n\nexport const removeNotifications = () => {\n return {\n type: REMOVE_NOTIFICATIONS,\n value: []\n };\n};\n","import React, { useState } from 'react';\nimport { addActiveElement } from '../../../actions/MainNavigation/mainNavigationActions';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { logout } from 'src/actions/Session/sessionActions';\nimport Notifications from './Notifications/Notifications';\nimport { useSelector, useDispatch } from \"react-redux\";\nimport Spinner from 'src/components/Spinner/Spinner';\nimport { Link, useHistory } from \"react-router-dom\";\nimport './Panel.scss';\n\nconst Panel = props => {\n const { i18n, userName, session: { look, user } } = useSelector(state => state.session);\n const session = useSelector(state => state.session);\n const { activeElement, focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const history = useHistory();\n const [loading, setLoading] = useState(false);\n const [state, setState] = useState({\n smallNavigationClass: 'small-navigation hidden'\n });\n\n const toggleNavigation = event => {\n props.showTopNav();\n\n if (state.smallNavigationClass === 'small-navigation hidden') {\n setState({ ...state, smallNavigationClass: 'small-navigation show' });\n } else {\n setState({ ...state, smallNavigationClass: 'small-navigation hidden' });\n }\n }\n\n const className = (activeName, extraClass = '') => {\n let className = 'top-link';\n\n if (activeName === activeElement) {\n className += ' active';\n }\n\n if (activeName === focusedElement) {\n className += ' focus';\n }\n\n return className + ` ${extraClass}`;\n }\n\n const handleState = (tab, event) => {\n if (`${window.location.pathname}${window.location.search}` === tab) {\n return event.preventDefault();\n }\n\n dispatch(addActiveElement(tab));\n }\n\n const signOut = () => {\n setLoading(true);\n\n dispatch(logout())\n .then(() => {\n setLoading(false);\n },\n error => {\n setLoading(false);\n console.error(error);\n });\n }\n\n return (\n <div className=\"panel-wrapper\">\n {loading && <Spinner />}\n\n <div className={`top-panel ${look ? 'long-profile' : ''}`}>\n <div className=\"container left-menu\">\n <div className=\"logo\">\n <Link to=\"/list/user/\" onClick={() => dispatch(addActiveElement('/list/user/'))}>\n <div>\n <img src=\"/images/white_logo.png\" alt=\"Logo\" />\n </div>\n </Link>\n </div>\n {userName === 'admin' && (<>\n <div className={className(\"/list/package/\")}>\n <Link to=\"/list/package/\" onClick={event => handleState(\"/list/package/\", event)} onKeyPress={event => event.preventDefault()}>{i18n.Packages}</Link>\n </div>\n <div className={className(\"/list/ip/\")}>\n <Link to=\"/list/ip/\" onClick={event => handleState(\"/list/ip/\", event)} onKeyPress={event => event.preventDefault()}>{i18n.IP}</Link>\n </div>\n <div className={className(\"/list/rrd/\")}>\n <Link to=\"/list/rrd/\" onClick={event => handleState(\"/list/rrd/\", event)} onKeyPress={event => event.preventDefault()}>{i18n.Graphs}</Link>\n </div>\n </>)}\n <div className={className(\"/list/stats/\")}>\n <Link to=\"/list/stats/\" onClick={event => handleState(\"/list/stats/\", event)} onKeyPress={event => event.preventDefault()}>{i18n.Statistics}</Link>\n </div>\n <div className={className(\"/list/log/\")}>\n <Link to=\"/list/log/\" onClick={event => handleState(\"/list/log/\", event)} onKeyPress={event => event.preventDefault()}>{i18n.Log}</Link>\n </div>\n {userName === 'admin' && (<>\n <div className={className(\"/list/updates/\")}>\n <Link to=\"/list/updates/\" onClick={event => handleState(\"/list/updates/\", event)} onKeyPress={event => event.preventDefault()}>{i18n.Updates}</Link>\n </div>\n {session.session.FIREWALL_SYSTEM && <div className={className(\"/list/firewall/\")}>\n <Link to=\"/list/firewall/\" onClick={event => handleState(\"/list/firewall/\", event)} onKeyPress={event => event.preventDefault()}>{i18n.Firewall}</Link>\n </div>}\n </>)}\n {session.session.FILEMANAGER_KEY && <div className={className(\"/list/directory/\")}>\n <Link to=\"/list/directory/\">{i18n['File Manager']}</Link>\n </div>}\n {session.session.SOFTACULOUS === \"yes\" && <div className={className(\"/softaculous/\")}><a href=\"/softaculous/\">{i18n.Apps ?? 'Apps'}</a>\n </div>}\n {userName === 'admin' && (\n <div className={className(\"/list/server/\")}>\n <Link to=\"/list/server/\" onClick={event => handleState(\"/list/server/\", event)} onKeyPress={event => event.preventDefault()}>{i18n.Server}</Link>\n </div>\n )}\n </div>\n <div className=\"container profile-menu\">\n <Notifications />\n <div>\n <Link to={`/edit/user?user=${session.userName}`}>\n {look\n ? <div className=\"long-username\">\n <span>{user}</span>\n <FontAwesomeIcon icon=\"long-arrow-alt-right\" />\n <span>{look}</span>\n </div>\n : session.userName\n }\n </Link>\n </div>\n <div><button onClick={signOut}>{i18n['Log out']}</button></div>\n </div>\n </div>\n\n <div className=\"top-panel small-device\">\n <div className=\"container left-menu\">\n <div className=\"logo\">LOGO</div>\n </div>\n <div className=\"container hamburger\" onClick={toggleNavigation}>\n <span className=\"bar\"></span>\n <span className=\"bar\"></span>\n <span className=\"bar\"></span>\n </div>\n <div className=\"container profile-menu\">\n <div className=\"bell\">\n <FontAwesomeIcon icon=\"bell\" />\n </div>\n <div><Link to={`/edit/user?user=${session.userName}`}>{session.userName}</Link></div>\n <div><button onClick={signOut}>{i18n['Log out']}</button></div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default Panel;","import React, { useState, useEffect, useCallback } from 'react';\nimport { addFocusedElement, addActiveElement, removeActiveElement, removeFocusedElement } from \"../../actions/MainNavigation/mainNavigationActions\";\nimport * as ControlPanelContentActions from \"../../actions/ControlPanelContent/controlPanelContentActions\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport MobileTopNav from '../MainNav/Mobile/MobileTopNav';\nimport Menu from '../MainNav/Stat-menu/Menu';\nimport Panel from '../MainNav/Panel/Panel';\nimport './MainNav.scss';\nimport { useHistory } from 'react-router';\nimport Spinner from '../Spinner/Spinner';\n\nconst MainNav = () => {\n const history = useHistory();\n const [loading, setLoading] = useState(true);\n const [state, setState] = useState({\n menuHeight: 135,\n tabs: [],\n showTopNav: false\n });\n\n const { userName, session: { look } } = useSelector(state => state.session);\n const { user } = useSelector(state => state.menuCounters);\n const { activeElement, focusedElement, adminMenuTabs, userMenuTabs } = useSelector(state => state.mainNavigation);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (!userName || !Object.entries(user).length) {\n return history.push('/login');\n }\n\n const tabs = look ? userMenuTabs : adminMenuTabs;\n setState({ ...state, tabs });\n\n setLoading(false);\n }, [userName, user, history]);\n\n const controlFocusedTabWithCallback = useCallback(event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus') || document.querySelector('textarea:focus');\n let currentActiveTabPositionInArray;\n\n if (isSearchInputFocused) {\n return;\n }\n\n if (event.keyCode === 37 || event.keyCode === 39) {\n if (controlPanelFocusedElement) {\n dispatch(ControlPanelContentActions.removeControlPanelContentFocusedElement());\n }\n\n if (!focusedElement) {\n dispatch(addFocusedElement(activeElement));\n currentActiveTabPositionInArray = state.tabs.indexOf(activeElement);\n } else {\n currentActiveTabPositionInArray = state.tabs.indexOf(focusedElement);\n }\n }\n\n if (currentActiveTabPositionInArray === -1) {\n return;\n }\n\n if (event.keyCode === 37) {\n let newFocusedMenuTab = handleLeftArrowKey(state.tabs, currentActiveTabPositionInArray);\n dispatch(addFocusedElement(newFocusedMenuTab));\n } else if (event.keyCode === 39) {\n let newFocusedMenuTab = handleRightArrowKey(state.tabs, currentActiveTabPositionInArray);\n dispatch(addFocusedElement(newFocusedMenuTab));\n } else if (event.keyCode === 13) {\n if (!controlPanelFocusedElement && focusedElement && (focusedElement !== activeElement)) {\n history.push({ pathname: focusedElement });\n dispatch(addActiveElement(focusedElement));\n dispatch(removeFocusedElement());\n }\n }\n }, [activeElement, focusedElement, controlPanelFocusedElement]);\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleTopNav);\n window.addEventListener(\"keyup\", controlFocusedTabWithCallback);\n window.addEventListener(\"scroll\", hideMenu);\n\n return () => {\n window.removeEventListener(\"resize\", handleTopNav);\n window.removeEventListener(\"keyup\", controlFocusedTabWithCallback);\n window.removeEventListener(\"scroll\", hideMenu);\n };\n }, [controlFocusedTabWithCallback]);\n\n useEffect(() => {\n dispatch(removeFocusedElement());\n }, [activeElement]);\n\n useEffect(() => {\n dispatch(addActiveElement(history.location.pathname));\n }, []);\n\n const handleLeftArrowKey = (array, indexInArray) => {\n if (indexInArray === 0) {\n return array[array.length - 1];\n } else {\n return array[indexInArray - 1];\n }\n }\n\n const handleRightArrowKey = (array, indexInArray) => {\n if (indexInArray === (array.length - 1)) {\n return array[0];\n } else {\n return array[indexInArray + 1];\n }\n }\n\n const handleTopNav = () => {\n if (document.documentElement.clientWidth < 900) {\n setState({\n ...state,\n menuHeight: 45\n });\n } else {\n setState({\n ...state,\n menuHeight: 135\n });\n }\n }\n\n const hideMenu = () => {\n if (document.documentElement.clientWidth > 900) {\n let scrollTop = window.scrollY;\n let menuHeight = Math.max(45, 135 - scrollTop);\n setState({ ...state, menuHeight });\n }\n }\n\n const showTopNav = () => {\n let showTopNav = !state.showTopNav;\n setState({ ...state, showTopNav });\n }\n\n const topNavClassName = () => {\n if (state.showTopNav) {\n return \"nav-wrapper show-nav\";\n } else {\n return \"nav-wrapper hide-nav\";\n }\n }\n\n const topNavMobile = () => {\n if (state.showTopNav) {\n return \"mobile-top-nav-wrapper show\";\n } else {\n return \"mobile-top-nav-wrapper hide\";\n }\n }\n const topNavigation = () => {\n if (document.documentElement.clientWidth > 900) {\n return (\n <div className={topNavClassName()}>\n <Menu menuHeight={state.menuHeight} mobile={false} />\n </div>\n );\n } else {\n return <MobileTopNav class={topNavMobile()} />;\n }\n }\n\n return (\n <div className=\"main-nav\">\n {\n loading\n ? <Spinner />\n : (<>\n <Panel showTopNav={showTopNav} visibleNav={state.showTopNav} />\n {topNavigation()}\n </>)\n }\n </div>\n );\n}\n\nexport default MainNav;","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Container from '../../ControlPanel/Container/Container';\n\nimport './style.scss';\n\nconst Exclusion = ({ data, focused }) => {\n const { i18n } = useSelector(state => state.session);\n\n const renderExclusionItems = () => {\n if (!Array.isArray(data.ITEMS)) {\n for (let item in data.ITEMS) {\n return <><b>{item}</b> &nbsp; {data.ITEMS[item]}<br /></>;\n }\n } else {\n return i18n['no exclusions'];\n }\n }\n\n return (\n <div className={focused ? 'statistic-item focused' : 'statistic-item'} id={data.NAME}>\n <Container className=\"l-col w-15\" />\n <Container className=\"r-col w-85\">\n <div className=\"stats\">\n <div className=\"name\">{data.NAME}</div>\n <div className=\"exclusion-items\">{renderExclusionItems()}</div>\n </div>\n </Container>\n </div>\n );\n}\n\nexport default Exclusion;\n","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from 'src/actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from 'src/actions/MainNavigation/mainNavigationActions';\nimport * as MainNavigation from 'src/actions/MainNavigation/mainNavigationActions';\nimport SearchInput from 'src/components/MainNav/Toolbar/SearchInput/SearchInput';\nimport LeftButton from 'src/components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Toolbar from 'src/components/MainNav/Toolbar/Toolbar';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet';\nimport Exclusion from 'src/components/Backup/Exclusion';\nimport { getBackupExclusions } from 'src/ControlPanelService/Backup';\n\nconst BackupExclusions = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [state, setState] = useState({\n exclusions: [],\n loading: false,\n total: 0\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/backup/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData();\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n };\n }, [controlPanelFocusedElement, focusedElement, state.exclusions]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = exclusions => {\n exclusions[0]['FOCUSED'] = exclusions[0]['NAME'];\n setState({ ...state, exclusions });\n dispatch(addControlPanelContentFocusedElement(exclusions[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let exclusions = [...state.exclusions];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(exclusions);\n return;\n }\n\n let focusedElementPosition = exclusions.findIndex(exclusion => exclusion.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== exclusions.length - 1) {\n let nextFocusedElement = exclusions[focusedElementPosition + 1];\n exclusions[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, exclusions });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let exclusions = [...state.exclusions];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(exclusions);\n return;\n }\n\n let focusedElementPosition = exclusions.findIndex(exclusion => exclusion.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = exclusions[focusedElementPosition - 1];\n exclusions[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, exclusions });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const fetchData = () => {\n setState({ ...state, loading: true });\n\n getBackupExclusions()\n .then(result => {\n setState({\n exclusions: reformatData(result.data.data),\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n\n const reformatData = data => {\n let exclusions = [];\n\n for (let i in data) {\n exclusions.push({ NAME: i, ITEMS: data[i] });\n }\n\n return exclusions;\n }\n\n const exclusions = () => {\n return state.exclusions.map((item, index) => <Exclusion data={item} key={index} focused={controlPanelFocusedElement === item.NAME} />);\n }\n\n return (\n <div className=\"exclusions-list\">\n <Helmet>\n <title>{`Vesta - ${i18n.BACKUP}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <LeftButton href=\"/edit/backup/exclusions\" list=\"server\" name={i18n.configure} showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"exclusions-wrapper\">\n {state.loading ? <Spinner /> : exclusions()}\n </div>\n </div>\n );\n}\n\nexport default BackupExclusions;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nexport default function MailAccount(props) {\n const { data, domain } = props;\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n const printStat = (stat, text) => {\n if (text === 'no') {\n return <div className=\"crossed\">{stat}</div>;\n }\n\n return <div>{stat}: <span className=\"stat\">{text}</span></div>;\n }\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(props.data.NAME, 'add');\n } else {\n props.toggleFav(props.data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(props.data.NAME);\n }\n\n const handleSuspend = () => {\n let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend';\n props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/mail/index.php?domain=${domain}&account=${data.NAME}`);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/mail/index.php?domain=${domain}&account=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n focused={data.FOCUSED}\n checked={data.isChecked}\n date={data.DATE}\n starred={data.STARRED}\n toggleFav={toggleFav}\n checkItem={checkItem}\n suspended={data.SUSPENDED === 'yes'}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{`${data.NAME}@${domain}`}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"bandwidth\">{i18n.Disk} <span><span className=\"stat\">{data.U_DISK}</span>&nbsp;{i18n.mb}</span></div>\n </Container>\n <Container className=\"c-2\">\n <div>{i18n['Quota']}: <span><span className=\"stat\">{data.QUOTA}</span>&nbsp; {i18n.mb}</span></div>\n <div>{i18n['Forward to']}: <span className=\"stat email\">{data.FWD}</span></div>\n </Container>\n <Container className=\"c-3\">\n {printStat(i18n['Autoreply'], data.AUTOREPLY)}\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n\n <div>\n <Link className=\"link-edit\" to={`/edit/mail/?domain=${domain}&account=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button\n className=\"link-gray\"\n onClick={() => handleSuspend()}>\n {i18n[data.suspend_action]}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { bulkMailAccountAction, getMailAccountList, handleAction } from '../../ControlPanelService/Mail';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport MailAccount from 'src/components/MailAccount/MailAccount';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { Link } from 'react-router-dom';\n\nimport './MailAccounts.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nexport default function MailAccounts(props) {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: '',\n });\n const [state, setState] = useState({\n mailAccounts: [],\n mailAccountsFav: [],\n domain: props.domain,\n toggledAll: false,\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.mailAccounts]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = mailAccounts => {\n mailAccounts[0]['FOCUSED'] = mailAccounts[0]['NAME'];\n setState({ ...state, mailAccounts });\n dispatch(addControlPanelContentFocusedElement(mailAccounts[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let mailAccounts = [...state.mailAccounts];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(mailAccounts);\n return;\n }\n\n let focusedElementPosition = mailAccounts.findIndex(mailAccount => mailAccount.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== mailAccounts.length - 1) {\n let nextFocusedElement = mailAccounts[focusedElementPosition + 1];\n mailAccounts[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, mailAccounts });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let mailAccounts = [...state.mailAccounts];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(mailAccounts);\n return;\n }\n\n let focusedElementPosition = mailAccounts.findIndex(mailAccount => mailAccount.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = mailAccounts[focusedElementPosition - 1];\n mailAccounts[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, mailAccounts });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return handleEdit();\n case 83: return handleSuspend();\n default: break;\n }\n }\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/mail?domain=${props.domain}&account=${controlPanelFocusedElement}`);\n }\n\n const handleSuspend = () => {\n const { mailAccounts } = state;\n let currentMailData = mailAccounts.filter(mail => mail.NAME === controlPanelFocusedElement)[0];\n let suspendedStatus = currentMailData.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n\n displayModal(currentMailData.suspend_conf, `/api/v1/${suspendedStatus}/mail/index.php?domain=${props.domain}&account=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { mailAccounts } = state;\n let currentMailData = mailAccounts.filter(mail => mail.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentMailData.delete_conf, `/api/v1/delete/mail/index.php?domain=${props.domain}&account=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getMailAccountList(props.domain)\n .then(result => {\n setState({\n ...state,\n mailAccounts: reformatData(result.data.data),\n webMail: result.data.webmail,\n selection: [],\n toggledAll: false,\n mailAccountsFav: result.data.mailAccountsFav,\n totalAmount: result.data.totalAmount\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let mailAccounts = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n mailAccounts.push(data[i]);\n }\n\n return mailAccounts;\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const mailAccounts = () => {\n const { mailAccounts } = state;\n const mailAccountsFav = { ...state.mailAccountsFav };\n const result = [];\n\n mailAccounts.forEach(mailAccount => {\n mailAccount.FOCUSED = controlPanelFocusedElement === mailAccount.NAME;\n\n if (mailAccountsFav[mailAccount.NAME]) {\n mailAccount.STARRED = mailAccountsFav[mailAccount.NAME];\n } else {\n mailAccount.STARRED = 0;\n }\n\n result.push(mailAccount);\n });\n let sortedResult = sortArray(result);\n\n return sortedResult.map((item, index) => {\n return <MailAccount data={item} key={index} domain={state.domain} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, mailAccounts } = state;\n let duplicate = [...selection];\n let mailAccountsDuplicate = mailAccounts;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = mailAccountsDuplicate.findIndex(mailAccount => mailAccount.NAME === name);\n mailAccountsDuplicate[incomingItem].isChecked = !mailAccountsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, mailAccounts: mailAccountsDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortingColumn = sortBy(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Date: date, Accounts, Disk, Starred } = i18n;\n\n switch (sorting) {\n case date: return 'DATE';\n case Accounts: return 'ACCOUNTS';\n case Disk: return 'U_DISK';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n const { mailAccountsFav } = state;\n let mailAccountsFavDuplicate = mailAccountsFav;\n\n if (type === 'add') {\n mailAccountsFavDuplicate[value] = 1;\n\n addFavorite(value, 'mail_acc')\n .then(() => {\n setState({ ...state, mailAccountsFav: mailAccountsFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n mailAccountsFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'mail_acc')\n .then(() => {\n setState({ ...state, mailAccountsFav: mailAccountsFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const mailAccountsDuplicate = [...state.mailAccounts];\n\n if (toggled) {\n let mailAccountNames = [];\n\n let mailAccounts = mailAccountsDuplicate.map(mailAccount => {\n mailAccountNames.push(mailAccount.NAME);\n mailAccount.isChecked = true;\n return mailAccount;\n });\n\n setState({ ...state, mailAccounts, selection: mailAccountNames, toggledAll: toggled });\n } else {\n let mailAccounts = mailAccountsDuplicate.map(mailAccount => {\n mailAccount.isChecked = false;\n return mailAccount;\n });\n\n setState({ ...state, mailAccounts, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n if (selection.length && action) {\n setLoading(true);\n bulkMailAccountAction(action, props.domain, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: true,\n text: text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n return (\n <div className=\"mail-accounts\">\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name={i18n['Add Mail Account']} href={`/add/mail/?domain=${props.domain}`} showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <a href={state.webMail} className=\"button-extra\" type=\"submit\">{i18n['open webmail']}</a>\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='mailList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"mailAccountList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n {loading\n ? <Spinner />\n : (\n <>\n <div className=\"mail-accounts-wrapper\">\n <div className=\"subtitle\">\n <span>{`${i18n['Listing']} ${state.domain}`}</span>\n </div>\n {mailAccounts()}\n </div>\n <div className=\"footer-actions-wrapper\">\n <div className=\"total\">{state.totalAmount}</div>\n <div className=\"back\">\n <Link to=\"/list/mail/\">{i18n['Back']}</Link>\n </div>\n </div>\n </>\n )\n }\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}","import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport { Link } from 'react-router-dom';\nimport './Mail.scss';\nimport { useSelector } from 'react-redux';\n\nconst Mail = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n const printStat = (stat, text) => {\n if (text === 'no') {\n return <div className=\"crossed\">{stat}</div>;\n }\n\n return <div>{stat}: <span className=\"stat\">{text}</span></div>;\n }\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(props.data.NAME, 'add');\n } else {\n props.toggleFav(props.data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(props.data.NAME);\n }\n\n const handleSuspend = () => {\n let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend';\n props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/mail/index.php?domain=${data.NAME}`);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/mail/index.php?domain=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n focused={data.FOCUSED}\n checked={data.isChecked}\n date={data.DATE}\n starred={data.STARRED}\n toggleFav={toggleFav}\n checkItem={checkItem}\n suspended={data.SUSPENDED === 'yes'}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.NAME}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"bandwidth\">{i18n.Disk} <span><span className=\"stat\">{data.U_DISK}</span>{i18n.mb}</span></div>\n </Container>\n <Container className=\"c-2\">\n {printStat(i18n['AntiVirus Support'], data.ANTIVIRUS)}\n {printStat(i18n['DKIM Support'], data.DKIM)}\n </Container>\n <Container className=\"c-3\">\n {printStat(i18n['AntiSpam Support'], data.ANTISPAM)}\n <div>{i18n['Catchall email']}: <span className=\"stat catchall-mail\">{data.CATCHALL}</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <Link className=\"link-gray\" to={`/list/mail/?domain=${data.NAME}`}>\n {data.list_accounts_button}\n {data.FOCUSED ? <span className=\"shortcut-button\">L</span> : <FontAwesomeIcon icon=\"list\" />}\n </Link>\n </div>\n\n <div>\n <Link className=\"link-edit\" to={`/add/mail/?domain=${data.NAME}`}>\n {i18n['add account']}\n {data.FOCUSED ? <span className=\"shortcut-button\">N</span> : <FontAwesomeIcon icon=\"plus\" />}\n </Link>\n </div>\n\n <div>\n <Link className=\"link-edit\" to={`/edit/mail/?domain=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button\n className=\"link-gray\"\n onClick={() => handleSuspend()}>\n {i18n[data.suspend_action]}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default Mail;","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport { bulkAction, getMailList, handleAction } from '../../ControlPanelService/Mail';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport Spinner from '../../components/Spinner/Spinner';\nimport Mail from '../../components/Mail/Mail';\nimport './Mails.scss';\n\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Mails = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: '',\n });\n const [state, setState] = useState({\n mails: [],\n mailFav: [],\n toggledAll: false,\n webMail: '',\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/mail/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.mails]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = mails => {\n mails[0]['FOCUSED'] = mails[0]['NAME'];\n setState({ ...state, mails });\n dispatch(addControlPanelContentFocusedElement(mails[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let mails = [...state.mails];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(mails);\n return;\n }\n\n let focusedElementPosition = mails.findIndex(mail => mail.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== mails.length - 1) {\n let nextFocusedElement = mails[focusedElementPosition + 1];\n mails[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, mails });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let mails = [...state.mails];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(mails);\n return;\n }\n\n let focusedElementPosition = mails.findIndex(mail => mail.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = mails[focusedElementPosition - 1];\n mails[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, mails });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return handleEdit();\n case 76: return handleLogs();\n case 78: return handleAddRecord();\n case 83: return handleSuspend();\n default: break;\n }\n }\n }\n\n const handleAddRecord = () => {\n props.history.push(`/add/mail/?domain=${controlPanelFocusedElement}`);\n }\n\n const handleLogs = () => {\n props.history.push(`/list/mail?domain=${controlPanelFocusedElement}&type=access`);\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/mail?domain=${controlPanelFocusedElement}`);\n }\n\n const handleSuspend = () => {\n const { mails } = state;\n let currentMailData = mails.filter(mail => mail.NAME === controlPanelFocusedElement)[0];\n let suspendedStatus = currentMailData.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n\n displayModal(currentMailData.suspend_conf, `/api/v1/${suspendedStatus}/mail/index.php?domain=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { mails } = state;\n let currentMailData = mails.filter(mail => mail.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentMailData.delete_conf, `/api/v1/delete/mail/index.php?domain=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getMailList()\n .then(result => {\n setState({\n ...state,\n mails: reformatData(result.data.data),\n webMail: result.data.webMail,\n mailFav: result.data.mailFav,\n selection: [],\n toggledAll: false,\n totalAmount: result.data.totalAmount\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let mails = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n mails.push(data[i]);\n }\n\n return mails;\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const mails = () => {\n const { mails } = state;\n const mailFav = { ...state.mailFav };\n const result = [];\n\n mails.forEach(mail => {\n mail.FOCUSED = controlPanelFocusedElement === mail.NAME;\n\n if (mailFav[mail.NAME]) {\n mail.STARRED = mailFav[mail.NAME];\n } else {\n mail.STARRED = 0;\n }\n\n result.push(mail);\n });\n let sortedResult = sortArray(result);\n\n return sortedResult.map((item, index) => {\n return <Mail data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, mails } = state;\n let duplicate = [...selection];\n let mailsDuplicate = mails;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = mailsDuplicate.findIndex(mail => mail.NAME === name);\n mailsDuplicate[incomingItem].isChecked = !mailsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, mails: mailsDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortingColumn = sortBy(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Date, Domains, Accounts, Disk, Starred } = i18n;\n\n switch (sorting) {\n case Date: return 'DATE';\n case Domains: return 'domain_account';\n case Accounts: return 'ACCOUNTS';\n case Disk: return 'U_DISK';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n const { mailFav } = state;\n let mailFavDuplicate = mailFav;\n\n if (type === 'add') {\n mailFavDuplicate[value] = 1;\n\n addFavorite(value, 'mail')\n .then(() => {\n setState({ ...state, mailFav: mailFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n mailFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'mail')\n .then(() => {\n setState({ ...state, mailFav: mailFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const mailsDuplicate = [...state.mails];\n\n if (toggled) {\n let mailNames = [];\n\n let mails = mailsDuplicate.map(mail => {\n mailNames.push(mail.NAME);\n mail.isChecked = true;\n return mail;\n });\n\n setState({ ...state, mails, selection: mailNames, toggledAll: toggled });\n } else {\n let mails = mailsDuplicate.map(mail => {\n mail.isChecked = false;\n return mail;\n });\n\n setState({ ...state, mails, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setLoading(true);\n bulkAction(action, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: true,\n text: text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n return (\n <div className=\"mails\">\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name=\"Add Mail Domain\" href=\"/add/mail\" showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <a href={state.webMail} className=\"button-extra\" type=\"submit\">{i18n['open webMail']}</a>\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='mailList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"mailList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"mails-wrapper\">\n {loading\n ? <Spinner />\n : (<>\n {mails()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)}\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Mails;","import React, { useEffect, useState } from 'react';\nimport MailAccounts from '../MailAccounts/MailAccounts';\nimport { useHistory } from 'react-router-dom';\nimport Mails from '../Mails/Mails';\nimport QueryString from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\n\nexport default function MailWrapper(props) {\n const { i18n } = useSelector(state => state.session);\n const [mailDomain, setMailDomain] = useState('');\n const history = useHistory();\n\n useEffect(() => {\n const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n\n if (parsedQueryString.domain) {\n setMailDomain(parsedQueryString.domain);\n } else {\n setMailDomain('');\n }\n }, [history.location]);\n\n return (\n <>\n <Helmet>\n <title>{`Vesta - ${i18n.MAIL}`}</title>\n </Helmet>\n {\n mailDomain\n ? <MailAccounts {...props} domain={mailDomain} changeSearchTerm={props.handleSearchTerm} />\n : <Mails {...props} changeSearchTerm={props.handleSearchTerm} />\n }\n </>\n );\n}","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nexport default function DnsRecord({ data, domain, handleModal, ...props }) {\n const { i18n } = useSelector(state => state.session);\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(data.NAME, 'add');\n } else {\n props.toggleFav(data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(data.NAME);\n }\n\n const handleDelete = () => {\n handleModal(data.delete_conf, `/api/v1/delete/dns/?domain=${domain}&record_id=${data.ID}`);\n }\n\n const handleSuspend = () => {\n handleModal(data.suspend_conf, `/api/v1/${data.suspend_action}/dns/?domain=${domain}&record_id=${data.ID}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n date={data.DATE}\n toggleFav={toggleFav}\n checkItem={checkItem}\n starred={data.STARRED}\n focused={data.FOCUSED}\n checked={data.isChecked}\n suspended={data.SUSPENDED === 'yes'}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.dnsRecord}</div>\n <br />\n <div className=\"stats\">\n <Container className=\"c-1\">\n <span className=\"stat\">{`${data.RECORD.substring(0, 12)}${data.RECORD.length > 12 ? '...' : ''}`}</span>\n </Container>\n <Container className=\"c-2\">\n <span className=\"stat\">{data.TYPE}</span>\n </Container>\n <Container className=\"c-3\">\n <span className=\"stat\">{data.PRIORITY}</span>\n </Container>\n <Container className=\"c-4 long-value\">\n <span className=\"stat\">{data.VALUE}</span>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <Link className=\"link-edit\" to={`/edit/dns/?domain=${domain}&record_id=${data.ID}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button\n className=\"link-gray\"\n onClick={handleSuspend}>\n {data.suspend_action}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { bulkAction, getDNSRecordsList, handleAction } from '../../ControlPanelService/Dns';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from 'src/components/ControlPanel/Modal/Modal';\nimport DnsRecord from 'src/components/DNSRecord/DNSRecord';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { Link, useHistory } from 'react-router-dom';\nimport QueryString from 'qs';\n\nimport './DNSRecords.scss';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nexport default function DnsRecords(props) {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const history = useHistory();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: '',\n });\n const [state, setState] = useState({\n dnsRecords: [],\n dnsRecordFav: [],\n domain: '',\n toggledAll: false,\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.dnsRecords]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = dnsRecords => {\n dnsRecords[0]['FOCUSED'] = dnsRecords[0]['NAME'];\n setState({ ...state, dnsRecords });\n dispatch(addControlPanelContentFocusedElement(dnsRecords[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let dnsRecords = [...state.dnsRecords];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(dnsRecords);\n return;\n }\n\n let focusedElementPosition = dnsRecords.findIndex(dnsRecord => dnsRecord.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== dnsRecords.length - 1) {\n let nextFocusedElement = dnsRecords[focusedElementPosition + 1];\n dnsRecords[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, dnsRecords });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let dnsRecords = [...state.dnsRecords];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(dnsRecords);\n return;\n }\n\n let focusedElementPosition = dnsRecords.findIndex(dnsRecord => dnsRecord.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = dnsRecords[focusedElementPosition - 1];\n dnsRecords[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, dnsRecords });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n if (event.keyCode === 13) {\n return handleEdit();\n } else if (event.keyCode === 8) {\n return handleDelete();\n }\n }\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/dns/?domain=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { databases } = state;\n let currentDatabaseData = databases.filter(database => database.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentDatabaseData.delete_conf, `/api/v1/delete/database/?domain=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n let parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n setLoading(true);\n return new Promise((resolve, reject) => {\n getDNSRecordsList(parsedQueryString.domain || '')\n .then(result => {\n setState({\n ...state,\n dnsRecords: reformatData(result.data.data),\n dnsRecordFav: result.data.dnsRecordsFav,\n totalAmount: result.data.totalAmount,\n domain: parsedQueryString.domain,\n toggledAll: false,\n selection: []\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let dnsRecords = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n dnsRecords.push(data[i]);\n }\n\n return dnsRecords;\n }\n\n const dnsRecords = () => {\n const { dnsRecords } = state;\n const result = [];\n const dnsRecordFav = { ...state.dnsRecordFav };\n\n dnsRecords.forEach(dnsRecord => {\n dnsRecord.FOCUSED = controlPanelFocusedElement === dnsRecord.NAME;\n\n if (dnsRecordFav[dnsRecord.NAME]) {\n dnsRecord.STARRED = dnsRecordFav[dnsRecord.NAME];\n } else {\n dnsRecord.STARRED = 0;\n }\n\n result.push(dnsRecord);\n });\n\n return result.map((item, index) => {\n return <DnsRecord data={item} key={index} domain={state.domain} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, dnsRecords } = state;\n let duplicate = [...selection];\n let dnsDuplicate = dnsRecords;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = dnsDuplicate.findIndex(dns => dns.NAME === name);\n dnsDuplicate[incomingItem].isChecked = !dnsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, dnsRecords: dnsDuplicate, selection: duplicate });\n }\n\n const toggleFav = (value, type) => {\n const { dnsRecordFav } = state;\n let dnsRecFavDuplicate = dnsRecordFav;\n\n if (type === 'add') {\n dnsRecFavDuplicate[value] = 1;\n\n addFavorite(value, 'dns_rec')\n .then(() => {\n setState({ ...state, dnsRecordFav: dnsRecFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n dnsRecFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'dns_rec')\n .then(() => {\n setState({ ...state, dnsRecordFav: dnsRecFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const dnsRecordsDuplicate = [...state.dnsRecords];\n\n if (toggled) {\n let dnsRecordNames = []\n\n let dnsRecords = dnsRecordsDuplicate.map(dnsRecord => {\n dnsRecordNames.push(dnsRecord.NAME);\n dnsRecord.isChecked = true;\n return dnsRecord;\n });\n\n setState({ ...state, dnsRecords, selection: dnsRecordNames, toggledAll: toggled });\n } else {\n let dnsRecords = dnsRecordsDuplicate.map(dnsRecord => {\n dnsRecord.isChecked = false;\n return dnsRecord;\n });\n\n setState({ ...state, dnsRecords, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setLoading(true);\n bulkAction(action, selection, state.domain)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: true,\n text: text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n return (\n <div className=\"dns-records\">\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name={i18n['Add DNS Record']} href={`/add/dns/?domain=${state.domain}`} showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='dnsList' bulkAction={bulk} />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n {loading\n ? <Spinner />\n : (\n <>\n <div className=\"dns-records-wrapper\">\n <div className=\"subtitle\">\n <span>{`${i18n['Listing']} ${state.domain}`}</span>\n </div>\n {dnsRecords()}\n </div>\n <div className=\"footer-actions-wrapper\">\n <div className=\"total\">{state.totalAmount}</div>\n <div className=\"back\">\n <Link to=\"/list/dns/\">{i18n['Back']}</Link>\n </div>\n </div>\n </>\n )\n }\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}","import React from 'react';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport Container from '../ControlPanel/Container/Container';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport './DomainNameSystem.scss';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nconst DomainNameSystem = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(props.data.NAME, 'add');\n } else {\n props.toggleFav(props.data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(props.data.NAME);\n }\n\n const handleSuspend = () => {\n let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend';\n props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/dns/index.php?domain=${data.NAME}`);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_conf, `/api/v1/delete/dns/index.php?domain=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n checked={data.isChecked}\n starred={data.STARRED}\n date={data.DATE}\n toggleFav={toggleFav}\n checkItem={checkItem}\n suspended={data.SUSPENDED === 'yes'}\n focused={data.FOCUSED} >\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.NAME} <span className=\"dns-records\">/ {data.RECORDS}</span></div>\n <br />\n <div className=\"stats\">\n <Container className=\"c-1 w-35\">\n <div className=\"ip\">{data.IP}</div>\n <div className=\"soa\"><span className=\"stat\">{data.SOA}</span></div>\n </Container>\n <Container className=\"c-2 w-30\">\n <div>{i18n.TTL}: <span className=\"stat\">{data.TTL}</span></div>\n <div>{i18n.Serial}: <span className=\"stat\">{data.SERIAL}</span></div>\n </Container>\n <Container className=\"c-3 w-35\">\n <div>{i18n.Template}: <span className=\"stat\">{data.TPL}</span></div>\n <div>{i18n.Expire}: <span className=\"stat\">{data.EXP}</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <Link className=\"link-gray\" to={`/list/dns/?domain=${data.NAME}`}>\n {data.RECORDS_I18N}\n {data.FOCUSED ? <span className=\"shortcut-button\">L</span> : <FontAwesomeIcon icon=\"list\" />}\n </Link>\n </div>\n\n <div>\n <Link className=\"link-edit\" to={`/add/dns/?domain=${data.NAME}`}>\n {i18n['add record']}\n {data.FOCUSED ? <span className=\"shortcut-button\">N</span> : <FontAwesomeIcon icon=\"plus\" />}\n </Link>\n </div>\n\n <div>\n <Link className=\"link-edit\" to={`/edit/dns/?domain=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n\n <div>\n <button\n className=\"link-gray\"\n onClick={() => handleSuspend()}>\n {i18n[data.suspend_action]}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n\n <div>\n <button type=\"button\" className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default DomainNameSystem;","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport { bulkDomainAction, getDnsList, handleAction } from '../../ControlPanelService/Dns';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport DomainNameSystem from '../../components/DomainNameSystem/DomainNameSystem';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport Spinner from '../../components/Spinner/Spinner';\nimport './DomainNameSystems.scss';\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst DomainNameSystems = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n const [state, setState] = useState({\n domainNameSystems: [],\n dnsFav: [],\n toggledAll: false,\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: '',\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/dns/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.domainNameSystems]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = domainNameSystems => {\n domainNameSystems[0]['FOCUSED'] = domainNameSystems[0]['NAME'];\n setState({ ...state, domainNameSystems });\n dispatch(addControlPanelContentFocusedElement(domainNameSystems[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let domainNameSystems = [...state.domainNameSystems];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(domainNameSystems);\n return;\n }\n\n let focusedElementPosition = domainNameSystems.findIndex(domainNameSystem => domainNameSystem.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== domainNameSystems.length - 1) {\n let nextFocusedElement = domainNameSystems[focusedElementPosition + 1];\n domainNameSystems[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, domainNameSystems });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let domainNameSystems = [...state.domainNameSystems];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(domainNameSystems);\n return;\n }\n\n let focusedElementPosition = domainNameSystems.findIndex(domainNameSystem => domainNameSystem.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = domainNameSystems[focusedElementPosition - 1];\n domainNameSystems[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, domainNameSystems });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n case 13: return handleEdit();\n case 76: return handleLogs();\n case 78: return handleAddRecord();\n case 83: return handleSuspend();\n default: break;\n }\n }\n }\n\n const handleAddRecord = () => {\n props.history.push(`/add/dns/?domain=${controlPanelFocusedElement}`);\n }\n\n const handleLogs = () => {\n props.history.push(`/list/dns?domain=${controlPanelFocusedElement}&type=access`);\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/dns?domain=${controlPanelFocusedElement}`);\n }\n\n const handleSuspend = () => {\n const { domainNameSystems } = state;\n let currentDomainNameSystemData = domainNameSystems.filter(domainNameSystem => domainNameSystem.NAME === controlPanelFocusedElement)[0];\n let suspendedStatus = currentDomainNameSystemData.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n\n displayModal(currentDomainNameSystemData.suspend_conf, `/api/v1/${suspendedStatus}/dns/index.php?domain=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { domainNameSystems } = state;\n let currentDomainNameSystemData = domainNameSystems.filter(domainNameSystem => domainNameSystem.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentDomainNameSystemData.delete_conf, `/api/v1/delete/dns/index.php?domain=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getDnsList()\n .then(result => {\n setState({\n ...state,\n domainNameSystems: reformatData(result.data.data),\n dnsFav: result.data.dnsFav,\n selection: [],\n toggledAll: false,\n totalAmount: result.data.totalAmount\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let domainNameSystems = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['RECORDS'] = Number(data[i]['RECORDS']);\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n domainNameSystems.push(data[i]);\n }\n\n return domainNameSystems;\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const dns = () => {\n const { domainNameSystems } = state;\n const dnsFav = { ...state.dnsFav };\n const result = [];\n\n domainNameSystems.forEach(domainNameSystem => {\n domainNameSystem.FOCUSED = controlPanelFocusedElement === domainNameSystem.NAME;\n\n if (dnsFav[domainNameSystem.NAME]) {\n domainNameSystem.STARRED = dnsFav[domainNameSystem.NAME];\n } else {\n domainNameSystem.STARRED = 0;\n }\n\n result.push(domainNameSystem);\n });\n\n let sortedResult = sortArray(result);\n\n return sortedResult.map((item, index) => {\n return <DomainNameSystem data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, domainNameSystems } = state;\n let duplicate = [...selection];\n let domainNameSystemsDuplicate = domainNameSystems;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = domainNameSystemsDuplicate.findIndex(domainNameSystem => domainNameSystem.NAME === name);\n domainNameSystemsDuplicate[incomingItem].isChecked = !domainNameSystemsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, domainNameSystems: domainNameSystemsDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortingColumn = sortBy(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => {\n const first = a[sortingColumn];\n const second = b[sortingColumn];\n return (first < second) ? 1 : ((second < first) ? -1 : 0);\n });\n } else {\n return array.sort((a, b) => {\n const first = a[sortingColumn];\n const second = b[sortingColumn];\n return (first > second) ? 1 : ((second > first) ? -1 : 0)\n });\n }\n }\n\n const sortBy = sorting => {\n const { Date, Expire, Domain, IP, Records, Starred } = i18n;\n\n switch (sorting) {\n case Date: return 'DATE';\n case Expire: return 'EXP';\n case Domain: return 'NAME';\n case IP: return 'IP';\n case Records: return 'RECORDS';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n const { dnsFav } = state;\n let dnsFavDuplicate = dnsFav;\n\n if (type === 'add') {\n dnsFavDuplicate[value] = 1;\n\n addFavorite(value, 'dns')\n .then(() => {\n setState({ ...state, dnsFav: dnsFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n dnsFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'dns')\n .then(() => {\n setState({ ...state, dnsFav: dnsFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const domainNameSystemsDuplicate = [...state.domainNameSystems];\n\n if (toggled) {\n let domainNameSystemsNames = [];\n\n let domainNameSystems = domainNameSystemsDuplicate.map(domainNameSystem => {\n domainNameSystemsNames.push(domainNameSystem.NAME);\n domainNameSystem.isChecked = true;\n return domainNameSystem;\n });\n\n setState({ ...state, domainNameSystems, selection: domainNameSystemsNames, toggledAll: toggled });\n } else {\n let domainNameSystems = domainNameSystemsDuplicate.map(domainNameSystem => {\n domainNameSystem.isChecked = false;\n return domainNameSystem;\n });\n\n setState({ ...state, domainNameSystems, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n setLoading(true);\n bulkDomainAction(action, selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: true,\n text: text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n return (\n <div className=\"dns\">\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name={i18n['Add DNS Domain']} href=\"/add/dns\" showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='dnsList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"dnsList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"dns-wrapper\">\n {loading ? <Spinner /> : dns()}\n </div>\n <div className=\"total\">{state.totalAmount}</div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default DomainNameSystems;","import QueryString from 'qs';\nimport React, { useEffect, useState } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport DnsRecords from '../DNSRecords/DNSRecords';\nimport DomainNameSystems from '../DomainNameSystems/DomainNameSystems';\n\nexport default function DNSWrapper(props) {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n const [isDnsRecords, setIsDnsRecords] = useState(false);\n\n useEffect(() => {\n if (parsedQueryString.domain) {\n setIsDnsRecords(true);\n } else {\n setIsDnsRecords(false);\n }\n }, [history.location]);\n\n return (\n <>\n <Helmet>\n <title>{`Vesta - ${i18n.DNS}`}</title>\n </Helmet>\n {\n isDnsRecords\n ? <DnsRecords {...props} changeSearchTerm={props.changeSearchTerm} />\n : <DomainNameSystems {...props} changeSearchTerm={props.changeSearchTerm} />\n }\n </>\n );\n}","import axios from \"axios\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/stats/index.php';\n\nexport const getStatisticsList = user => {\n return axios.get(BASE_URL + webApiUri + '?user=' + user);\n}","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Container from '../ControlPanel/Container/Container';\nimport './Statistic.scss';\n\nconst Statistic = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n\n const printDate = date => {\n let newDate = new Date(date);\n let day = newDate.getDate();\n let month = newDate.getMonth();\n let year = newDate.getFullYear();\n let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n return <div className=\"date\">{day} &nbsp; {months[month]} &nbsp; {year}</div>;\n }\n\n const printName = date => {\n let newDate = new Date(date);\n let month = newDate.getMonth();\n let year = newDate.getFullYear();\n let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n return <div className=\"date\">{months[month]} &nbsp; {year}</div>;\n }\n\n return (\n <div className={data.FOCUSED ? 'statistic-item focused' : 'statistic-item'} id={data.NAME}>\n <Container className=\"l-col w-15\">\n {printDate(data.DATE)}\n </Container>\n <Container className=\"r-col w-85\">\n <div className=\"name\">{printName(data.DATE)}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"bandwidth\">{i18n.Bandwidth} <span><span className=\"stat\">{data.U_BANDWIDTH}</span>{i18n.mb}</span></div>\n <div className=\"disk\">{i18n.Disk}: <span><span className=\"stat\">{data.U_DISK}</span>{i18n.mb}</span></div>\n <div className=\"sub-disk-stats\">\n <div>\n <div>{i18n.Web}: <span><span className=\"stat\">{data.U_DISK_WEB}</span>{i18n.mb}</span></div>\n <div>{i18n.Mail}: <span><span className=\"stat\">{data.U_DISK_MAIL}</span>{i18n.mb}</span></div>\n </div>\n <div>\n <div>{i18n.Databases}: <span><span className=\"stat\">{data.U_DATABASES}</span>{i18n.mb}</span></div>\n <div>{i18n['User Directories']}: <span><span className=\"stat\">{data.U_DISK_DIRS}</span>{i18n.mb}</span></div>\n </div>\n </div>\n </Container>\n <Container className=\"c-2\">\n <div><span>{i18n['Web Domains']}:</span> <span className=\"stat\">{data.U_WEB_DOMAINS}</span></div>\n <div><span>{i18n['SSL Domains']}:</span> <span className=\"stat\">{data.U_WEB_SSL}</span></div>\n <div><span>{i18n['Web Aliases']}:</span> <span className=\"stat\">{data.U_WEB_ALIASES}</span></div>\n <div><span>{i18n['DNS Domains']}:</span> <span className=\"stat\">{data.U_DNS_DOMAINS}</span></div>\n <div><span>{i18n['DNS records']}:</span> <span className=\"stat\">{data.U_DNS_RECORDS}</span></div>\n </Container>\n <Container className=\"c-3\">\n <div><span>{i18n['Mail Domains']}:</span> <span className=\"stat\">{data.U_MAIL_DOMAINS}</span></div>\n <div><span>{i18n['Mail Accounts']}:</span> <span className=\"stat\">{data.U_MAIL_ACCOUNTS}</span></div>\n <div><span>{i18n['Databases']}:</span> <span className=\"stat\">{data.U_DATABASES}</span></div>\n <div><span>{i18n['Cron Jobs']}:</span> <span className=\"stat\">{data.U_CRON_JOBS}</span></div>\n <div><span>{i18n['IP Addresses']}:</span> <span className=\"stat\">{data.IP_OWNED}</span></div>\n </Container>\n </div>\n </Container>\n </div>\n );\n}\n\nexport default Statistic;","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { getStatisticsList } from '../../ControlPanelService/Statistics';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Statistic from '../../components/Statistic/Statistic';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport './Statistics.scss';\nimport { Helmet } from 'react-helmet';\n\nconst Statistics = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [state, setState] = useState({\n statistics: [],\n users: [],\n totalAmount: '',\n loading: false,\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/stats/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData();\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n };\n }, [controlPanelFocusedElement, focusedElement, state.statistics]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = statistics => {\n statistics[0]['FOCUSED'] = statistics[0]['NAME'];\n setState({ ...state, statistics });\n dispatch(addControlPanelContentFocusedElement(statistics[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let statistics = [...state.statistics];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(statistics);\n return;\n }\n\n let focusedElementPosition = statistics.findIndex(statistic => statistic.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== statistics.length - 1) {\n let nextFocusedElement = statistics[focusedElementPosition + 1];\n statistics[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, statistics });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let statistics = [...state.statistics];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(statistics);\n return;\n }\n\n let focusedElementPosition = statistics.findIndex(statistic => statistic.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = statistics[focusedElementPosition - 1];\n statistics[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, statistics });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const fetchData = () => {\n dispatch(removeControlPanelContentFocusedElement());\n setState({ ...state, loading: true });\n\n let search = window.location.search;\n let user = search ? search.split('=')[1] : '';\n\n getStatisticsList(user)\n .then(result => {\n setState({\n ...state,\n statistics: reformatData(result.data.data),\n users: result.data.users || [],\n totalAmount: result.data.totalAmount,\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n\n const reformatData = data => {\n let statistics = [];\n\n for (let i in data) {\n data[i]['DATE'] = i;\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n statistics.push(data[i]);\n }\n\n return statistics;\n }\n\n const statistics = () => {\n let statistics = [...state.statistics];\n\n statistics.forEach(statistic => {\n statistic.FOCUSED = controlPanelFocusedElement === statistic.NAME;\n });\n\n return statistics.map((item, index) => {\n return <Statistic data={item} key={index} />;\n });\n }\n\n const bulkAction = value => {\n let user = value !== '' ? `?user=${value}` : '';\n props.history.push({ search: user });\n fetchData();\n };\n\n return (\n <div className=\"statistics-list\">\n <Helmet>\n <title>{`Vesta - ${i18n.STATS}`}</title>\n </Helmet>\n <Toolbar mobile={false} className=\"justify-right\">\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Link to=\"/list/stats/\" className=\"button-extra\" type=\"submit\">{i18n['Overall Statistics']}</Link>\n <Select list='statisticsList' users={state.users} bulkAction={bulkAction} />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"statistics-wrapper\">\n {state.loading ? <Spinner /> : statistics()}\n </div>\n <div className=\"total\">{state.totalAmount}</div>\n </div>\n );\n}\n\nexport default Statistics;","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { loginAs, logout } from 'src/actions/Session/sessionActions';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\n\nimport './User.scss';\n\nconst User = ({ data, toggleFav, handleModal, checkItem }) => {\n const { i18n, userName } = useSelector(state => state.session);\n const session = useSelector(state => state.session);\n const dispatch = useDispatch();\n\n const printNameServers = servers => {\n let serversArray = servers.split(',');\n\n return serversArray.map(\n (server, index) => <div key={index}>{server}</div>\n );\n }\n\n const signInAs = username => {\n dispatch(loginAs(username));\n }\n\n const signOut = () => {\n dispatch(logout());\n }\n\n const printLoginActionButton = user => {\n let currentUser = session.userName;\n if (currentUser === user) {\n return (\n <div>\n <button onClick={signOut}>{i18n['Log out']}\n {data.FOCUSED ? <span className=\"shortcut-button\">L</span> : <FontAwesomeIcon icon=\"user-lock\" />}\n </button>\n </div>\n );\n } else {\n return (\n <div>\n <button onClick={() => signInAs(user)}>{i18n['login as']} {user}\n {data.FOCUSED ? <span className=\"shortcut-button\">L</span> : <FontAwesomeIcon icon=\"user-lock\" />}\n </button>\n </div>\n );\n }\n }\n\n const toggleFavorite = (starred) => {\n if (starred) {\n toggleFav(data.NAME, 'add');\n } else {\n toggleFav(data.NAME, 'delete');\n }\n }\n\n const checkItemName = () => {\n checkItem(data.NAME);\n }\n\n const handleSuspend = () => {\n let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n handleModal(data.spnd_conf, `/api/v1/${suspendedStatus}/user/index.php?user=${data.NAME}`);\n }\n\n const handleDelete = () => {\n handleModal(data.delete_conf, `/api/v1/delete/user/index.php?user=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n date={data.DATE}\n checked={data.isChecked}\n starred={data.STARRED}\n toggleFav={toggleFavorite}\n checkItem={checkItemName}\n focused={data.FOCUSED}\n suspended={data.SUSPENDED === 'yes'}>\n\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.NAME}</div>\n <div>{data.FNAME} {data.LNAME}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"bandwidth\">{i18n.Bandwidth} <span><span className=\"stat\">{data.U_BANDWIDTH}</span> {i18n.mb}</span></div>\n <div className=\"disk\">{i18n.Disk}: <span><span className=\"stat\">{data.U_DISK}</span> {i18n.mb}</span></div>\n <div className=\"sub-disk-stats\">\n <div>\n <div><span>{i18n.Web}:</span> <span><b>{data.U_DISK_WEB}</b> {i18n.mb}</span></div>\n <div><span>{i18n.Mail}:</span> <span><b>{data.U_DISK_MAIL}</b> {i18n.mb}</span></div>\n </div>\n <div>\n <div><span>{i18n.Databases}:</span> <span><b>{data.U_DATABASES}</b> {i18n.mb}</span></div>\n <div><span>{i18n['User Directories']}:</span> <span><b>{data.U_DISK_DIRS}</b> {i18n.mb}</span></div>\n </div>\n </div>\n </Container>\n <Container className=\"c-2\">\n <div><span>{i18n['Web Domains']}:</span> <span><b>{data.U_WEB_DOMAINS}</b> / {data.WEB_DOMAINS}</span></div>\n <div><span>{i18n['DNS Domains']}:</span> <span><b>{data.U_DNS_DOMAINS}</b> / {data.DNS_DOMAINS}</span></div>\n <div><span>{i18n['Mail Domains']}:</span> <span><b>{data.U_MAIL_DOMAINS}</b> / {data.MAIL_DOMAINS}</span></div>\n <div><span>{i18n.Databases}:</span> <span><b>{data.U_DATABASES}</b> / {data.DATABASES}</span></div>\n <div><span>{i18n['Cron Jobs']}:</span> <span><b>{data.U_CRON_JOBS}</b> / {data.CRON_JOBS}</span></div>\n <div><span>{i18n.Backups}:</span> <span><b>{data.U_BACKUPS}</b> / {data.BACKUPS}</span></div>\n </Container>\n <Container className=\"c-3\">\n <div><span>{i18n.Email}:</span> <span className=\"stat email\">{data.CONTACT}</span></div>\n <div><span>{i18n.Package}:</span> <span className=\"stat\">{data.PACKAGE}</span></div>\n <div><span>{i18n['SSH Access']}:</span> <span className=\"stat\">{data.SHELL}</span></div>\n <div><span>{i18n['IP Addresses']}:</span> <span className=\"stat\">{data.IP_OWNED}</span></div>\n <div className=\"ns\"><span>{i18n['Name Servers']}:</span> <span className=\"stat\">{printNameServers(data.NS)}</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n {printLoginActionButton(data.NAME)}\n <div>\n <Link to={`/edit/user?user=${data.NAME}`}>{i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n <div>\n <button\n className=\"link-gray\"\n onClick={handleSuspend}>\n {data.spnd_action}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n <div>\n <button className=\"link-delete\" onClick={handleDelete}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default User;","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from \"../../actions/MainNavigation/mainNavigationActions\";\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport { bulkAction, getUsersList, handleAction } from '../../ControlPanelService/Users';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Spinner from '../../components/Spinner/Spinner';\nimport User from '../../components/User/User';\nimport { Helmet } from 'react-helmet';\nimport './Users.scss';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Users = props => {\n const { userName, i18n, session: { look } } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n const [state, setState] = useState({\n users: [],\n userFav: [],\n toggledAll: false,\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/user/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.users]);\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getUsersList()\n .then(result => {\n setState({\n ...state,\n users: reformatData(result.data.data),\n userFav: result.data.userFav,\n totalAmount: result.data.totalAmount,\n toggledAll: false,\n selection: []\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 76: return handleLogin();\n case 83: return handleSuspend();\n case 8: return handleDelete();\n case 13: return handleEdit();\n default: break;\n }\n }\n }\n\n const handleLogin = () => {\n if (userName === controlPanelFocusedElement) {\n props.history.push('/logout');\n } else {\n props.history.push(`/login/?loginas=${controlPanelFocusedElement}`);\n }\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/user?user=${controlPanelFocusedElement}`);\n }\n\n const handleSuspend = () => {\n const { users } = state;\n let currentUserData = users.filter(user => user.NAME === controlPanelFocusedElement)[0];\n let suspendedStatus = currentUserData.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n\n displayModal(currentUserData.spnd_conf, `/api/v1/${suspendedStatus}/user/index.php?user=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { users } = state;\n let currentUserData = users.filter(user => user.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentUserData.delete_conf, `/api/v1/delete/user/index.php?user=${controlPanelFocusedElement}`);\n }\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = users => {\n users[0]['FOCUSED'] = users[0]['NAME'];\n setState({ ...state, users });\n dispatch(addControlPanelContentFocusedElement(users[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let users = [...state.users];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(users);\n return;\n }\n\n let focusedElementPosition = users.findIndex(user => user.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== users.length - 1) {\n let nextFocusedElement = users[focusedElementPosition + 1];\n users[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, users });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let users = [...state.users];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(users);\n return;\n }\n\n let focusedElementPosition = users.findIndex(user => user.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = users[focusedElementPosition - 1];\n users[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, users });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const reformatData = data => {\n let users = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['isChecked'] = false;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n users.push(data[i]);\n }\n\n return users;\n }\n\n const users = () => {\n const userFav = { ...state.userFav };\n let users = [...state.users];\n\n users.forEach(user => {\n user.FOCUSED = controlPanelFocusedElement === user.NAME;\n\n if (userFav[user.NAME]) {\n user.STARRED = userFav[user.NAME];\n } else {\n user.STARRED = 0;\n }\n });\n\n let sortedResult = sortArray(users);\n\n return sortedResult.map((item, index) => {\n return <User data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, users } = state;\n let duplicate = [...selection];\n let userDuplicate = [...users];\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = userDuplicate.findIndex(user => user.NAME === name);\n userDuplicate[incomingItem].isChecked = !userDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, users: userDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n let sortingColumn = sortBy(state.sorting);\n\n if (state.order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Date: date, Username, Disk, Bandwidth, Starred } = i18n;\n\n switch (sorting) {\n case date: return 'DATE';\n case Username: return 'NAME';\n case Disk: return 'U_DISK';\n case Bandwidth: return 'U_BANDWIDTH';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n let userFavDuplicate = state.userFav;\n\n if (type === 'add') {\n userFavDuplicate[value] = 1;\n\n addFavorite(value, 'user')\n .then(() => {\n setState({ ...state, userFav: userFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n userFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'user')\n .then(() => {\n setState({ ...state, userFav: userFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const usersDuplicate = [...state.users];\n\n if (toggled) {\n let userNames = [];\n\n let users = usersDuplicate.map(user => {\n userNames.push(user.NAME);\n user.isChecked = true;\n return user;\n });\n\n setState({ ...state, users, selection: userNames, toggledAll: toggled });\n } else {\n let users = usersDuplicate.map(user => {\n user.isChecked = false;\n return user;\n });\n\n setState({ ...state, users, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n if (state.selection.length && action) {\n setLoading(true);\n bulkAction(action, state.selection)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: true,\n text: text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n return (\n <div>\n <Helmet>\n <title>{`Vesta - ${i18n.USER}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton\n name={look ? i18n['Add Web Domain'] : i18n['Add User']}\n href={look ? \"/add/web/\" : \"/add/user/\"}\n showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='usersList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"usersList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"users-wrapper\">\n {loading\n ? <Spinner />\n : (<>\n {users()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)}\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Users;\n","import axios from \"axios\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/rrd/index.php';\n\nexport const getRrdList = () => {\n return axios.get(BASE_URL + webApiUri);\n}\n\nexport function generateImagePath(period, type, rrd) {\n return `/api/v1/list/rrd/image.php?/rrd/${type}/${period}-${rrd}.png`;\n}\n","import React, { useEffect, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport './Timer.scss';\n\nconst Timer = props => {\n const [isActive, setIsActive] = useState(true);\n\n useEffect(() => {\n let interval = null;\n\n if (isActive) {\n interval = setInterval(props.countDown, 1000);\n } else if (!isActive && props.time !== 0) {\n clearInterval(interval);\n }\n\n return () => clearInterval(interval);\n }, [isActive, props.time]);\n\n const handlePause = () => {\n setIsActive(!isActive);\n }\n\n return (\n <div className=\"timer-wrapper\">\n <button onClick={() => handlePause()}>\n {!isActive ? <FontAwesomeIcon icon=\"play\" /> : <FontAwesomeIcon icon=\"pause\" />}\n </button>\n <div className=\"circle-wrapper\">\n {/* <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle class=\"stroke-1\" cx=\"15\" cy=\"15\" r=\"10\" fill=\"white\" style={{ strokeDashoffset: 9 + props.time * 4.2 }}></circle>\n </svg> */}\n <span className=\"seconds\">{props.time}</span>\n </div>\n </div>\n )\n}\n\nexport default Timer;","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faFileDownload } from '@fortawesome/free-solid-svg-icons';\nimport Container from '../ControlPanel/Container/Container';\nimport { generateImagePath } from '../../ControlPanelService/RRD';\nimport './RRD.scss';\nimport { useSelector } from 'react-redux';\n\nconst RRD = props => {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n\n const printDate = date => {\n let newDate = new Date(date);\n let day = newDate.getDate();\n let month = newDate.getMonth();\n let year = newDate.getFullYear();\n let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n return <div className=\"date\">{day} &nbsp; {months[month]} &nbsp; {year}</div>;\n }\n\n return (\n <div className={data.FOCUSED ? 'rrd-item focused' : 'rrd-item'} id={data.NAME}>\n <Container className=\"l-col w-15\">\n {printDate(data.DATE)}\n </Container>\n <Container className=\"r-col w-85\">\n <div className=\"name\">{i18n[data.NAME]}</div>\n <div className=\"stats\">\n <Container className=\"w-100\">\n <div><img src={generateImagePath(props.period, data.TYPE, data.RRD)} alt=\"img\" /></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <a className=\"link-download\" href={generateImagePath(props.period, data.TYPE, data.RRD)}>\n {i18n.download}\n <FontAwesomeIcon icon={faFileDownload} />\n </a>\n </div>\n </div>\n </div>\n );\n}\n\nexport default RRD;","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport { getRrdList } from '../../ControlPanelService/RRD';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Timer from '../../components/RRD/Timer/Timer';\nimport RRD from '../../components/RRD/RRD';\nimport './RRDs.scss';\nimport { Helmet } from 'react-helmet';\n\nconst RRDs = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [data, setData] = useState([]);\n const [state, setState] = useState({\n period: 'daily',\n periodI18N: i18n.Daily,\n time: 15,\n loading: false,\n total: 0\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/rrd/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData();\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n };\n }, [controlPanelFocusedElement, focusedElement, data]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = data => {\n data[0]['FOCUSED'] = data[0]['NAME'];\n setData(data);\n dispatch(addControlPanelContentFocusedElement(data[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(data);\n return;\n }\n\n let focusedElementPosition = data.findIndex(pack => pack.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== data.length - 1) {\n let nextFocusedElement = data[focusedElementPosition + 1];\n data[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setData(data);\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(data);\n return;\n }\n\n let focusedElementPosition = data.findIndex(pack => pack.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = data[focusedElementPosition - 1];\n data[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setData(data);\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const countDown = () => {\n if (state.time === 0) {\n fetchData();\n } else {\n setState({ ...state, time: state.time - 1 });\n }\n }\n\n const fetchData = () => {\n dispatch(removeControlPanelContentFocusedElement());\n\n setState({ ...state, loading: true });\n\n getRrdList()\n .then(result => {\n setData(reformatData(result.data.data));\n setState({ ...state, time: 15, loading: false });\n })\n .catch(err => console.error(err));\n }\n\n const reformatData = data => {\n let rrds = [];\n\n for (let i in data) {\n data[i]['NAME'] = data[i]['TITLE'];\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n rrds.push(data[i]);\n }\n\n return rrds;\n }\n\n const rrds = () => {\n let dataDuplicate = [...data];\n\n dataDuplicate.forEach(rrd => {\n rrd.FOCUSED = controlPanelFocusedElement === rrd.NAME;\n });\n\n return dataDuplicate.map((item, index) => {\n return <RRD period={state.period} data={item} key={index} />;\n });\n }\n\n const printPeriods = () => {\n const periods = [i18n.Daily, i18n.Weekly, i18n.Monthly, i18n.Yearly];\n\n return periods.map(period => (<div className={periodClass(period)} onClick={() => changePeriod(period)}>{period}</div>));\n }\n\n const periodClass = period => {\n if (state.periodI18N === period) {\n return \"period active\";\n } else {\n return \"period\";\n }\n }\n\n const changePeriod = period => {\n switch (period) {\n case i18n.Daily: setState({ ...state, period: 'daily', periodI18N: i18n.Daily, time: 15 }); break;\n case i18n.Weekly: setState({ ...state, period: 'weekly', periodI18N: i18n.Weekly, time: 15 }); break;\n case i18n.Monthly: setState({ ...state, period: 'monthly', periodI18N: i18n.Monthly, time: 15 }); break;\n case i18n.Yearly: setState({ ...state, period: 'yearly', periodI18N: i18n.Yearly, time: 15 }); break;\n default: break;\n }\n }\n\n return (\n <div className=\"rrd-list\">\n <Helmet>\n <title>{`Vesta - ${i18n.RRD}`}</title>\n </Helmet>\n <Toolbar mobile={false}>\n <div className=\"periods-wrapper\">\n {printPeriods()}\n <Timer time={state.time} countDown={countDown} data={state.rrds} />\n </div>\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </Toolbar>\n <div className=\"rrd-wrapper\">\n {state.loading ? <Spinner /> : rrds()}\n </div>\n </div>\n );\n}\n\nexport default RRDs;","import React from 'react';\nimport ListItem from 'src/components/ControlPanel/ListItem/ListItem';\nimport Container from 'src/components/ControlPanel/Container/Container';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useSelector } from 'react-redux';\n\nconst Ban = ({ data, ...props }) => {\n const { i18n } = useSelector(state => state.session);\n\n const checkItem = () => {\n props.checkItem(data.NAME);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_confirmation, `/api/v1/delete/firewall/banlist/?ip=${data.NAME}&chain=${data.CHAIN}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n focused={data.FOCUSED}\n checked={data.isChecked}\n date={data.DATE}\n checkItem={checkItem}>\n <Container className=\"r-col w-85\">\n <div className=\"stats\">\n <Container className=\"c-1 w-35\">\n <div><b>{data.DATE}</b> &nbsp; {data.TIME}</div>\n </Container>\n <Container className=\"c-2 w-30\">\n <div></div>\n </Container>\n <Container className=\"c-2 w-30\">\n <div><b>{data.CHAIN}</b></div>\n </Container>\n <Container className=\"c-2 w-30\">\n <div><b>{data.NAME}</b></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <button className=\"link-delete\" onClick={() => handleDelete()}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default Ban;","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from 'src/actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from 'src/actions/MainNavigation/mainNavigationActions';\nimport { bulkAction, getBanList, handleAction } from 'src/ControlPanelService/Firewalls';\nimport * as MainNavigation from 'src/actions/MainNavigation/mainNavigationActions';\nimport SearchInput from 'src/components/MainNav/Toolbar/SearchInput/SearchInput';\nimport LeftButton from 'src/components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from 'src/components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from 'src/components/MainNav/Toolbar/Select/Select';\nimport Toolbar from 'src/components/MainNav/Toolbar/Toolbar';\nimport Modal from 'src/components/ControlPanel/Modal/Modal';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport Ban from 'src/components/Firewall/Ban';\nimport { Helmet } from 'react-helmet';\nimport { useHistory } from 'react-router';\n\nimport './styles.scss';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst BanLists = props => {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n const [state, setState] = useState({\n banIps: [],\n selection: [],\n toggledAll: false,\n sorting: i18n.Action,\n order: \"descending\",\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/firewall/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.banIps]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = banIps => {\n banIps[0]['FOCUSED'] = banIps[0]['NAME'];\n setState({ ...state, banIps });\n dispatch(addControlPanelContentFocusedElement(banIps[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let banIps = [...state.banIps];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement.NAME === '') {\n initFocusedElement(banIps);\n return;\n }\n\n let focusedElementPosition = banIps.findIndex(banIp => banIp.NAME === controlPanelFocusedElement.NAME);\n\n if (focusedElementPosition !== banIps.length - 1) {\n let nextFocusedElement = banIps[focusedElementPosition + 1];\n banIps[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, banIps });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let banIps = [...state.banIps];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement.NAME === '') {\n initFocusedElement(banIps);\n return;\n }\n\n let focusedElementPosition = banIps.findIndex(banIp => banIp.NAME === controlPanelFocusedElement.NAME);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = banIps[focusedElementPosition - 1];\n banIps[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, banIps });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 8: return handleDelete();\n default: break;\n }\n }\n }\n\n const handleDelete = () => {\n const { banIps } = state;\n let currentBanIpData = banIps.filter(banIp => banIp.NAME === controlPanelFocusedElement.NAME)[0];\n\n displayModal(currentBanIpData.delete_conf, controlPanelFocusedElement.delete_url);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getBanList()\n .then(result => {\n setState({\n ...state,\n banIps: reformatData(result.data.data),\n totalAmount: result.data.total_amount,\n toggledAll: false,\n selection: []\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const reformatData = data => {\n let banIps = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement.NAME === i;\n banIps.push(data[i]);\n }\n\n return banIps;\n }\n\n const banIps = () => {\n let banIps = [...state.banIps];\n\n banIps.forEach(banIp => {\n banIp.FOCUSED = controlPanelFocusedElement.NAME === banIp.NAME;\n });\n\n return banIps.map((item, index) => {\n return <Ban data={item} key={index} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n const { selection, banIps } = state;\n let duplicate = [...selection];\n let banIpsDuplicate = banIps;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = banIpsDuplicate.findIndex(banIp => banIp.NAME === name);\n banIpsDuplicate[incomingItem].isChecked = !banIpsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, banIps: banIpsDuplicate, selection: duplicate });\n }\n\n const toggleAll = toggled => {\n if (toggled) {\n let banIpNames = [];\n\n let banIps = state.banIps.map(banIp => {\n banIpNames.push(banIp.NAME);\n banIp.isChecked = true;\n return banIp;\n });\n\n setState({ ...state, banIps, selection: banIpNames, toggledAll: toggled });\n } else {\n let banIps = state.banIps.map(banIp => {\n banIp.isChecked = false;\n return banIp;\n });\n\n setState({ ...state, banIps, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n const { selection } = state;\n\n if (selection.length && action) {\n bulkAction(action, selection, state.banIps)\n .then(result => {\n if (result.status === 200) {\n toggleAll(false);\n fetchData();\n }\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, actionUrl) => {\n setModal({ ...modal, visible: !modal.visible, text, actionUrl });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData();\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const modalCancelHandler = () => {\n setModal({ ...modal, visible: !modal.visible, text: '', actionUrl: '' });\n }\n\n return (\n <div className=\"firewalls\">\n <Helmet>\n <title>{`Vesta - ${i18n.FIREWALL}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton href=\"/add/firewall/banlist\" name={i18n['Ban IP Address']} showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='banList' bulkAction={bulk} />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n {loading\n ? <Spinner />\n : (<>\n <div className=\"banlist-wrapper\">\n {banIps()}\n <div className=\"buttons-wrapper\">\n <div className=\"total\">{state.totalAmount}</div>\n <button type=\"button\" className=\"back\" onClick={() => history.push('/list/firewall/')}>{i18n.Back}</button>\n </div>\n </div>\n </>)\n }\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default BanLists;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport { Link } from 'react-router-dom';\nimport './WebDomain.scss';\nimport { useSelector } from 'react-redux';\n\nexport default function WebDomain(props) {\n const { data } = props;\n const { i18n } = useSelector(state => state.session);\n const token = localStorage.getItem(\"token\");\n\n const printStat = (stat, text) => {\n if (text === 'no' || text === '') {\n return <div className=\"crossed\">{stat}</div>;\n }\n\n return <div>{stat}: <span className=\"stat\">{text}</span></div>;\n }\n\n const toggleFav = (starred) => {\n if (starred) {\n props.toggleFav(data.NAME, 'add');\n } else {\n props.toggleFav(data.NAME, 'delete');\n }\n }\n\n const checkItem = () => {\n props.checkItem(data.NAME);\n }\n\n const handleSuspend = () => {\n let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n props.handleModal(data.spnd_confirmation, `/api/v1/${suspendedStatus}/web/index.php?domain=${data.NAME}`);\n }\n\n const handleDelete = () => {\n props.handleModal(data.delete_confirmation, `/api/v1/delete/web/index.php?domain=${data.NAME}`);\n }\n\n return (\n <ListItem\n id={data.NAME}\n checked={data.isChecked}\n starred={data.STARRED}\n date={data.DATE}\n toggleFav={toggleFav}\n checkItem={checkItem}\n suspended={data.SUSPENDED === 'yes'}\n focused={data.FOCUSED} >\n <Container className=\"r-col w-85\">\n <div className=\"name\">\n <div>{data.NAME}</div>\n <div><span className=\"dns-name-span\">{data.ALIAS}</span></div>\n </div>\n <div>{data.IP}</div>\n <div className=\"stats\">\n <Container className=\"c-1 w-25\">\n <div className=\"bandwidth\">{i18n.Bandwidth} <span><span className=\"stat\">{data.U_BANDWIDTH}</span>{i18n.mb}</span></div>\n <div className=\"disk\">{i18n.Disk}: <span><span className=\"stat\">{data.U_DISK}</span>{i18n.mb}</span></div>\n </Container>\n <Container className=\"c-2 w-45\">\n <div>{i18n['Web Template']}: <span className=\"stat\">{data.TPL}</span></div>\n {data.LETSENCRYPT === 'yes'\n ? printStat(i18n['SSL Support'], i18n['Lets Encrypt'])\n : printStat(i18n['SSL Support'], data.SSL)}\n {printStat(i18n['Web Statistics'], data.WEB_STATS)}\n </Container>\n <Container className=\"c-3 w-35\">\n {data.PROXY_SYSTEM !== 'no'\n ? printStat(i18n['Proxy Support'], data.PROXY_SUPPORT)\n : printStat(i18n['Proxy Support'], '')}\n {data.PROXY_SYSTEM !== 'no'\n ? printStat(i18n['Proxy Template'], data.PROXY)\n : printStat(i18n['Proxy Template'], '')}\n {data.BACKEND_SYSTEM !== 'no'\n ? printStat(i18n['Backend Support'] ?? 'Backend Support', data.BACKEND_SUPPORT)\n : printStat(i18n['Backend Support'] ?? 'Backend Support', '')}\n {data.BACKEND_SYSTEM !== 'no'\n ? printStat(i18n['Backend Template'] ?? 'Backend Template', data.BACKEND)\n : printStat(i18n['Backend Template'] ?? 'Backend Template', '')}\n {printStat(i18n['Additional FTP Account'], data.FTP)}\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n <div>\n <Link className=\"link-edit\" to={`/edit/web?domain=${data.NAME}`}>\n {i18n.edit}\n {data.FOCUSED ? <span className=\"shortcut-button html-unicode\">&#8617;</span> : <FontAwesomeIcon icon=\"pen\" />}\n </Link>\n </div>\n <div>\n <Link className=\"link-gray\" to={`/list/web-log?domain=${data.NAME}&type=access`}>\n {i18n['view logs']}\n {data.FOCUSED ? <span className=\"shortcut-button\">L</span> : <FontAwesomeIcon icon=\"list\" />}\n </Link>\n </div>\n {\n data.STATS && (\n <div>\n <a className=\"link-gray\" href={`http://${data.NAME}/vstats/`} target=\"_blank\" rel=\"noopener noreferrer\">\n {i18n['open webstats']}\n {data.FOCUSED ? <span className=\"shortcut-button\">L</span> : <FontAwesomeIcon icon=\"list\" />}\n </a>\n </div>\n )\n }\n <div>\n <button\n className=\"link-gray\"\n onClick={handleSuspend}>\n {i18n[data.spnd_action]}\n {data.FOCUSED ? <span className=\"shortcut-button\">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}\n </button>\n </div>\n <div>\n <button className=\"link-delete\" onClick={handleDelete}>\n {i18n.Delete}\n {data.FOCUSED ? <span className=\"shortcut-button del\">Del</span> : <FontAwesomeIcon icon=\"times\" />}\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport { bulkAction, getWebList, handleAction } from '../../ControlPanelService/Web';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport { addFavorite, deleteFavorite } from '../../ControlPanelService/Favorites';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Checkbox from '../../components/MainNav/Toolbar/Checkbox/Checkbox';\nimport Select from '../../components/MainNav/Toolbar/Select/Select';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport WebDomain from '../../components/WebDomain/WebDomain';\nimport Spinner from '../../components/Spinner/Spinner';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet';\nimport './Web.scss';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Web = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [modal, setModal] = useState({\n text: '',\n visible: false,\n actionUrl: ''\n });\n const [state, setState] = useState({\n webDomains: [],\n webFav: [],\n toggledAll: false,\n sorting: i18n.Date,\n order: \"descending\",\n selection: [],\n totalAmount: ''\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/web/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData().then(() => setLoading(false));\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n window.addEventListener(\"keydown\", handleFocusedElementShortcuts);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n window.removeEventListener(\"keydown\", handleFocusedElementShortcuts);\n };\n }, [controlPanelFocusedElement, focusedElement, state.webDomains]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = webDomains => {\n webDomains[0]['FOCUSED'] = webDomains[0]['NAME'];\n setState({ ...state, webDomains });\n dispatch(addControlPanelContentFocusedElement(webDomains[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let webDomains = [...state.webDomains];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(webDomains);\n return;\n }\n\n let focusedElementPosition = webDomains.findIndex(webDomain => webDomain.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== webDomains.length - 1) {\n let nextFocusedElement = webDomains[focusedElementPosition + 1];\n webDomains[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, webDomains });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let webDomains = [...state.webDomains];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(webDomains);\n return;\n }\n\n let focusedElementPosition = webDomains.findIndex(webDomain => webDomain.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = webDomains[focusedElementPosition - 1];\n webDomains[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, webDomains });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleFocusedElementShortcuts = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (controlPanelFocusedElement && !isSearchInputFocused) {\n switch (event.keyCode) {\n case 76: return handleLogs();\n case 83: return handleSuspend();\n case 8: return handleDelete();\n case 13: return handleEdit();\n default: break;\n }\n }\n }\n\n const handleLogs = () => {\n props.history.push(`/list/web-log?domain=${controlPanelFocusedElement}&type=access`);\n }\n\n const handleEdit = () => {\n props.history.push(`/edit/web?domain=${controlPanelFocusedElement}`);\n }\n\n const handleSuspend = () => {\n const { webDomains } = state;\n let currentWebDomainData = webDomains.filter(webDomain => webDomain.NAME === controlPanelFocusedElement)[0];\n let suspendedStatus = currentWebDomainData.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend';\n\n displayModal(currentWebDomainData.spnd_confirmation, `/api/v1/${suspendedStatus}/web/index.php?domain=${controlPanelFocusedElement}`);\n }\n\n const handleDelete = () => {\n const { webDomains } = state;\n let currentWebDomainData = webDomains.filter(webDomain => webDomain.NAME === controlPanelFocusedElement)[0];\n\n displayModal(currentWebDomainData.delete_confirmation, `/api/v1/web/index.php?domain=${controlPanelFocusedElement}`);\n }\n\n const fetchData = () => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getWebList()\n .then(result => {\n setState({\n ...state,\n webDomains: reformatData(result.data.data),\n webFav: result.data.webFav,\n totalAmount: result.data.totalAmount,\n toggledAll: false,\n selection: []\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const reformatData = data => {\n let webDomains = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n webDomains.push(data[i]);\n }\n\n return webDomains;\n }\n\n const webDomains = () => {\n const webFav = { ...state.webFav };\n let webDomains = [...state.webDomains];\n\n webDomains.forEach(webDomain => {\n webDomain.FOCUSED = controlPanelFocusedElement === webDomain.NAME;\n\n if (webFav[webDomain.NAME]) {\n webDomain.STARRED = webFav[webDomain.NAME];\n } else {\n webDomain.STARRED = 0;\n }\n });\n\n let sortedResult = sortArray(webDomains);\n\n return sortedResult.map((item, index) => {\n return <WebDomain data={item} key={index} toggleFav={toggleFav} checkItem={checkItem} handleModal={displayModal} />;\n });\n }\n\n const checkItem = name => {\n let duplicate = [...state.selection];\n let webDomainsDuplicate = state.webDomains;\n let checkedItem = duplicate.indexOf(name);\n\n let incomingItem = webDomainsDuplicate.findIndex(webDomain => webDomain.NAME === name);\n webDomainsDuplicate[incomingItem].isChecked = !webDomainsDuplicate[incomingItem].isChecked;\n\n if (checkedItem !== -1) {\n duplicate.splice(checkedItem, 1);\n } else {\n duplicate.push(name);\n }\n\n setState({ ...state, webDomains: webDomainsDuplicate, selection: duplicate });\n }\n\n const sortArray = array => {\n let sortingColumn = sortBy(state.sorting);\n\n if (state.order === \"descending\") {\n return array.sort((a, b) => (a[sortingColumn] < b[sortingColumn]) ? 1 : ((b[sortingColumn] < a[sortingColumn]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortingColumn] > b[sortingColumn]) ? 1 : ((b[sortingColumn] > a[sortingColumn]) ? -1 : 0));\n }\n }\n\n const sortBy = sorting => {\n const { Date: date, Domain, Disk, Bandwidth, Starred } = i18n;\n\n switch (sorting) {\n case date: return 'DATE';\n case Domain: return 'ALIAS';\n case i18n['IP Addresses']: return 'IP';\n case Disk: return 'U_DISK';\n case Bandwidth: return 'U_BANDWIDTH';\n case Starred: return 'STARRED';\n default: break;\n }\n }\n\n const toggleFav = (value, type) => {\n let webFavDuplicate = state.webFav;\n\n if (type === 'add') {\n webFavDuplicate[value] = 1;\n\n addFavorite(value, 'web')\n .then(() => {\n setState({ ...state, webFav: webFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n } else {\n webFavDuplicate[value] = undefined;\n\n deleteFavorite(value, 'web')\n .then(() => {\n setState({ ...state, webFav: webFavDuplicate });\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n const toggleAll = toggled => {\n const webDomainsDuplicate = [...state.webDomains];\n\n if (toggled) {\n let webDomainNames = [];\n\n let webDomains = webDomainsDuplicate.map(webDomain => {\n webDomainNames.push(webDomain.NAME);\n webDomain.isChecked = true;\n return webDomain;\n });\n\n setState({ ...state, webDomains, selection: webDomainNames, toggledAll: toggled });\n } else {\n let webDomains = webDomainsDuplicate.map(webDomain => {\n webDomain.isChecked = false;\n return webDomain;\n });\n\n setState({ ...state, webDomains, selection: [], toggledAll: toggled });\n }\n }\n\n const bulk = action => {\n if (state.selection.length && action) {\n setLoading(true);\n bulkAction(action, state.selection)\n .then(result => {\n toggleAll(false);\n fetchData().then(() => refreshMenuCounters());\n })\n .catch(err => console.error(err));\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: true,\n text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n return (\n <div className=\"web\">\n <Helmet>\n <title>{`Vesta - ${i18n.WEB}`}</title>\n </Helmet>\n <Toolbar mobile={false} >\n <LeftButton name={i18n['Add Web Domain']} href=\"/add/web/\" showLeftMenu={true} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <Checkbox toggleAll={toggleAll} toggled={state.toggledAll} />\n <Select list='webList' bulkAction={bulk} />\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"webList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"web-domains-wrapper\">\n {loading\n ? <Spinner />\n : (\n <>\n {webDomains()}\n <div className=\"total\">{state.totalAmount}</div>\n </>\n )\n }\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Web;","import axios from \"axios\";\nimport { getAuthToken } from \"src/utils/token\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/search/';\n\nexport const getSearchResultsList = term => {\n return axios.get(BASE_URL + webApiUri + '?q=' + term);\n}\n\nexport const handleAction = uri => {\n return axios.get(BASE_URL + uri, {\n params: {\n token: getAuthToken()\n }\n });\n}\n","import React from 'react';\nimport { loginAs, logout } from 'src/actions/Session/sessionActions';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Container from '../ControlPanel/Container/Container';\nimport ListItem from '../ControlPanel/ListItem/ListItem';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport './SearchItem.scss';\n\nconst SearchItem = ({ data, handleModal }) => {\n const { i18n, userName } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory()\n\n const signInAs = user => {\n dispatch(loginAs(user)).then(() => history.push('/'));\n }\n\n const signOut = () => {\n dispatch(logout()).then(() => history.push('/'));\n }\n\n const handleDelete = () => {\n handleModal(data.delete_confirmation, `/api/v1/${data.TYPE === 'user' ? `/api/v1/delete/user/index.php?user=${data.USER}` : data.delete_link}`);\n }\n\n const handleSuspend = () => {\n handleModal(data.spnd_confirmation, `/api/v1/${data.TYPE === 'user' ? `${data.spnd_action}/user/index.php?user=${data.USER}` : data.spnd_link}`);\n }\n\n const printLoginActionButton = () => {\n if (data.TYPE !== 'user') return;\n\n if (userName === data.USER) {\n return (\n <div>\n <button onClick={signOut}>{i18n['Log out']}\n {data.FOCUSED ? <span className=\"shortcut-button\">L</span> : <FontAwesomeIcon icon=\"user-lock\" />}\n </button>\n </div>\n );\n } else {\n return (\n <div>\n <button onClick={() => signInAs(data.USER)}>{i18n['login as']} {data.USER}\n {data.FOCUSED ? <span className=\"shortcut-button\">L</span> : <FontAwesomeIcon icon=\"user-lock\" />}\n </button>\n </div>\n );\n }\n }\n\n return (\n <ListItem date={data.DATE} suspended={data.SUSPENDED === 'yes'}>\n <Container className=\"search-list r-col w-85\">\n <div className=\"name\">{data.RESULT}</div>\n <div className=\"stats\">\n <Container className=\"c-1\">\n <div className=\"object\">{data.TYPE === 'user' ? i18n['USER'] : i18n[data.object]}</div>\n </Container>\n <Container className=\"c-2\">\n <div className=\"owner\">{i18n.Owner}: <span>{data.USER}</span></div>\n </Container>\n <Container className=\"c-3\">\n <div className=\"status\">{i18n.Status}: <span>{data.status}</span></div>\n </Container>\n </div>\n </Container>\n <div className=\"actions\">\n {printLoginActionButton()}\n <div><Link className=\"link-edit\" to={data.edit_link}>{i18n.edit} <FontAwesomeIcon icon=\"pen\" /></Link></div>\n <div>\n <button\n className=\"link-gray\"\n onClick={handleSuspend}>\n {data.spnd_action}\n <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />\n </button>\n </div>\n <div>\n <button\n className=\"link-delete\"\n onClick={handleDelete}>\n {i18n.Delete}\n <FontAwesomeIcon icon=\"times\" />\n </button>\n </div>\n </div>\n </ListItem>\n );\n}\n\nexport default SearchItem;\n","import React, { Component, useEffect, useState } from 'react';\nimport DropdownFilter from '../../components/MainNav/Toolbar/DropdownFilter/DropdownFilter';\nimport { getSearchResultsList, handleAction } from '../../ControlPanelService/Search';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport SearchItem from '../../components/Searchitem/SearchItem';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport Modal from '../../components/ControlPanel/Modal/Modal';\nimport Spinner from '../../components/Spinner/Spinner';\nimport './Search.scss';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';\n\nconst Search = props => {\n const { i18n } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const [state, setState] = useState({\n searchResults: [],\n totalAmount: '',\n sorting: i18n.Date,\n order: \"descending\",\n total: 0\n });\n const [modal, setModal] = useState({\n visible: false,\n text: '',\n actionUrl: ''\n });\n\n useEffect(() => {\n const { search } = history.location;\n\n if (search) {\n let searchTerm = search.split('=')[1];\n\n if (searchTerm !== '') {\n fetchData(searchTerm).then(() => setLoading(false));\n } else {\n return history.push({ pathname: '/list/user/', search: '' });\n }\n } else if (props.searchTerm !== '') {\n fetchData(props.searchTerm).then(() => setLoading(false));\n } else {\n return history.push({ pathname: '/list/user/', search: '' });\n }\n }, []);\n\n const fetchData = searchTerm => {\n setLoading(true);\n return new Promise((resolve, reject) => {\n getSearchResultsList(searchTerm)\n .then(result => {\n setState({\n ...state,\n searchResults: result.data.data,\n totalAmount: result.data.total\n });\n resolve();\n })\n .catch(err => console.error(err));\n });\n }\n\n const searchResults = () => {\n const { searchResults } = state;\n const result = [];\n\n for (let i in searchResults) {\n result.push(searchResults[i]);\n }\n\n let sortedResult = sortArray(result);\n\n return sortedResult.map((item, index) => {\n return <SearchItem data={item} key={index} handleModal={displayModal} />;\n });\n }\n\n const changeSorting = (sorting, order) => {\n setState({\n ...state,\n sorting,\n order\n });\n }\n\n const sortArray = array => {\n const { order, sorting } = state;\n let sortBy = sortByHandler(sorting);\n\n if (order === \"descending\") {\n return array.sort((a, b) => (a[sortBy] < b[sortBy]) ? 1 : ((b[sortBy] < a[sortBy]) ? -1 : 0));\n } else {\n return array.sort((a, b) => (a[sortBy] > b[sortBy]) ? 1 : ((b[sortBy] > a[sortBy]) ? -1 : 0));\n }\n }\n\n const sortByHandler = sorting => {\n const { Date, Name, Starred } = i18n;\n\n switch (sorting) {\n case Date: return 'DATE';\n case Name: return 'RESULT';\n default: break;\n }\n }\n\n const displayModal = (text, url) => {\n setModal({\n ...modal,\n visible: !modal.visible,\n text,\n actionUrl: url\n });\n }\n\n const modalConfirmHandler = () => {\n if (!modal.actionUrl) {\n return modalCancelHandler();\n }\n\n modalCancelHandler();\n setLoading(true);\n handleAction(modal.actionUrl)\n .then(res => {\n if (res.data.error) {\n setLoading(false);\n return displayModal(res.data.error, '');\n }\n fetchData().then(() => refreshMenuCounters())\n })\n .catch(err => { setLoading(false); console.error(err); });\n }\n\n const refreshMenuCounters = () => {\n dispatch(refreshCounters()).then(() => setLoading(false));\n }\n\n const modalCancelHandler = () => {\n setModal({\n ...modal,\n visible: false,\n text: '',\n actionUrl: ''\n });\n }\n\n return (\n <div className=\"logs-list\">\n <Toolbar mobile={false}>\n <div className=\"search-toolbar-name\">{i18n['Search Results']}</div>\n <div className=\"search-toolbar-right\">\n <DropdownFilter changeSorting={changeSorting} sorting={state.sorting} order={state.order} list=\"searchList\" />\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </Toolbar>\n <div className=\"statistics-wrapper\">\n {loading\n ? <Spinner />\n : (<>\n {searchResults()}\n <div className=\"total\">{state.totalAmount}</div>\n </>)}\n </div>\n <Modal\n onSave={modalConfirmHandler}\n onCancel={modalCancelHandler}\n show={modal.visible}\n text={modal.text} />\n </div>\n );\n}\n\nexport default Search;\n","import axios from \"axios\";\n\nconst BASE_URL = window.location.origin;\nconst webApiUri = '/api/v1/list/log/index.php';\n\nexport const getLogsList = () => {\n return axios.get(BASE_URL + webApiUri);\n}","import React from 'react';\nimport Container from '../ControlPanel/Container/Container';\nimport './Log.scss';\n\nconst Log = props => {\n const { data } = props;\n\n const printDate = date => {\n let newDate = new Date(date);\n let day = newDate.getDate();\n let month = newDate.getMonth();\n let year = newDate.getFullYear();\n let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n return <div className=\"date\">{day} &nbsp; {months[month]} &nbsp; {year}</div>;\n }\n\n return (\n <div className={data.FOCUSED ? 'statistic-item focused' : 'statistic-item'} id={data.NAME}>\n <Container className=\"l-col w-15\">\n {printDate(data.DATE)}\n {data.TIME}\n </Container>\n <Container className=\"r-col w-85\">\n <div className=\"name\">{data.CMD}</div>\n </Container>\n </div>\n );\n}\n\nexport default Log;","import React, { useEffect, useState } from 'react';\nimport { addControlPanelContentFocusedElement, removeControlPanelContentFocusedElement } from '../../actions/ControlPanelContent/controlPanelContentActions';\nimport { addActiveElement, removeFocusedElement } from '../../actions/MainNavigation/mainNavigationActions';\nimport * as MainNavigation from '../../actions/MainNavigation/mainNavigationActions';\nimport SearchInput from '../../components/MainNav/Toolbar/SearchInput/SearchInput';\nimport LeftButton from '../../components/MainNav/Toolbar/LeftButton/LeftButton';\nimport Toolbar from '../../components/MainNav/Toolbar/Toolbar';\nimport { getLogsList } from '../../ControlPanelService/Logs';\nimport Spinner from '../../components/Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Log from '../../components/Log/Log';\nimport './Logs.scss';\nimport { Helmet } from 'react-helmet';\n\nconst Logs = props => {\n const { i18n } = useSelector(state => state.session);\n const { controlPanelFocusedElement } = useSelector(state => state.controlPanelContent);\n const { focusedElement } = useSelector(state => state.mainNavigation);\n const dispatch = useDispatch();\n const [state, setState] = useState({\n logs: [],\n totalAmount: '',\n loading: false,\n total: 0\n });\n\n useEffect(() => {\n dispatch(addActiveElement('/list/log/'));\n dispatch(removeFocusedElement());\n dispatch(removeControlPanelContentFocusedElement());\n fetchData();\n\n return () => {\n dispatch(removeControlPanelContentFocusedElement());\n }\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"keydown\", handleContentSelection);\n\n return () => {\n window.removeEventListener(\"keydown\", handleContentSelection);\n };\n }, [controlPanelFocusedElement, focusedElement, state.logs]);\n\n const handleContentSelection = event => {\n if (event.keyCode === 38 || event.keyCode === 40) {\n if (focusedElement) {\n dispatch(MainNavigation.removeFocusedElement());\n }\n }\n\n if (event.keyCode === 38) {\n event.preventDefault();\n handleArrowUp();\n } else if (event.keyCode === 40) {\n event.preventDefault();\n handleArrowDown();\n }\n }\n\n const initFocusedElement = logs => {\n logs[0]['FOCUSED'] = logs[0]['NAME'];\n setState({ ...state, logs });\n dispatch(addControlPanelContentFocusedElement(logs[0]['NAME']));\n }\n\n const handleArrowDown = () => {\n let logs = [...state.logs];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(logs);\n return;\n }\n\n let focusedElementPosition = logs.findIndex(log => log.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== logs.length - 1) {\n let nextFocusedElement = logs[focusedElementPosition + 1];\n logs[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, logs });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const handleArrowUp = () => {\n let logs = [...state.logs];\n\n if (focusedElement) {\n MainNavigation.removeFocusedElement();\n }\n\n if (controlPanelFocusedElement === '') {\n initFocusedElement(logs);\n return;\n }\n\n let focusedElementPosition = logs.findIndex(log => log.NAME === controlPanelFocusedElement);\n\n if (focusedElementPosition !== 0) {\n let nextFocusedElement = logs[focusedElementPosition - 1];\n logs[focusedElementPosition]['FOCUSED'] = '';\n nextFocusedElement['FOCUSED'] = nextFocusedElement['NAME'];\n document.getElementById(nextFocusedElement['NAME']).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n setState({ ...state, logs });\n dispatch(addControlPanelContentFocusedElement(nextFocusedElement['NAME']));\n }\n }\n\n const fetchData = () => {\n setState({ ...state, loading: true });\n\n getLogsList()\n .then(result => {\n setState({\n logs: reformatData(result.data.data),\n totalAmount: result.data.totalAmount,\n loading: false\n });\n })\n .catch(err => console.error(err));\n }\n\n const reformatData = data => {\n let logs = [];\n\n for (let i in data) {\n data[i]['NAME'] = i;\n data[i]['FOCUSED'] = controlPanelFocusedElement === i;\n logs.push(data[i]);\n }\n\n return logs;\n }\n\n const logs = () => {\n let logs = [...state.logs];\n\n logs.forEach(log => {\n log.FOCUSED = controlPanelFocusedElement === log.NAME;\n });\n\n return logs.map((item, index) => {\n return <Log data={item} key={index} />;\n });\n }\n\n return (\n <div className=\"logs-list\">\n <Helmet>\n <title>{`Vesta - ${i18n.LOG}`}</title>\n </Helmet>\n <Toolbar mobile={false} className=\"justify-right\">\n <LeftButton name=\"Add Cron Job\" showLeftMenu={false} />\n <div className=\"r-menu\">\n <div className=\"input-group input-group-sm\">\n <SearchInput handleSearchTerm={term => props.changeSearchTerm(term)} />\n </div>\n </div>\n </Toolbar>\n <div className=\"logs-wrapper\">\n {state.loading ? <Spinner /> : logs()}\n </div>\n <div className=\"total\">{state.totalAmount}</div>\n </div>\n );\n}\n\nexport default Logs;","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { addActiveElement, removeFocusedElement } from \"../../actions/MainNavigation/mainNavigationActions\";\nimport EditInternetProtocol from '../../components/InternetProtocol/Edit/EditInternetProtocol';\nimport AddInternetProtocol from '../../components/InternetProtocol/Add/AddInternetProtocol';\nimport EditServerNginx from 'src/components/Server/Edit/Nginx/EditServerNginx';\nimport Postgresql from 'src/components/Server/Edit/Postgresql/Postgresql';\nimport EditBackupExclusions from 'src/components/Backup/Exclusion/Edit';\nimport { Route, Switch, Redirect, useHistory } from \"react-router-dom\";\nimport InternetProtocols from '../InternetProtocols/InternetProtocols';\nimport AddWebDomain from '../../components/WebDomain/Add/AddWebDomain';\nimport EditDatabase from '../../components/Database/Edit/EditDatabase';\nimport EditFirewall from '../../components/Firewall/Edit/EditFirewall';\nimport Hotkeys from '../../components/ControlPanel/Hotkeys/Hotkeys';\nimport AddDatabase from '../../components/Database/Add/AddDatabase';\nimport AddFirewall from '../../components/Firewall/Add/AddFirewall';\nimport EditCronJob from '../../components/CronJob/Edit/EditCronJob';\nimport EditPackage from '../../components/Package/Edit/EditPackage';\nimport EditHttpd from 'src/components/Server/Edit/Httpd/EditHttpd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport AddCronJob from '../../components/CronJob/Add/AddCronJob';\nimport AddPackage from '../../components/Package/Add/AddPackage';\nimport EditServer from '../../components/Server/Edit/EditServer';\nimport Dovecot from 'src/components/Server/Edit/Dovecot/Dovecot';\nimport EditMailWrapper from '../EditMailWrapper/EditMailWrapper';\nimport Service from 'src/components/Server/Edit/Service/Service';\nimport AddMailWrapper from '../AddMailWrapper/AddMailWrapper';\nimport EditDNSWrapper from '../EditDNSWrapper/EditDNSWrapper';\nimport EditWeb from '../../components/WebDomain/Edit/EditWeb';\nimport EditPhp from 'src/components/Server/Edit/PHP/EditPhp';\nimport Databases from '../../containers/Databases/Databases';\nimport Firewalls from '../../containers/Firewalls/Firewalls';\nimport EditUser from '../../components/User/Edit/EditUser';\nimport Bind9 from 'src/components/Server/Edit/Bind9/Bind9';\nimport Mysql from 'src/components/Server/Edit/Mysql/Mysql';\nimport AddDNSWrapper from '../AddDNSWrapper/AddDNSWrapper';\nimport BackupWrapper from '../BackupWrapper/BackupWrapper';\nimport AddBanIP from 'src/components/Firewall/Add/Banlist';\nimport CronJobs from '../../containers/CronJobs/CronJobs';\nimport Packages from '../../containers/Packages/Packages';\nimport { services } from 'src/ControlPanelService/Server';\nimport AddUser from '../../components/User/Add/AddUser';\nimport Updates from '../../containers/Updates/Updates';\nimport Servers from '../../containers/Servers/Servers';\nimport MainNav from '../../components/MainNav/MainNav';\nimport BackupExclusions from '../Backups/Exclusions';\nimport MailWrapper from '../MailWrapper/MailWrapper';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport DNSWrapper from '../DNSWrapper/DNSWrapper';\nimport Statistics from '../Statistics/Statistics';\nimport Users from '../../containers/Users/Users';\nimport RRDs from '../../containers/RRDs/RRDs';\nimport BanList from '../Firewalls/Banlist';\nimport Web from '../../containers/Web/Web';\nimport Search from '../Search/Search';\nimport Logs from '../Logs/Logs';\n\nimport './ControlPanelContent.scss';\n\nconst ControlPanelContent = props => {\n const { userName, session: { look } } = useSelector(state => state.session);\n const history = useHistory();\n const [searchTerm, setSearchTerm] = useState('');\n const [hotkeysList, setHotkeysList] = useState(null);\n const [loading, setLoading] = useState(true);\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (!userName) {\n return history.push('/login');\n } else {\n setLoading(false);\n }\n\n if (look) {\n const commonUserRoutes = ['package', 'ip', 'rrd', 'updates', 'firewall', 'server'];\n const splitPath = history.location.pathname.split('/')[2];\n\n if (history.location.pathname === '/add/user/') return history.push('/');\n\n if (commonUserRoutes.includes(splitPath)) {\n return history.push('/');\n }\n }\n }, [userName, look]);\n\n useEffect(() => {\n dispatch(removeFocusedElement());\n window.addEventListener(\"keyup\", switchPanelTab);\n window.addEventListener(\"keyup\", addNewObject);\n\n return () => {\n window.removeEventListener(\"keyup\", switchPanelTab);\n window.removeEventListener(\"keyup\", addNewObject);\n }\n }, []);\n\n const switchPanelTab = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (isSearchInputFocused) {\n return;\n }\n\n switch (event.keyCode) {\n case 49: return history.push('/list/user/');\n case 50: return history.push('/list/web/');\n case 51: return history.push('/list/dns/');\n case 52: return history.push('/list/mail/');\n case 53: return history.push('/list/db/');\n case 54: return history.push('/list/cron/');\n case 55: return history.push('/list/backup/');\n default: break;\n }\n }\n\n const addNewObject = event => {\n let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus');\n\n if (isSearchInputFocused) {\n return;\n }\n\n if (event.keyCode === 65) {\n switch (history.location.pathname) {\n case '/list/user/': return look ? history.push('/add/web/') : history.push('/add/user/');\n case '/list/web/': return history.push('/add/web/');\n case '/list/dns/': return history.push('/add/dns/');\n case '/list/mail/': return history.push('/add/mail/');\n case '/list/db/': return history.push('/add/db/');\n case '/list/cron/': return history.push('/add/cron/');\n case '/list/backup/exclusions': return history.push('/edit/backup/exclusions/');\n case '/list/package/': return history.push('/add/package/');\n case '/list/ip/': return history.push('/add/ip/');\n case '/list/firewall/': return history.push('/add/firewall/');\n default: break;\n }\n }\n }\n\n const handleSearchTerm = searchTerm => {\n setSearchTerm(searchTerm);\n history.push({\n pathname: '/search/',\n search: `?q=${searchTerm}`\n });\n }\n\n const scrollToTop = () => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n\n return (\n <div>\n <MainNav />\n <div className=\"content\">\n {\n loading\n ? <Spinner />\n : (\n <Switch>\n <Redirect from=\"/\" exact to=\"/list/user/\" />\n <Route path=\"/list/package\" component={props => <Packages {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/add/package\" component={() => <AddPackage />} />\n <Route path=\"/edit/package\" component={() => <EditPackage />} />\n <Route path=\"/list/ip\" component={props => <InternetProtocols {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/add/ip\" component={() => <AddInternetProtocol />} />\n <Route path=\"/edit/ip\" component={() => <EditInternetProtocol />} />\n <Route path=\"/list/rrd\" component={props => <RRDs {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/list/stats\" component={props => <Statistics {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/list/log\" component={props => <Logs {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/list/updates\" component={props => <Updates {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/list/firewall\" exact component={props => <Firewalls {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/list/firewall/banlist\" exact component={props => <BanList {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/add/firewall/banlist\" component={AddBanIP} />\n <Route path=\"/add/firewall\" component={() => <AddFirewall />} />\n <Route path=\"/edit/firewall\" component={() => <EditFirewall />} />\n <Route path=\"/list/server/\" exact component={props => <Servers {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/edit/server/\" exact component={() => <EditServer />} />\n <Route path=\"/edit/server/nginx\" exact component={() => <EditServerNginx />} />\n <Route path=\"/edit/server/php\" exact component={() => <EditPhp serviceName=\"php\" />} />\n <Route path=\"/edit/server/php-fpm\" exact component={() => <EditPhp serviceName=\"php-fpm\" />} />\n <Route path=\"/edit/server/php5-fpm\" exact component={() => <EditPhp serviceName=\"php5-fpm\" />} />\n <Route path=\"/edit/server/httpd\" exact component={() => <EditHttpd />} />\n <Route path=\"/edit/server/dovecot\" exact component={() => <Dovecot />} />\n <Route path=\"/edit/server/bind9\" exact component={() => <Bind9 />} />\n <Route path=\"/edit/server/postgresql\" exact component={() => <Postgresql />} />\n <Route path=\"/edit/server/mysql\" exact component={() => <Mysql serviceName=\"mysql\" />} />\n <Route path=\"/edit/server/mariadb\" exact component={() => <Mysql serviceName=\"mariadb\" />} />\n <Route path=\"/edit/server/mysqld\" exact component={() => <Mysql serviceName=\"mysqld\" />} />\n\n {\n !!services.length && services.map((service, index) => {\n if (service === 'iptables') {\n return <Redirect key={index} from=\"/edit/server/iptables\" exact to=\"/list/firewall\" />\n } else {\n return <Route key={index} path={`/edit/server/${service}`} exact component={() => <Service serviceName={service} />} />\n }\n })\n }\n\n <Route path=\"/list/user\" component={props => <Users changeSearchTerm={handleSearchTerm} {...props} />} />\n <Route path=\"/add/user\" component={() => <AddUser />} />\n <Route path=\"/edit/user\" component={() => <EditUser />} />\n <Route path=\"/list/web\" component={props => <Web {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/add/web\" component={() => <AddWebDomain />} />\n <Route path=\"/edit/web\" component={() => <EditWeb />} />\n <Route path=\"/list/dns\" component={props => <DNSWrapper {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/add/dns\" component={() => <AddDNSWrapper />} />\n <Route path=\"/edit/dns\" component={() => <EditDNSWrapper />} />\n <Route path=\"/list/mail\" component={props => <MailWrapper {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/add/mail\" component={() => <AddMailWrapper />} />\n <Route path=\"/edit/mail\" component={() => <EditMailWrapper />} />\n <Route path=\"/list/db\" component={props => <Databases {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/add/db\" component={() => <AddDatabase />} />\n <Route path=\"/edit/db\" component={() => <EditDatabase />} />\n <Route path=\"/list/cron\" component={props => <CronJobs {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route path=\"/add/cron\" component={() => <AddCronJob />} />\n <Route path=\"/edit/cron\" component={() => <EditCronJob />} />\n <Route exact path=\"/list/backup\" component={props => <BackupWrapper {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route exact path=\"/list/backup/exclusions\" component={props => <BackupExclusions {...props} changeSearchTerm={handleSearchTerm} />} />\n <Route exact path=\"/edit/backup/exclusions\" component={EditBackupExclusions} />\n <Route path=\"/search/\" component={props => <Search {...props} changeSearchTerm={handleSearchTerm} searchTerm={searchTerm} />} />\n </Switch>\n )}\n </div>\n <div className=\"fixed-buttons\">\n <div className=\"hotkey-button\">\n <button onClick={() => hotkeysList.classList.toggle('hide')}>\n <FontAwesomeIcon icon=\"ellipsis-h\" />\n </button>\n </div>\n <div className=\"scroll-to-top\">\n <button onClick={() => scrollToTop()}>\n <FontAwesomeIcon icon=\"long-arrow-alt-up\" />\n </button>\n </div>\n </div>\n <Hotkeys reference={(inp) => setHotkeysList(inp)} toggleHotkeys={() => hotkeysList.classList.toggle('hide')} />\n </div>\n );\n}\n\nexport default ControlPanelContent;\n","import React, { useState } from 'react';\nimport { addActiveElement } from 'src/actions/MainNavigation/mainNavigationActions';\nimport { logout } from 'src/actions/Session/sessionActions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport Spinner from '../Spinner/Spinner';\n\nimport './TopPanel.scss';\n\nconst TopPanel = ({ menuItems = [], extraMenuItems = [] }) => {\n const mainNavigation = useSelector(state => state.mainNavigation);\n const [loading, setLoading] = useState(false);\n const { i18n, userName } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory();\n\n const className = cls => {\n let className = 'nav-link';\n\n if (mainNavigation.activeElement === cls) {\n return className += ' active';\n }\n\n return className;\n }\n\n const renderMenuItems = () => {\n if (!menuItems.length) return;\n\n return menuItems.map(({ route, name }) => (\n <div className={className(route)} key={name}>\n <button onClick={event => handleState(event, route)}>{name}</button>\n </div>\n ));\n }\n\n const renderExtraMenuItems = () => {\n if (!extraMenuItems.length) return;\n\n return extraMenuItems.map(({ link, text, type }, index) => (\n <div className=\"nav-link\" key={index}>\n {\n type === 'download'\n ? <a href={`/api/v1${link}`} target=\"_blank\" rel=\"noopener noreferrer\">{text}</a>\n : <Link to={link} target=\"_blank\">{text}</Link>\n }\n </div>\n ));\n }\n\n const handleState = (event, route) => {\n event.preventDefault();\n history.push(route);\n dispatch(addActiveElement(route));\n }\n\n const signOut = () => {\n setLoading(true);\n\n dispatch(logout())\n .then(() => {\n history.push('/login/');\n setLoading(false);\n },\n error => {\n setLoading(false);\n console.error(error);\n });\n }\n\n return (\n <div className=\"panel-wrapper\">\n {loading && <Spinner />}\n\n <div className=\"top-panel\">\n <div className=\"container left-menu\">\n <div className=\"logo\">\n <Link to=\"/list/user/\">\n <div className=\"logo-img\">\n <img src=\"/images/white_logo.png\" alt=\"Logo\" />\n </div>\n </Link>\n </div>\n\n {renderMenuItems()}\n\n {renderExtraMenuItems()}\n </div>\n\n <div className=\"container profile-menu\">\n <div><Link to={`/edit/user?user=${userName}`}>{userName}</Link></div>\n <div><button className=\"log-out\" onClick={signOut}>{i18n['Log out']}</button></div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default TopPanel;\n","import axios from \"axios\";\n\nconst BASE_URL = window.location.origin;\n\nexport const getWebLogs = uri => {\n return axios.get(BASE_URL + '/api/v1' +uri);\n}","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement } from 'src/actions/MainNavigation/mainNavigationActions';\nimport TopPanel from 'src/components/TopPanel/TopPanel';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QueryString from 'qs';\n\nimport './WebLogs.scss';\nimport { getWebLogs } from 'src/ControlPanelService/WebLogs';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport { Helmet } from 'react-helmet';\n\nexport default function WebLogs() {\n const { i18n, userName } = useSelector(state => state.session);\n const history = useHistory();\n const dispatch = useDispatch();\n const mainNavigation = useSelector(state => state.mainNavigation);\n const [domain, setDomain] = useState();\n const [state, setState] = useState({\n data: \"\",\n loading: false\n });\n\n useEffect(() => {\n if (!userName) {\n history.push('/login/');\n }\n }, []);\n\n useEffect(() => {\n let parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true });\n const { domain, type } = parsedQueryString;\n\n if (!parsedQueryString && !domain && !type) {\n return history.goBack();\n }\n\n setDomain(domain);\n let uri = `/list/web-log/?domain=${domain}&type=${type}`;\n fetchData(uri);\n\n dispatch(addActiveElement(`/list/web-log/${type}`));\n }, [mainNavigation.activeElement]);\n\n const fetchData = uri => {\n setState({\n ...state,\n loading: true\n });\n\n getWebLogs(uri)\n .then(result => {\n if (result.data) {\n setState({ ...state, data: result.data.data, loading: false });\n }\n })\n .catch(error => {\n console.error(error);\n setState({ ...state, loading: false });\n });\n }\n\n const menuItems = [\n {\n route: `/list/web-log/?domain=${domain}&type=access`,\n name: i18n['AccessLog']\n },\n {\n route: `/list/web-log/?domain=${domain}&type=error`,\n name: i18n['ErrorLog']\n }\n ];\n\n const extraMenuItems = [\n {\n link: `/download/web-log/?domain=${domain ?? ''}&type=access`,\n type: 'download',\n text: i18n['Download AccessLog']\n },\n {\n link: `/download/web-log/?domain=${domain ?? ''}&type=error`,\n type: 'download',\n text: i18n['Download ErrorLog'],\n }\n ];\n\n return (\n <div className=\"web-logs\">\n <Helmet>\n <title>{`Vesta - ${i18n.WEB}`}</title>\n </Helmet>\n <TopPanel menuItems={menuItems} extraMenuItems={extraMenuItems} />\n <div className=\"content\">\n {\n state.loading\n ? <Spinner />\n : (\n <pre>\n {state.data}\n </pre>\n )\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport '../AddItemLayout/AddItemLayout.scss';\nimport './LoginLayout.scss';\n\nconst LoginLayout = ({ children }) => {\n return (\n <div className=\"login-layout\">\n {children}\n </div>\n );\n}\n\nexport default LoginLayout;","import React, { useEffect, useState } from 'react';\n\nimport { Link, useHistory } from 'react-router-dom';\nimport Spinner from '../Spinner/Spinner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { login } from '../../actions/Session/sessionActions';\nimport LoginLayout from '../ControlPanel/LoginLayout/LoginLayout';\nimport TextInput from '../ControlPanel/AddItemLayout/Form/TextInput/TextInput';\n\nimport './Login.scss';\nimport { Helmet } from 'react-helmet';\n\nexport default function LoginForm() {\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory();\n const [loading, setLoading] = useState(false);\n const [formValues, setFormValues] = useState({\n user: '',\n password: ''\n });\n const session = useSelector(state => state.session);\n const [errorMessage, setErrorMessage] = useState('');\n\n useEffect(() => {\n if (session.error) {\n setErrorMessage(session.error);\n return;\n }\n\n if (session.token && session.userName) {\n history.push('/list/user/');\n }\n }, [session]);\n\n const submitHandler = event => {\n event.preventDefault();\n const { user, password } = formValues;\n\n setLoading(true);\n\n dispatch(login(user, password))\n .then((res) => {\n setLoading(false);\n });\n }\n\n const changeInputHandler = event => {\n const { value, name } = event.target;\n\n setFormValues({\n ...formValues,\n [name]: value\n });\n }\n\n return (\n <div className=\"login-page\">\n <Helmet>\n <title>{`Vesta - ${i18n.LOGIN ?? 'LOGIN'}`}</title>\n </Helmet>\n {loading && <Spinner />}\n <div className=\"login-form-wrapper\">\n <LoginLayout>\n <form onSubmit={submitHandler}>\n <div className=\"c1\">\n <Link to=\"/\">\n <img src=\"/images/logo.png\" alt=\"Logo\" />\n </Link>\n </div>\n <div className=\"c2\">\n <TextInput\n onChange={changeInputHandler}\n title={i18n['Username'] ?? 'Username'}\n value={formValues.user}\n name=\"user\"\n id=\"user\" />\n\n <TextInput\n onChange={changeInputHandler}\n title={i18n['Password'] ?? 'Password'}\n value={formValues.password}\n optionalTitle={(\n <Link className=\"forgot-password\" tabIndex=\"-1\" to=\"/reset\">\n {i18n['forgot password'] ?? 'forgot password'}\n </Link>\n )}\n name=\"password\"\n type=\"password\"\n id=\"password\" />\n\n <button type=\"submit\" disabled={loading} className={loading ? 'disabled' : ''}>\n {i18n['Log in'] ?? 'Log in'}\n </button>\n\n <div className=\"error-message\">{errorMessage}</div>\n </div>\n </form>\n\n <span>\n <a href=\"http://vestacp.com/\">vestacp.com</a>\n </span>\n </LoginLayout>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { addActiveElement } from 'src/actions/MainNavigation/mainNavigationActions';\nimport TopPanel from 'src/components/TopPanel/TopPanel';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { getServiceLogs } from 'src/ControlPanelService/Server';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport { Helmet } from 'react-helmet';\nimport ReactHtmlParser from 'react-html-parser';\n\nimport './styles.scss';\n\nconst ServiceInfo = () => {\n const { i18n, userName } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const { activeElement } = useSelector(state => state.mainNavigation);\n const history = useHistory();\n const { service } = useParams();\n const [state, setState] = useState({\n data: \"\",\n loading: false\n });\n\n useEffect(() => {\n if (!userName) {\n history.push('/login/');\n }\n }, [userName]);\n\n useEffect(() => {\n fetchData();\n dispatch(addActiveElement(`/list/server/${service}`));\n }, [activeElement]);\n\n const fetchData = () => {\n setState({ ...state, loading: true });\n\n getServiceLogs(service)\n .then(result => {\n setState({ ...state, data: result.data.service_log, loading: false });\n })\n .catch(error => {\n console.error(error);\n setState({ ...state, loading: false });\n });\n }\n\n const menuItems = [\n {\n route: '/list/server/cpu',\n name: i18n['CPU']\n },\n {\n route: '/list/server/mem',\n name: i18n['MEMORY']\n },\n {\n route: '/list/server/disk',\n name: i18n['DISK']\n },\n {\n route: '/list/server/net',\n name: i18n['NETWORK']\n },\n {\n route: '/list/server/web',\n name: i18n['WEB']\n },\n {\n route: '/list/server/dns',\n name: i18n['DNS']\n },\n {\n route: '/list/server/mail',\n name: i18n['MAIL']\n },\n {\n route: '/list/server/db',\n name: i18n['DB']\n }\n ];\n\n return (\n <div className=\"service-info\">\n <Helmet>\n <title>{`Vesta - ${i18n.SERVER}`}</title>\n </Helmet>\n <TopPanel menuItems={menuItems} />\n <div className=\"content\">\n {\n state.loading\n ? <Spinner />\n : (<pre>\n {state.data.length && state.data.map(line => (<>{ReactHtmlParser(line)}<br /></>))}\n </pre>)\n }\n </div>\n </div>\n );\n}\n\nexport default ServiceInfo;\n","import React, { useEffect, useState } from 'react';\n\nimport TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';\nimport Password from 'src/components/ControlPanel/AddItemLayout/Form/Password/Password';\nimport LoginLayout from 'src/components/ControlPanel/LoginLayout/LoginLayout';\nimport { resetPassword } from 'src/ControlPanelService/ResetPassword';\nimport { Link, useHistory, useLocation } from 'react-router-dom';\nimport { reset } from 'src/actions/Session/sessionActions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Spinner from 'src/components/Spinner/Spinner';\nimport ReactHtmlParser from 'react-html-parser';\nimport { Helmet } from 'react-helmet';\nimport QueryString from 'qs';\n\nexport default function ForgotPassword() {\n const { i18n } = useSelector(state => state.session);\n const dispatch = useDispatch();\n const history = useHistory();\n const [loading, setLoading] = useState(false);\n const [state, setState] = useState({\n action: '',\n user: '',\n code: '',\n });\n const session = useSelector(state => state.session);\n const location = useLocation();\n const [errorMessage, setErrorMessage] = useState('');\n\n useEffect(() => {\n const parsedQueryString = QueryString.parse(location.search, { ignoreQueryPrefix: true });\n\n setState({\n ...state,\n action: parsedQueryString.action || '',\n user: parsedQueryString.user || '',\n code: parsedQueryString.code || ''\n });\n }, []);\n\n useEffect(() => {\n if (session.error) {\n setErrorMessage(session.error);\n return;\n }\n\n if (session.token && session.userName) {\n history.push('/list/user/');\n }\n }, [session]);\n\n const submitHandler = event => {\n event.preventDefault();\n\n if (!state.code && !state.user) return;\n\n if (!state.action && state.user) {\n completeStep1();\n return;\n }\n\n if (state.action === 'code' && state.user && state.code) {\n completeStep2();\n return;\n }\n\n setLoading(true);\n const data = { user: state.user, code: state.code };\n\n for (var [name, value] of (new FormData(event.target)).entries()) {\n data[name] = value;\n }\n\n dispatch(reset(data))\n .then(res => {\n if (res.error) {\n setErrorMessage(res.error);\n } else {\n history.push('/login');\n setErrorMessage('');\n }\n\n setLoading(false);\n });\n }\n\n const changeInputHandler = event => {\n const { value, name } = event.target;\n\n setState({ ...state, [name]: value });\n }\n\n const completeStep1 = () => {\n if (!state.user) return;\n setLoading(true);\n\n resetPassword(state.user)\n .then(res => {\n setErrorMessage(res.data.error || '');\n setState({ ...state, action: 'code' });\n setLoading(false);\n })\n .catch(error => {\n console.error(error);\n setLoading(false);\n });\n }\n\n const completeStep2 = () => {\n setState({ ...state, action: 'confirm' });\n }\n\n return (\n <div className=\"login-page\">\n <Helmet>\n <title>{`Vesta - ${i18n['RESET PASSWORD']}`}</title>\n </Helmet>\n {loading && <Spinner />}\n <div className=\"login-form-wrapper\">\n <LoginLayout>\n <form onSubmit={submitHandler}>\n <div className=\"c1\">\n <Link to=\"/\">\n <img src=\"/images/logo.png\" alt=\"Logo\" />\n </Link>\n </div>\n <div className=\"c2\">\n {\n !state.action && (\n <>\n <TextInput\n onChange={changeInputHandler}\n title={i18n['Username']}\n value={state.user}\n name=\"user\"\n id=\"user\" />\n\n <div className=\"buttons-wrapper\">\n <button className=\"add\" type=\"button\" onClick={completeStep1}>{i18n.Submit}</button>\n <button className=\"back\" type=\"button\" onClick={() => history.push('/login')}>{i18n.Back}</button>\n </div>\n </>\n )\n }\n\n {\n state.action === 'code' && (\n <>\n <span>{ReactHtmlParser(i18n['RESET_CODE_SENT'])}</span><br />\n\n <TextInput\n onChange={changeInputHandler}\n title={i18n['Reset Code']}\n value={state.code}\n name=\"code\"\n id=\"code\" />\n\n <div className=\"buttons-wrapper\">\n <button className=\"add\" type=\"button\" onClick={completeStep2}>{i18n.Confirm}</button>\n <button className=\"back\" type=\"button\" onClick={() => setState({ ...state, action: '', code: '', user: '' })}>{i18n.Back}</button>\n </div>\n </>\n )\n }\n\n {\n state.action === 'confirm' && (\n <>\n <Password name='password' title={i18n['New Password']} showGenerationButton={false} tabIndex={1} />\n\n <Password name='password_confirm' title={i18n['Confirm Password']} showGenerationButton={false} tabIndex={2} />\n\n <div className=\"buttons-wrapper\">\n <button className=\"add\" type=\"submit\" style={{ height: '31px' }}>{i18n.Reset}</button>\n <button className=\"back\" type=\"button\" onClick={() => setState({ ...state, action: 'code', code: '', user: state.user })}>{i18n.Back}</button>\n </div>\n </>\n )\n }\n\n <div className=\"error-message\">{errorMessage}</div>\n </div>\n </form>\n\n <span>\n <a href=\"http://vestacp.com/\">vestacp.com</a>\n </span>\n </LoginLayout>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport FileManager from '../FileManager/FileManager';\nimport { Route, Switch, useHistory, Redirect } from \"react-router\";\nimport Preview from '../../components/Preview/Preview';\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport * as Icon from '@fortawesome/free-solid-svg-icons';\nimport 'bootstrap/dist/css/bootstrap.css';\nimport 'bootstrap/dist/js/bootstrap.min';\nimport './App.scss';\nimport ControlPanelContent from '../ControlPanelContent/ControlPanelContent';\nimport WebLogs from '../WebLogs/WebLogs';\nimport LoginForm from 'src/components/Login/LoginForm';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { checkAuthHandler } from 'src/actions/Session/sessionActions';\nimport ServiceInfo from 'src/containers/ServiceInfo';\nimport ForgotPassword from 'src/components/ForgotPassword';\nimport Spinner from 'src/components/Spinner/Spinner';\n\nlibrary.add(\n Icon.faBook,\n Icon.faDownload,\n Icon.faFile,\n Icon.faFileAlt,\n Icon.faFolderOpen,\n Icon.faImage,\n Icon.faEllipsisH,\n Icon.faFolder,\n Icon.faItalic,\n Icon.faUser,\n Icon.faCopy,\n Icon.faPaste,\n Icon.faTrash,\n Icon.faBoxOpen,\n Icon.faArrowDown,\n Icon.faArrowUp,\n Icon.faBell,\n Icon.faPlus,\n Icon.faAngleRight,\n Icon.faStar,\n Icon.faUserLock,\n Icon.faPen,\n Icon.faLock,\n Icon.faTimes,\n Icon.faSearch,\n Icon.faCog,\n Icon.faList,\n Icon.faWrench,\n Icon.faFileDownload,\n Icon.faPause,\n Icon.faPlay,\n Icon.faCogs,\n Icon.faStop,\n Icon.faUnlock,\n Icon.faLongArrowAltUp,\n Icon.faEye,\n Icon.faEyeSlash,\n Icon.faLongArrowAltRight,\n Icon.faCaretDown,\n Icon.faCaretUp,\n Icon.faInfinity,\n Icon.faPlay\n);\n\nconst App = () => {\n const history = useHistory();\n const dispatch = useDispatch();\n const session = useSelector(state => state.session);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (!Object.entries(session.i18n).length) {\n dispatch(checkAuthHandler())\n .then(token => {\n setLoading(false);\n }, (error) => {\n console.error(error);\n return history.push('/login');\n });\n }\n }, [dispatch, history, session]);\n\n const AuthenticatedRoute = ({ authenticated, ...rest }) => {\n return (\n <Route {...rest} render={props =>\n authenticated\n ? <rest.component {...props} />\n : <Redirect to=\"/login\" />} />\n );\n }\n\n return (\n <div className=\"App\">\n {\n loading\n ? <Spinner />\n : (\n <Switch>\n <Route path=\"/login\" exact component={LoginForm} />\n <Route path=\"/reset\" exact component={ForgotPassword} />\n <Route\n path=\"/list/directory/\"\n exact\n component={FileManager} />\n <Route\n path=\"/list/directory/preview/\"\n exact\n component={Preview} />\n <AuthenticatedRoute\n path=\"/list/server/:service\"\n authenticated={session.userName}\n component={ServiceInfo} />\n <AuthenticatedRoute\n path=\"/list/web-log/\"\n exact\n authenticated={session.userName}\n component={WebLogs} />\n <AuthenticatedRoute\n path=\"/\"\n authenticated={session.userName}\n loading={loading}\n component={ControlPanelContent} />\n </Switch>\n )\n }\n </div>\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux'\nimport configureStore from './store';\nimport './index.css';\nimport App from './containers/App/App';\nimport * as serviceWorker from './containers/App/serviceWorker';\nimport { BrowserRouter as Router } from 'react-router-dom';\n\nReactDOM.render(\n <Provider store={configureStore()}>\n <Router>\n <App />\n </Router>\n </Provider>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import { composeWithDevTools } from 'redux-devtools-extension';\nimport { createStore, applyMiddleware } from 'redux';\nimport rootReducer from './reducers/rootReducer';\nimport thunk from 'redux-thunk';\n\nexport default function configureStore() {\n return createStore(\n rootReducer,\n composeWithDevTools(applyMiddleware(thunk))\n );\n}"],"sourceRoot":""}