Browse Source

Merge remote-tracking branch 'origin/master' into feature/osal

Ernesto Nicolás Carrea 5 years ago
parent
commit
1476275ce6
77 changed files with 3966 additions and 857 deletions
  1. 37 10
      CHANGELOG.md
  2. 26 11
      CONTRIBUTING.md
  3. 29 76
      README.md
  4. 26 10
      bin/v-add-cron-hestia-autoupdate
  5. 119 0
      bin/v-add-sys-filemanager
  6. 1 1
      bin/v-change-database-owner
  7. 88 5
      bin/v-change-domain-owner
  8. 9 5
      bin/v-change-sys-release
  9. 9 5
      bin/v-delete-cron-hestia-autoupdate
  10. 0 1
      bin/v-delete-mail-domain-ssl
  11. 72 0
      bin/v-delete-sys-filemanager
  12. 10 6
      bin/v-list-sys-config
  13. 61 0
      bin/v-restore-user
  14. 56 20
      bin/v-update-sys-hestia-git
  15. 9 29
      bin/v-update-web-templates
  16. 29 26
      func/upgrade.sh
  17. 39 38
      install/hst-install-debian.sh
  18. 39 38
      install/hst-install-ubuntu.sh
  19. 31 19
      install/upgrade/versions/latest.sh
  20. 2 2
      install/upgrade/versions/previous/1.0.1.sh
  21. 12 17
      install/upgrade/versions/previous/1.0.2.sh
  22. 13 13
      install/upgrade/versions/previous/1.0.4.sh
  23. 18 18
      install/upgrade/versions/previous/1.00.0-190618.sh
  24. 13 13
      install/upgrade/versions/previous/1.1.0.sh
  25. 2 2
      install/upgrade/versions/previous/1.1.1.sh
  26. 1 1
      src/deb/hestia/postinst
  27. 2 2
      src/hst_bootstrap_install.sh
  28. 22 5
      web/css/src/styles.css
  29. 0 0
      web/css/styles.min.css
  30. BIN
      web/images/toggle_password.png
  31. BIN
      web/images/unlim.png
  32. 104 11
      web/inc/i18n/ar.php
  33. 109 11
      web/inc/i18n/az.php
  34. 105 10
      web/inc/i18n/bg.php
  35. 103 11
      web/inc/i18n/bs.php
  36. 103 11
      web/inc/i18n/cn.php
  37. 103 11
      web/inc/i18n/cz.php
  38. 103 11
      web/inc/i18n/da.php
  39. 5 16
      web/inc/i18n/de.php
  40. 131 39
      web/inc/i18n/el.php
  41. 2 13
      web/inc/i18n/en.php
  42. 110 18
      web/inc/i18n/es.php
  43. 102 10
      web/inc/i18n/fa.php
  44. 102 11
      web/inc/i18n/fi.php
  45. 1 12
      web/inc/i18n/fr.php
  46. 93 12
      web/inc/i18n/hr.php
  47. 102 11
      web/inc/i18n/hu.php
  48. 103 11
      web/inc/i18n/id.php
  49. 1 12
      web/inc/i18n/it.php
  50. 102 11
      web/inc/i18n/ja.php
  51. 104 11
      web/inc/i18n/ka.php
  52. 103 11
      web/inc/i18n/ko.php
  53. 19 20
      web/inc/i18n/nl.php
  54. 102 11
      web/inc/i18n/no.php
  55. 14 12
      web/inc/i18n/pl.php
  56. 102 11
      web/inc/i18n/pt-BR.php
  57. 102 11
      web/inc/i18n/pt.php
  58. 101 11
      web/inc/i18n/ro.php
  59. 101 14
      web/inc/i18n/ru.php
  60. 103 11
      web/inc/i18n/se.php
  61. 103 11
      web/inc/i18n/sr.php
  62. 103 11
      web/inc/i18n/th.php
  63. 103 11
      web/inc/i18n/tr.php
  64. 104 11
      web/inc/i18n/tw.php
  65. 103 12
      web/inc/i18n/ua.php
  66. 102 10
      web/inc/i18n/ur.php
  67. 102 11
      web/inc/i18n/vi.php
  68. 1 1
      web/js/events.js
  69. 1 1
      web/templates/admin/add_mail_acc.html
  70. 10 10
      web/templates/admin/add_package.html
  71. 1 1
      web/templates/admin/edit_mail_acc.html
  72. 10 10
      web/templates/admin/edit_package.html
  73. 1 1
      web/templates/admin/list_user.html
  74. 3 1
      web/templates/admin/panel.html
  75. 1 1
      web/templates/header.html
  76. 4 4
      web/templates/login.html
  77. 4 2
      web/templates/user/panel.html

+ 37 - 10
CHANGELOG.md

@@ -3,13 +3,14 @@ All notable changes to this project will be documented in this file.
 
 ## [CURRENT] - Development
 
-## [1.2.0] - 2020-06-29 - Major Release (Feature / Quality Update)
+## [1.2.0] - Major Release (Feature / Quality Update)
 ### Features
+- **NOTE:** Debian 8 is no longer supported as it has reached EOL (end-of-life) status.
 - Added support for Ubuntu Server 20.04 LTS.
-- Added File Manager functionality (Filegator).
+- Added File Manager functionality (with File Gator backend) with the ability to add or remove at any time (`v-add-sys-filemanager` and `v-delete-sys-filemanager`)
 - Extended built-in firewall to support allowing or blocking traffic using IP lists.
 - Improved Apache2 performance by switching to mpm_event instead mod_prefork by default for new installations.
-- Added support for configuring individual TTL per DNS record. Thanks to @jaapmarcus!
+- Added support for configuring individual TTL per DNS record. Thanks to **@jaapmarcus**!
 - Updated translations for Polish (thanks to @RejectPL!), Dutch, French, German, and Italian (WIP).
 - Added the ability to set the default PHP command line version per-user.
 - Added geolocation support to awstats to improve traffic reports.
@@ -18,22 +19,25 @@ All notable changes to this project will be documented in this file.
 - Added the ability to manage SSH keys from CLI and web interface.
 - Added a manual migration script for apache2 mpm_event for existing installations/upgrades (`$HESTIA/install/upgrade/manual/migrate_mpm_event.sh`).
 - Added BATS system for testing the functionality of Bash scripts (WIP).
-- **NOTE:** Debian 8 is no longer supported as it has reached EOL status.
+- Added **v-change-sys-db-alias** to change phpMyAdmin and phpPgAdmin access points (`v-change-sys-db-alias pma/pga myCustomURL`).
+
 
 ### Bugfixes
-- Prevent ability to change the password of a non-Hestia user account. Thanks to Alexandre Zanni!
-- Adjust Let's Encrypt validation check for IDN domains, thanks to @zanami!
-- Set backup download location on FTP/SFTP restore, thanks to @Daniyal-Javani!
-- Stop trying to renew Let's Encrypt certificates after multiple consecutive failed attempts. Thanks to @dpeca!
-- Fixed an issue with auto-logout when used behind Cloudflare proxy and reworked 2FA authentication part. Thanks to @rmj-s!
+- Prevent ability to change the password of a non-Hestia user account. Thanks to **Alexandre Zanni**!
+- Adjust Let's Encrypt validation check for IDN domains, thanks to **@zanami**!
+- Set backup download location on FTP/SFTP restore, thanks to **@Daniyal-Javani**!
+- Stop trying to renew Let's Encrypt certificates after multiple consecutive failed attempts. Thanks to **@dpeca**!
+- Fixed an issue with auto-logout when used behind Cloudflare proxy and reworked 2FA authentication part. Thanks to **@rmj-s**!
 - Fixed an issue where changing an email account password would fail if similar account names were present.
 - Fixed an issue where e-mail quota was not preserved when (un)suspending or rebuilding a mail account.
 - Fixed an issue where SSH configuration was not saved currently when edited from the Web interface.
 - Fixed an issue where DNS IP did not use NAT/Public IP when available after changing web domain IP.
+- Fixed an issue that would occur when a user would attempt to recover their account when two-factor authentication is enabled.
 - Fixed permission issues that were presented when restoring a user backup.
+- Improved page load performance of Control Panel web interface.
 - Use Sury.org repository for Apache2 packages.
 - Improved compatibility with Roundcube and PHP 7.4.
-- Restrict the ability to edit crontab service via Web UI.
+- Restrict the ability to edit crontab service via Control Panel web interface.
 - Check whether Nginx, Apache2 and MariaDB are selected for installation prior to adding third party repositories.
 - Restrict public access to Apache2 server-status page.
 - Remove duplicated set-cookie line in default fpm config.
@@ -43,6 +47,7 @@ All notable changes to this project will be documented in this file.
 - Cleanup temporary files when uploading custom SSL certificate from Web interface.
 - Cleanup temporary files when adding/renewing Let's Encrypt SSL certificate.
 - Cleanup temporary files after running v-list-sys-services.
+- Removed some legacy code and unused assets.
 - Don't calculate /home folder size in v-list-sys-info.
 - Adjust v-list-sys-services to honor the changed fail2ban service name.
 - Rework busy port validation in v-change-sys-port.
@@ -52,6 +57,28 @@ All notable changes to this project will be documented in this file.
 - Fixed an issue where the backup update counter was not updated properly when v-delete-user-backup was executed.
 - Fixed an issue with public_(s)html file ownership.
 - Fixed an issue with phpPgAdmin access.
+- Fixed an issue where the wrong port was set for www.conf on certain configurations.
+- Fixed an issue where Composer would fail to install.
+- Fixed an issue where the selected theme was not immediately applied.
+- Fixed an issue where HTTP-to-HTTPS redirection and HTTP Strict Transport Security (HSTS) events were not shown in the user history log.
+- Fixed an issue where the web domain access log page was incorrectly formatted.
+- Fixed an issue where awstats would show a HostAliases error if a web domain did not have any aliases.
+- Fixed an issue where awstats configuration was not updated if web domain aliases were added or removed.
+- Fixed an issue where user interface elements would overlap or display in the wrong place when using non-English locales.
+- Fixed an issue where phpMyAdmin and phpPgAdmin were inaccessible from the Web UI if custom URLs had been set.
+- Fixed an issue where mail SSL certificates were not restored properly from a backup archive.
+- Fixed an issue where mail domain configuration files were not removed when the domain was deleted.
+- Improved the functionality of `v-change-domain-owner` to correctly move mail domains and provide status output and logging/notifications.
+- Improved the functionality of `v-update-sys-hestia-git` to allow user to specify GitHub repository and whether to build only core package or core and dependencies.
+- Corrected the behavior of phpMyAdmin and phpPgAdmin so that alias dialogs accept custom word only and not full URL, aligns with webmail alias behavior.
+- Corrected the behavior of the installer so that APT repositories are not added if installation is aborted due to version mismatch.
+- Fixed an issue where upgrade procedures were not executed correctly when skipping between versions (e.g. 1.0.6 > 1.2.0).
+
+### Known issues and notes
+- **NOTE:** Custom phpMyAdmin and phpPgAdmin URL's will be reset once during this upgrade to correct a legacy code issue.
+- Let's Encrypt renewal fails when removing alias from web domain (#856)
+- Some translation strings need to be updated for accuracy (#746)
+- v-restore-user only works with backup archives stored in /backup mount point (#641)
 
 ## [1.1.1] - 2020-03-24 - Hotfix
 ### Features

+ 26 - 11
CONTRIBUTING.md

@@ -3,27 +3,42 @@ Code Contributions & Pull Requests - Guidelines
 
 All pull requests must include a brief but descriptive title, and a description of the changes that you've made with as much detail as possible. **Only include commits that are related to your feature, bug fix, or patch in your pull request.**
 
-### Code formatting and comments:
+## Code formatting and comments:
 We ask that you follow existing naming schemes and coding conventions where possible, and that you add comments in your source code where appropriate to aid other developers in debugging and understanding your code in the future.
 
-### Squashing commits for smaller changes:
+## Squashing commits for smaller changes:
 When submitting a pull request with multiple smaller commits which are related to the same issue (or file), we ask that you please **squash your commits** in order to keep the project's commit history clean and easy to follow for other developers.
 
-### Working with branches:
+## Working with branches:
 Development for this project takes place in branches to effectively develop, manage, and test new features and code changes, helping to ensure that each release meets high quality standards. Our primary branches are as follows:
 
-* **master**: Active development code for the the next version of Hestia Control Panel.
-* **release**: The latest stable release code - installation packages generally align with this branch.
+### Primary branches:
 
-We ask that you create a new branch for your work based on **master**, this will allow you to submit only the necessary commits/changes that you've made. We generally adhere to the below naming convention for internal branches; you're welcome to use your own naming conventions so long as your commits follow the guidelines mentioned above.
+* `develop`: Active development code for the the next version of Hestia Control Panel, considered to be unstable.
+* `beta`: Feature locked code for the next release, which receives fixes only and goes through feedback and testing.
+* `release`: Code in this branch aligns with the latest packages available on our APT repositories.
 
-* **feature-name**: New features
-* **bugfix-000**: Bug fixes
+### I want to contribute some code to Hestia Control Panel, where do I start?
 
-**Note**: Replace **000** with the GitHub Issue ID if available, or use a short but descriptive name.
+First, create a new branch for your work based on the `develop` branch to ensure that you have the latest commits in your local repository, which will help make sure that your pull requests only contain the commits that are necessary. 
 
-### Feature freeze:
-Once development has reached a point where all planned new features have been incorporated, the **master** branch will then enter a "feature freeze" period where only fixes to the existing functionality will be added or merged for inclusion. Once any known issues have been resolved and the build has passed internal validation and testing procedures, it will then be pushed to **release** and tagged with it's respective version number and made available through our APT repositories.
+When creating your branches, **please adhere to the following naming conventions:**
+
+- **Prefix:** `bugfix/` or `feature/` based on the type of submission.
+- **ID**: `888` (GitHub Issue ID if an issue exists) -or- `2020-07` (Year-Month if an issue does not already exist)
+- **Separator:** `_` (underscore)
+- **Title:** `my-awesome-patch`
+
+Branch name examples:
+* `feature/777_my-awesome-new-feature` or `feature/2020-07_my-other-new-feature`
+* `bugfix/000_some-bug-fix` or `bugfix/2020-07_this-feature-is-broken`
+
+Once your code is complete and you have reviewed it for errors, submit a pull request to the correct integration branch:
+
+* `staging/fixes`: bugfix/ branches will merge to this branch when they have been tested/verified.
+* `staging/features`: feature/ branches will merge to this branch when they have been tested/verified.
+
+All `staging` branches will integrate to `develop` to form the next release of Hestia Control Panel. Once all features and fixes planned for the release are merged, the code will then be pushed to the `beta` branch where it is feature locked, assigned a version number, and will receive thorough testing before being pushed to the `release` branch with new packages being pushed to APT.
 
 **Please ensure that all pull requests meet the guidelines listed above; those that do not will be rejected and sent back for review.**
 

+ 29 - 76
README.md

@@ -2,56 +2,40 @@
 
 [Hestia Control Panel](https://www.hestiacp.com/)
 ==================================================
-**Current stable release:** Version 1.1.1, released on March 26th, 2020.<br>
-**Current development release:** Version 1.2.0.
-<br><br>
-**Due to a change of the repository infrastructure, please install the new key before you upgrade your existing installations:**
-```bash
-wget -qO - https://gpg.hestiacp.com/deb_signing.key | sudo apt-key add -
-```
-
-**Welcome!**
----------------------------- 
-Hestia Control Panel offers easy to use web and command line interfaces, enabling web server administrators to quickly deploy and manage web domains, mail accounts, and DNS zones from one central location without the hassle of manually deploying and configuring individual components. 
+**Latest stable release:** Version 1.2.0 | [View Changelog](https://github.com/hestiacp/hestiacp/blob/release/CHANGELOG.md)<br>
 
-While we have taken every effort to make the interface as friendly as possible (even for new users), it is assumed that you will have some prior knowledge and understanding in the basics how to set up a Linux server and managing web applications.
-
-**We cannot provide support for requests that do not describe in detail the troubleshooting that has already been performed, or for third-party applications which do not directly relate to Hestia Control Panel. Please make sure that you fill in the necessary details in your issue reports, and remove any sections that do not apply to your issue or use case.**
+**Web:** [www.hestiacp.com](https://www.hestiacp.com/)<br>
+**Documentation:** [docs.hestiacp.com](https://docs.hestiacp.com/)<br>
+**Forums:** [forum.hestiacp.com](https://forum.hestiacp.com/)<br><br>
+[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ST87LQH2CHGLA)
+<br>
 
-Interested in helping shape the future of Hestia Control Panel?
+**Welcome!**
 ---------------------------- 
-Are you a software developer, tester, or have experience in writing documentation or guides and have some time to contibute to the project?<br><br>Please send an email to info@hestiacp.com with a quick outline of your previous experience in any of these areas or where you think you could help on the project and we'll reach out to discuss the next steps.
-
-As always we welcome all feedback and contributions!
-
-Sincerely,<br>
-The Hestia Control Panel development team
+Hestia Control Panel is designed to provide administrators an easy to use web and command line interface, enabling them to quickly deploy and manage web domains, mail accounts, DNS zones, and databases from one central dashboard without the hassle of manually deploying and configuring individual components or services. 
 
-What is Hestia Control Panel?
+Features and Services
 ----------------------------
-* An open source web server control panel with an easy-to-use interface.
-* A lightweight alternative to cPanel, Plesk, etc.
-
-What does Hestia Control Panel support?
-----------------------------
-* Standard Web Server (Apache/NGINX) with PHP
-* PHP Web Application Server (NGINX + PHP-FPM)
-* Multiple PHP versions (5.6 - 7.4, with 7.3 currently as default for optimal compatibility)
+* Apache2 and NGINX with PHP-FPM
+* Multiple PHP versions (5.6 - 7.4, 7.3 as default for optimal compatibility)
 * DNS Server (Bind) with clustering capabilities
-* Mail Server (Exim/Dovecot) with Anti-Virus and Anti-Spam (ClamAV and SpamAssassin)
-* Database functionality (MariaDB/PostgreSQL)
-* Let's Encrypt SSL with wildcard certificates
+* POP/IMAP/SMTP mail services with Anti-Virus, Anti-Spam, and Webmail (ClamAV, SpamAssassin, and Roundcube)
+* MariaDB or PostgreSQL databases
+* Let's Encrypt SSL support with wildcard certificates
+* Firewall with brute-force attack detection and IP lists (iptables, fail2ban, and ipset).
 
-Supported operating systems:
+Supported operating systems
 ----------------------------
-* Debian 8, 9, 10
-* Ubuntu 16.04 LTS or Ubuntu 18.04 LTS (the latest LTS release is generally recommended)
+* Debian 10, 9
+* Ubuntu 20.04 LTS, 18.04 LTS, or 16.04 LTS
 * **NOTE:** Hestia Control Panel must be installed on top of a fresh operating system installation to ensure proper functionality.
 
 Installing Hestia Control Panel
 ============================
+While we have taken every effort to make the installation process and the control panel interface as friendly as possible (even for new users), it is assumed that you will have some prior knowledge and understanding in the basics how to set up a Linux server before continuing.
+
 ## Step 1: Log in
-To install Hestia Control Panel on your server, you will need to be logged in as **root** or a user with super-user privileges in order to continue. You can perform the installation either directly from the command line console or remotely via SSH:
+To start the installation, you will need to be logged in as **root** or a user with super-user privileges. You can perform the installation either directly from the command line console or remotely via SSH:
 ```bash
 ssh root@your.server
 ```
@@ -72,11 +56,6 @@ bash hst-install.sh
 ```
 You will receive a welcome email at the address specified during installation (if applicable) and on-screen instructions after the installation is completed to log in and access your server.
 
-## Additional installation notes:
-To perform an unattended installation using the default options:
-```bash
-bash hst-install.sh -f -y no -e <email> -p <password> -s <hostname>
-```
 ## Custom installation:
 You may specify a number of various flags during installation to only install the features in which you need. To view a list of available options, run:
 ```bash
@@ -84,45 +63,15 @@ bash hst-install.sh -h
 ```
 Alternatively, @gabizz has made available a command-line script generator at https://gabizz.github.io/hestiacp-scriptline-generator/ which allows you to easily generate the installation command via GUI.
 
-Installing & testing development builds
+Issues
 =============================
-In order to install a development build based on the latest published code, you should first have an instance of Hestia Control Panel set up. If you do not have a server configured, please install the latest stable build using the instructions above before continuing.
+If you've run into a problem, [file a new issue report via GitHub](https://github.com/hestiacp/hestiacp/issues) so that we may investigate further.
 
-**PLEASE NOTE: Development builds should not be installed on systems with live production data without understanding the potential risks involved.**
-
-To install a development build, first ensure that you have the latest Git upgrade script installed which handles new dependencies added after the 1.0.x branch:
-```bash
-wget -O $HESTIA/bin/v-update-sys-hestia-git https://raw.githubusercontent.com/hestiacp/hestiacp/master/bin/v-update-sys-hestia-git
-chmod +x $HESTIA/bin/v-update-sys-hestia-git
-```
-
-Then run the following command:
-```bash
-v-update-sys-hestia-git branchname
-```
-Replace *branchname* with the name of the branch you wish to install from, such as **release** or **master** (stable and current development branches, respectively). 
-
-Reporting Issues
-=============================
-If you've run into an issue with Hestia Control Panel, please let us know as soon as possible so that we may investigate further and resolve any issues in a timely manner.
-
-Bug reports can be filed using GitHub's [Issues](https://github.com/hestiacp/hestiacp/issues) feature.
+**We cannot provide support for requests that do not describe the troubleshooting steps that have already been performed, or for third-party applications which do not relate to Hestia Control Panel. Please make sure that you fill in the necessary details in your issue reports!**
 
 Contributions
 =============================
-If you would like to contribute to the project, please [read our submission guidelines](https://github.com/hestiacp/hestiacp/blob/master/CONTRIBUTING.md) for a brief overview of our development processes and standards.
-
-Donations
-=============================
-Hestia Control Panel is open source and completely free for everyone to use.
-
-If you would like to help our developers cover their time and infrastucture costs, or to support the Hestia Control Panel project as a whole, please consider making a donation via PayPal or become a sponsor.
-
-[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ST87LQH2CHGLA)
-
-License
-=============================
-Hestia Control Panel is licensed under [GPL v3](https://github.com/hestiacp/hestiacp/blob/master/LICENSE) license, and is based on the [VestaCP](https://www.vestacp.com/) project.<br>
+If you would like to contribute to the project, please [read our Contribution Guidelines](https://github.com/hestiacp/hestiacp/blob/master/CONTRIBUTING.md) for a brief overview of our development process and standards.
 
 Copyright
 =============================
@@ -135,3 +84,7 @@ Copyright
 - sell or redistribute the application under the name "Hestia Control Panel", "HestiaCP", or similar derivatives, including the use of the Hestia logo in any brand or marketing materials related to revenue generating activities,
 - use the names "Hestia Control Panel", "HestiaCP", or the Hestia logo in any context that is not related to the project,
 - alter the name "Hestia Control Panel", "HestiaCP", or the Hestia logo in any way.
+
+License
+=============================
+Hestia Control Panel is licensed under [GPL v3](https://github.com/hestiacp/hestiacp/blob/master/LICENSE) license, and is based on the [VestaCP](https://www.vestacp.com/) project.<br>

+ 26 - 10
bin/v-add-cron-hestia-autoupdate

@@ -1,8 +1,8 @@
 #!/bin/bash
 # info: add cron job for hestia autoupdates
-# options: NONE
+# options: MODE
 #
-# The function adds cronjob for hestia autoupdate.
+# The function adds cronjob for hestia autoupdate from apt or git.
 
 
 #----------------------------------------------------------#
@@ -11,6 +11,7 @@
 
 # Argument definition
 user=admin
+mode=$1
 
 # Includes
 source $HESTIA/func/main.sh
@@ -24,8 +25,9 @@ source $HESTIA/conf/hestia.conf
 is_system_enabled "$CRON_SYSTEM" 'CRON_SYSTEM'
 is_package_full 'CRON_JOBS'
 get_next_cronjob
-check_cron=$(grep 'v-update-sys-hestia-all' $USER_DATA/cron.conf)
-if [ ! -z "$check_cron" ]; then
+check_cron_apt=$(grep 'v-update-sys-hestia-all' $USER_DATA/cron.conf)
+check_cron_git=$(grep 'v-update-sys-hestia-git' $USER_DATA/cron.conf)
+if [ ! -z "$check_cron_apt" ] || [ ! -z "$check_cron_git" ]; then
     exit
 fi
 
@@ -42,13 +44,27 @@ time_n_date=$(date +'%T %F')
 time=$(echo "$time_n_date" |cut -f 1 -d \ )
 date=$(echo "$time_n_date" |cut -f 2 -d \ )
 
+# Remove existing cron job
+$BIN/v-delete-cron-hestia-autoupdate
+
 # Define time somewhere at night
-min=$(generate_password '012345' '2')
-hour=$(generate_password '1234567' '1')
-day='*'
-month='*'
-wday='*'
-command='sudo /usr/local/hestia/bin/v-update-sys-hestia-all'
+if [ -z "$mode" ] || [ "$mode" = "apt" ]; then
+    min=$(generate_password '012345' '2')
+    hour=$(generate_password '1234567' '1')
+    day='*'
+    month='*'
+    wday='*'
+    command='sudo /usr/local/hestia/bin/v-update-sys-hestia-all'
+fi
+
+if [ "$mode" = "git" ]; then
+    min='0'
+    hour='0'
+    day='*'
+    month='*'
+    wday='*'
+    command='sudo /usr/local/hestia/bin/v-update-sys-hestia-git'
+fi
 
 # Concatenating cron string
 str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'"

+ 119 - 0
bin/v-add-sys-filemanager

@@ -0,0 +1,119 @@
+#!/bin/bash
+# info: add file manager functionality to Hestia Control Panel
+# options: none
+#
+# The function installs the File Manager on the server
+# for access through the Web interface.
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Includes
+source $HESTIA/func/main.sh
+source $HESTIA/conf/hestia.conf
+
+MODE=$1
+user="admin"
+
+FM_INSTALL_DIR="$HESTIA/web/fm"
+FM_V="7.4.1"
+FM_FILE="filegator_v${FM_V}.zip"
+FM_URL="https://github.com/filegator/filegator/releases/download/v${FM_V}/${FM_FILE}"
+COMPOSER_BIN="$HOMEDIR/$user/.composer/composer"
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+# Checking root permissions
+if [ "x$(id -u)" != 'x0' ]; then
+    echo "ERROR: v-add-sys-filemanager can be run executed only by root user"
+    exit 10
+fi
+
+# Ensure that $HESTIA (/usr/local/hestia/) and other variables are valid.
+if [ -z "$HESTIA" ]; then
+    HESTIA="/usr/local/hestia"
+fi
+
+if [ -z "$HOMEDIR" ] || [ -z "$HESTIA_INSTALL_DIR" ]; then
+    echo "ERROR: Environment variables not present, installation aborted."
+    exit 2
+fi
+
+# Ensure that Composer is installed for the user before continuing as it is a dependency of the File Manager.
+if [ ! -f "$COMPOSER_BIN" ]; then
+    $BIN/v-add-user-composer "$user"
+    if [ $? -ne 0 ]; then
+        $BIN/v-add-user-notification admin 'Composer installation failed!' '<b>The File Manager will not work without Composer.</b><br><br>Please try running the installer manually from a shell session:<br>v-add-sys-filemanager<br><br>If this continues, open an issue report on <a href="https://github.com/hestiacp/hestiacp/issues" target="_new"><i class="fab fa-github"></i> GitHub</a>.'
+        exit 1
+    fi
+fi
+
+# Ensure PHP 7.3 is installed before continuing
+if [ ! -f "/usr/bin/php7.3" ]; then
+    $BIN/v-add-user-notification admin 'File Manager installation failed!' '<b>Unable to proceed with installation of File Manager.</b><br><br>Package <b>php7.3-cli</b> is missing from your system. Please check your PHP installation and environment settings.'
+    echo "ERROR: PHP 7.3 not installed on your system, aborting."
+    exit 1
+fi
+
+# Perform verification if read-only mode is enabled
+check_hestia_demo_mode
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+rm --recursive --force "$FM_INSTALL_DIR"
+mkdir -p "$FM_INSTALL_DIR"
+cd "$FM_INSTALL_DIR"
+
+[ ! -f "${FM_INSTALL_DIR}/${FM_FILE}" ] && wget "$FM_URL" --quiet -O "${FM_INSTALL_DIR}/${FM_FILE}"
+
+unzip -qq "${FM_INSTALL_DIR}/${FM_FILE}"
+mv --force ${FM_INSTALL_DIR}/filegator/* "${FM_INSTALL_DIR}"
+rm --recursive --force ${FM_INSTALL_DIR}/filegator
+[[ -f "${FM_INSTALL_DIR}/${FM_FILE}" ]] && rm "${FM_INSTALL_DIR}/${FM_FILE}"
+
+cp --recursive --force ${HESTIA_INSTALL_DIR}/filemanager/filegator/* "${FM_INSTALL_DIR}"
+
+chown $user: -R "${FM_INSTALL_DIR}"
+
+COMPOSER_HOME="$HOMEDIR/$user/.config/composer" user_exec /usr/bin/php7.3 $COMPOSER_BIN --quiet --no-dev install
+
+# Check if installation was successful, if not abort script and throw error message notification and clean-up
+if [ $? -ne 0 ]; then
+    echo "ERROR: File Manager installation failed!"
+    echo "Please report this to our development team:"
+    echo "https://github.com/hestiacp/hestiacp/issues"
+    $BIN/v-add-user-notification admin 'File Manager installation failed!' 'Please report this to our development team on <a href="https://github.com/hestiacp/hestiacp/issues" target="_new"><i class="fab fa-github"></i> GitHub</a>.'
+    # Installation failed, clean up files
+    rm --recursive --force ${FM_INSTALL_DIR}
+    $BIN/v-change-sys-config-value 'FILE_MANAGER' 'false'
+    exit 1
+fi
+
+# Add configuration file
+cp -f $HESTIA_INSTALL_DIR/filemanager/filegator/configuration.php $HESTIA/web/fm/configuration.php
+
+
+# Set permissions
+chown root: -R "${FM_INSTALL_DIR}"
+chown $user: "${FM_INSTALL_DIR}/private"
+chown $user: "${FM_INSTALL_DIR}/private/logs"
+chown $user: "${FM_INSTALL_DIR}/repository"
+
+$BIN/v-change-sys-config-value 'FILE_MANAGER' 'true'
+
+if [ "$MODE" != "quiet" ]; then
+    echo "File Manager is now installed and ready for use."  
+fi
+
+#----------------------------------------------------------#
+#                       Logging                            #
+#----------------------------------------------------------#
+
+log_history "file manager installed" '' 'admin'
+log_event "$OK" "$ARGUMENTS"

+ 1 - 1
bin/v-change-database-owner

@@ -69,7 +69,7 @@ check_hestia_demo_mode
 #----------------------------------------------------------#
 
 # Creating temporary directory
-tmpdir=$(mktemp -p $BACKUP -d "tmp.$database.XXXXXXXXXX")
+tmpdir=$(mktemp -p $BACKUP -d "tmp.$database.XXXXXXXXXX" > /dev/null 2>&1)
 
 # Suspend database
 $BIN/v-suspend-database $owner $database > /dev/null 2>&1

+ 88 - 5
bin/v-change-domain-owner

@@ -32,6 +32,7 @@ if [ -z "$owner" ]; then
     check_result $E_NOTEXIST "domain $domain doesn't exist"
 fi
 if [ "$owner" = "$user" ]; then
+    echo "ERROR: $domain is already owned by $user."
     exit
 fi
 
@@ -43,9 +44,12 @@ check_hestia_demo_mode
 #                       Action                             #
 #----------------------------------------------------------#
 
+echo "Moving $domain from $owner to $user, please wait..."
+
 # WEB domain
 web_data=$(grep "DOMAIN='$domain'" $HESTIA/data/users/$owner/web.conf)
 if [ ! -z "$web_data" ]; then
+    echo "[*] Moving web domain..."
     $BIN/v-suspend-web-domain $owner $domain >> /dev/null 2>&1
     parse_object_kv_list "$web_data"
 
@@ -95,6 +99,7 @@ fi
 # DNS domain
 dns_data=$(grep "DOMAIN='$domain'" $HESTIA/data/users/$owner/dns.conf)
 if [ ! -z "$dns_data" ]; then
+    echo "[*] Moving DNS zone and records..."
     parse_object_kv_list "$dns_data"
 
     # Change IP
@@ -125,6 +130,14 @@ fi
 # MAIL domain
 mail_data=$(grep "DOMAIN='$domain'" $HESTIA/data/users/$owner/mail.conf)
 if [ ! -z "$mail_data" ]; then
+    echo "[*] Moving mail domain and accounts..."
+
+    parse_object_kv_list "$mail_data"
+
+    # Ensure mail configuration directory exists for receiving user
+    if [ ! -e "$HOMEDIR/$user/conf/mail/$domain/" ]; then
+        mkdir -p $HOMEDIR/$user/conf/mail/$domain/
+    fi
 
     # Move config
     sed -i "/DOMAIN='$domain'/d" $HESTIA/data/users/$owner/mail.conf
@@ -140,6 +153,56 @@ if [ ! -z "$mail_data" ]; then
             $HESTIA/data/users/$user/mail/
     fi
 
+    # Move SSL certificates
+    if [ "$SSL" = 'yes' ]; then
+         # Ensure that SSL directory exists and move certificates
+        mkdir -p $HESTIA/data/users/$user/ssl/
+        mkdir -p $HOMEDIR/$user/conf/mail/$domain/ssl/
+        
+        ssl_crt=$HESTIA/data/users/$owner/ssl/mail.$domain.crt
+        ssl_key=$HESTIA/data/users/$owner/ssl/mail.$domain.key
+        ssl_ca=$HESTIA/data/users/$owner/ssl/mail.$domain.ca
+        ssl_pem=$HESTIA/data/users/$owner/ssl/mail.$domain.pem
+        mv $ssl_crt $HESTIA/data/users/$user/ssl/
+        mv $ssl_key $HESTIA/data/users/$user/ssl/
+        mv $ssl_ca $HESTIA/data/users/$user/ssl/ >> /dev/null 2>&1
+        mv $ssl_pem $HESTIA/data/users/$user/ssl/ >> /dev/null 2>&1     
+        
+        # Add certificate to user home directory
+        cp -f $HESTIA/data/users/$user/ssl/mail.$domain.crt $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.crt
+        cp -f $HESTIA/data/users/$user/ssl/mail.$domain.key $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key
+        cp -f $HESTIA/data/users/$user/ssl/mail.$domain.pem $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem
+        if [ -e "$HESTIA/data/users/$user/ssl/mail.$domain.ca" ]; then
+            cp -f $HESTIA/data/users/$user/ssl/mail.$domain.ca $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.ca
+        fi
+
+        # Add domain SSL configuration to dovecot
+        if [ -f /etc/dovecot/conf.d/domains/$domain.conf ]; then
+            rm -f /etc/dovecot/conf.d/domains/$domain.conf
+        fi
+        
+        echo "" >> /etc/dovecot/conf.d/domains/$domain.conf
+        echo "local_name mail.$domain {" >> /etc/dovecot/conf.d/domains/$domain.conf
+        echo "  ssl_cert = <$HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem" >> /etc/dovecot/conf.d/domains/$domain.conf
+        echo "  ssl_key = <$HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key" >> /etc/dovecot/conf.d/domains/$domain.conf
+        echo "}" >> /etc/dovecot/conf.d/domains/$domain.conf
+
+        # Add domain SSL configuration to exim4
+        # Cleanup symlinks
+        find /usr/local/hestia/ssl/mail -xtype l -delete
+
+        ln -s -f $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem /usr/local/hestia/ssl/mail/mail.$domain.crt
+        ln -s -f $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key /usr/local/hestia/ssl/mail/mail.$domain.key
+
+        # Set correct permissions on certificates
+        chmod 750 $HOMEDIR/$user/conf/mail/$domain/ssl
+        chown -R $MAIL_USER:mail $HOMEDIR/$user/conf/mail/$domain/ssl
+        chmod 0644 $HOMEDIR/$user/conf/mail/$domain/ssl/*
+        chown -h $user:mail $HOMEDIR/$user/conf/mail/$domain/ssl/*
+        chmod -R 0644 /usr/local/hestia/ssl/mail/*
+        chown -h $user:mail /usr/local/hestia/ssl/mail/*
+    fi
+
     # Move data
     mv $HOMEDIR/$owner/mail/$domain $HOMEDIR/$user/mail/
 
@@ -147,11 +210,6 @@ if [ ! -z "$mail_data" ]; then
     find $HOMEDIR/$user/mail/$domain -user $owner \
         -exec chown -h $user {} \;
 
-    # Rebuild config
-    $BIN/v-unsuspend-mail-domain $user $domain no >> /dev/null 2>&1
-    $BIN/v-rebuild-mail-domains $owner no
-    $BIN/v-rebuild-mail-domains $user
-
     # Checking exim username for later chowning
     exim_user="exim";
     check_exim_username=$(grep -c '^Debian-exim:' /etc/passwd)
@@ -163,18 +221,43 @@ if [ ! -z "$mail_data" ]; then
         find $HOMEDIR/$user/conf/mail/$domain -user root \
             -exec chown $exim_user {} \;
     fi
+
+    # Remove old mail directory from original owner
+    if [ -e "$HOMEDIR/$owner/mail/$domain" ]; then
+        rm -rf "$HOMEDIR/$owner/mail/$domain"
+    fi
+
+    # Remove old mail configuration directory from original owner
+    if [ -e "$HOMEDIR/$owner/conf/mail/$domain" ]; then
+        rm -rf "$HOMEDIR/$owner/conf/mail/$domain"
+    fi
+    if [ -e "$HESTIA/data/users/$owner/mail/$domain.conf" ]; then
+        rm -f "$HESTIA/data/users/$owner/mail/$domain.conf"
+    fi
+
+    # Rebuild config
+    $BIN/v-unsuspend-mail-domain $user $domain no >> /dev/null 2>&1
+    $BIN/v-rebuild-mail-domains $owner no
+    $BIN/v-rebuild-mail-domains $user
 fi
 
 # Update counters
 $BIN/v-update-user-counters $owner
 $BIN/v-update-user-counters $user
 
+# Send notification to panel
+if [ ! -z "$web_data" ] || [ ! -z "$dns_data" ] || [ ! -z "$mail_data" ]; then
+    $HESTIA/bin/v-add-user-notification "$user" "$domain has been added to your account" ''
+fi
 
 #----------------------------------------------------------#
 #                       Hestia                             #
 #----------------------------------------------------------#
 
 # Logging
+log_history "moved domain $domain from $owner to $user" '' "admin"
+log_history "$domain was added to your account" '' "$user"
+log_history "$domain was removed from your account" '' "$owner"
 log_event "$OK" "$ARGUMENTS"
 
 exit

+ 9 - 5
bin/v-change-sys-release

@@ -35,10 +35,14 @@ if [ -z "$branch" ]; then
     echo "Error: no release branch specified."
     echo "Usage: v-change-sys-release branchname"
     echo ""
-    echo "Common release branches:"
-    echo "(*) release:      The latest stable release available via APT"
-    echo "(*) prerelease:   Beta/release candidate releases"
-    echo "(*) master:       The latest development code from GitHub"
+    echo "Release branches:"
+    echo "- release:            the latest stable release"
+    echo "- beta:               beta and release candidate test releases"
+    echo "- develop:            unstable development builds"
+    echo ""
+    echo "Integration branches (not tied to a specific release/version):"
+    echo "- staging/fixes:      contains new fixes since the last release."
+    echo "- staging/features:   contains new features since the last release."
     echo ""
     echo "You can also specify another branch name from the"
     echo "GitHub repository to install the code from that branch."
@@ -58,7 +62,7 @@ else
     
     # Set new branch variable
     echo "RELEASE_BRANCH='$branch'" >> $HESTIA/conf/hestia.conf
-    echo "Changed system release to update from branch: $branch"
+    echo "Updated system to update from Git using branch: $branch"
 fi
 
 #----------------------------------------------------------#

+ 9 - 5
bin/v-delete-cron-hestia-autoupdate

@@ -22,10 +22,8 @@ source $HESTIA/conf/hestia.conf
 #----------------------------------------------------------#
 
 is_system_enabled "$CRON_SYSTEM" 'CRON_SYSTEM'
-check_cron=$(grep 'v-update-sys-hestia-all' $USER_DATA/cron.conf)
-if [ -z "$check_cron" ]; then
-    exit
-fi
+check_cron_apt=$(grep 'v-update-sys-hestia-all' $USER_DATA/cron.conf)
+check_cron_git=$(grep 'v-update-sys-hestia-git' $USER_DATA/cron.conf)
 
 # Perform verification if read-only mode is enabled
 check_hestia_demo_mode
@@ -37,7 +35,13 @@ check_hestia_demo_mode
 
 
 # Deleting job
-job=$(echo $check_cron|tr ' ' "\n"|grep JOB|cut -f 2 -d "'")
+if [ ! -z "$check_cron_apt" ]; then
+    job=$(echo $check_cron_apt|tr ' ' "\n"|grep JOB|cut -f 2 -d "'")
+fi
+if [ ! -z "$check_cron_git" ]; then
+    job=$(echo $check_cron_git|tr ' ' "\n"|grep JOB|cut -f 2 -d "'")
+fi
+
 sed -i "/JOB='$job' /d" $USER_DATA/cron.conf
 
 # Sorting jobs by id

+ 0 - 1
bin/v-delete-mail-domain-ssl

@@ -33,7 +33,6 @@ is_object_unsuspended 'user' 'USER' "$user"
 is_object_valid 'mail' 'DOMAIN' "$domain"
 is_object_unsuspended 'mail' 'DOMAIN' "$domain"
 is_object_value_exist 'mail' 'DOMAIN' "$domain" '$SSL'
-is_object_value_exist 'mail' 'DOMAIN' "$domain" '$LETSENCRYPT'
 
 # Perform verification if read-only mode is enabled
 check_hestia_demo_mode

+ 72 - 0
bin/v-delete-sys-filemanager

@@ -0,0 +1,72 @@
+#!/bin/bash
+# info: remove file manager functionality from Hestia Control Panel
+# options: [FULL]
+#
+# The function removes the File Manager and its entry points
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+MODE=$1
+
+# Includes
+source $HESTIA/func/main.sh
+source $HESTIA/conf/hestia.conf
+
+user='admin'
+FM_INSTALL_DIR="$HESTIA/web/fm"
+FM_V="7.4.1"
+COMPOSER_BIN="$HOMEDIR/$user/.composer/composer"
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+# Checking root permissions
+if [ "x$(id -u)" != 'x0' ]; then
+    echo "Error: Script can be run executed only by root"
+    exit 10
+fi
+
+# Ensure that $HESTIA (/usr/local/hestia/) and other variables are valid.
+if [ -z "$HESTIA" ]; then
+    HESTIA="/usr/local/hestia"
+fi
+
+if [ -z "$HOMEDIR" ] || [ -z "$HESTIA_INSTALL_DIR" ]; then
+    echo "Error: Hestia environment vars not present"
+    exit 2
+fi
+
+# Perform verification if read-only mode is enabled
+check_hestia_demo_mode
+
+# Check if File Manager components are installed
+if [ "$MODE" != "force" ] && [ ! -e "$FM_INSTALL_DIR" ]; then
+    echo "ERROR: File Manager components are not installed."
+    exit 1
+fi
+
+if [ "$MODE" != "force" ] && [ "$FILE_MANGER" = "false" ]; then
+    echo "ERROR: File Manager is not enabled."
+    exit 1
+fi
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+rm --recursive --force "$FM_INSTALL_DIR"
+$BIN/v-change-sys-config-value 'FILE_MANAGER' 'false'
+
+if [ "$MODE" != "quiet" ]; then
+    echo "File Manager has been removed from the system."
+fi
+
+#----------------------------------------------------------#
+#                       Logging                            #
+#----------------------------------------------------------#
+
+log_history "file manager uninstalled" '' 'admin'
+log_event "$OK" "$ARGUMENTS"

+ 10 - 6
bin/v-list-sys-config

@@ -41,6 +41,7 @@ json_list() {
         "DISK_QUOTA": "'$DISK_QUOTA'",
         "FIREWALL_SYSTEM": "'$FIREWALL_SYSTEM'",
         "FIREWALL_EXTENSION": "'$FIREWALL_EXTENSION'",
+        "FILE_MANAGER": "'$FILE_MANAGER'",
         "REPOSITORY": "'$REPOSITORY'",
         "VERSION": "'$VERSION'",
         "RELEASE_BRANCH": "'$RELEASE_BRANCH'",
@@ -134,6 +135,9 @@ shell_list() {
     if [ ! -z "$DEMO_MODE" ]; then
         echo "Demo Mode:        $DEMO_MODE"
     fi
+    if [ ! -z "$FILE_MANAGER" ]; then
+        echo "File Manager:        $FILE_MANAGER"
+    fi
     echo "Release Branch:   $RELEASE_BRANCH"
     echo "Theme:            $THEME"
 }
@@ -146,8 +150,8 @@ plain_list() {
     echo -ne "$ANTIVIRUS_SYSTEM\t$ANTISPAM_SYSTEM\t$DB_SYSTEM\t"
     echo -ne "$DNS_SYSTEM\t$DNS_CLUSTER\t$STATS_SYSTEM\t$BACKUP_SYSTEM\t"
     echo -ne "$CRON_SYSTEM\t$DISK_QUOTA\t$FIREWALL_SYSTEM\t$FIREWALL_EXTENSION\t"
-    echo -ne "$REPOSITORY\t$VERSION\t$DEMO_MODE\t$RELEASE_BRANCH\t$THEME\t$LANGUAGE\t"
-    echo -e "$BACKUP_GZIP\t$BACKUP\t$WEBMAIL_ALIAS\t$DB_PMA_ALIAS\t$DB_PGA_ALIAS"
+    echo -ne "$FILE_MANAGER\t$REPOSITORY\t$VERSION\t$DEMO_MODE\t$RELEASE_BRANCH\t$THEME\t"
+    echo -e "$LANGUAGE\t$BACKUP_GZIP\t$BACKUP\t$WEBMAIL_ALIAS\t$DB_PMA_URL\t$DB_PGA_URL"
 }
 
 
@@ -159,7 +163,7 @@ csv_list() {
     echo -n "'ANTIVIRUS_SYSTEM','ANTISPAM_SYSTEM','DB_SYSTEM',"
     echo -n "'DNS_SYSTEM','DNS_CLUSTER','STATS_SYSTEM','BACKUP_SYSTEM',"
     echo -n "'CRON_SYSTEM','DISK_QUOTA','FIREWALL_SYSTEM',"
-    echo -n "'FIREWALL_EXTENSION','REPOSITORY',"
+    echo -n "'FIREWALL_EXTENSION','FILE_MANAGER','REPOSITORY',"
     echo -n "'VERSION','LANGUAGE','BACKUP_GZIP','BACKUP','WEBMAIL_ALIAS',"
     echo -n "'DB_PMA_ALIAS','DB_PGA_ALIAS'"
     echo
@@ -168,9 +172,9 @@ csv_list() {
     echo -n "'$PROXY_SSL_PORT','$FTP_SYSTEM','$MAIL_SYSTEM','$IMAP_SYSTEM',"
     echo -n "'$ANTIVIRUS_SYSTEM','$ANTISPAM_SYSTEM','$DB_SYSTEM','$DNS_SYSTEM',"
     echo -n "'$DNS_CLUSTER','$STATS_SYSTEM','$BACKUP_SYSTEM','$CRON_SYSTEM',"
-    echo -n "'$DISK_QUOTA','$FIREWALL_SYSTEM','$REPOSITORY','$FIREWALL_EXTENSION',"
-    echo -n "'$VERSION','$DEMO_MODE','$RELEASE_BRANCH','$THEME','$LANGUAGE',"
-    echo -n "'$BACKUP_GZIP','$BACKUP','$WEBMAIL_ALIAS','$DB_PMA_ALIAS','$DB_PGA_ALIAS'"
+    echo -n "'$DISK_QUOTA','$FIREWALL_SYSTEM','$FIREWALL_EXTENSION','$FILE_MANAGER',"
+    echo -n "'$REPOSITORY', '$VERSION','$DEMO_MODE','$RELEASE_BRANCH','$THEME','$LANGUAGE',"
+    echo -n "'$BACKUP_GZIP','$BACKUP','$WEBMAIL_ALIAS','$DB_PMA_URL','$DB_PGA_URL'"
     echo
 }
 

+ 61 - 0
bin/v-restore-user

@@ -603,6 +603,67 @@ if [ "$mail" != 'no' ] && [ ! -z "$MAIL_SYSTEM" ]; then
             cp -f $tmpdir/mail/$domain/$backup_system/$domain.pub $USER_DATA/mail/
         fi
 
+        # Restore SSL
+        check_config=$(grep "DOMAIN='$domain'" $USER_DATA/mail.conf | grep -o "SSL='yes'")
+        if [ ! -z "$check_config" ]; then
+            if [ ! -e "$HESTIA/data/users/$user/ssl/" ]; then
+                mkdir -p $HESTIA/data/users/$user/ssl/
+            fi
+            
+            if [ ! -e "$HOMEDIR/$user/conf/mail/$domain/ssl/" ]; then
+                mkdir -p $HOMEDIR/$user/conf/mail/$domain/ssl/
+            fi
+
+            # Add certificate to Hestia user configuration data directory
+            if [ -f $tmpdir/mail/$domain/$backup_system/ssl/$domain.crt ]; then
+                echo "path found"
+                cp -f $tmpdir/mail/$domain/$backup_system/ssl/$domain.crt $USER_DATA/ssl/mail.$domain.crt
+                cp -f $tmpdir/mail/$domain/$backup_system/ssl/$domain.key $USER_DATA/ssl/mail.$domain.key
+                cp -f $tmpdir/mail/$domain/$backup_system/ssl/$domain.crt $USER_DATA/ssl/mail.$domain.pem
+                if [ -e "$tmpdir/mail/$domain/$backup_system/ssl//$domain.ca" ]; then
+                    cp -f $tmpdir/mail/$domain/$backup_system/ssl//$domain.ca $USER_DATA/ssl/mail.$domain.ca
+                    echo >> $USER_DATA/ssl/mail.$domain.pem
+                    cat $USER_DATA/ssl/mail.$domain.ca >> $USER_DATA/ssl/mail.$domain.pem
+                fi
+            fi
+            
+            chmod 660 $USER_DATA/ssl/mail.$domain.*
+
+            # Add certificate to user home directory
+            cp -f $USER_DATA/ssl/mail.$domain.crt $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.crt
+            cp -f $USER_DATA/ssl/mail.$domain.key $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key
+            cp -f $USER_DATA/ssl/mail.$domain.pem $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem
+            if [ -e "$USER_DATA/ssl/mail.$domain.ca" ]; then
+                cp -f $USER_DATA/ssl/mail.$domain.ca $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.ca
+            fi
+
+            # Add domain SSL configuration to dovecot
+            if [ -f /etc/dovecot/conf.d/domains/$domain.conf ]; then
+                rm -f /etc/dovecot/conf.d/domains/$domain.conf
+            fi
+                
+            echo "" >> /etc/dovecot/conf.d/domains/$domain.conf
+            echo "local_name mail.$domain {" >> /etc/dovecot/conf.d/domains/$domain.conf
+            echo "  ssl_cert = <$HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem" >> /etc/dovecot/conf.d/domains/$domain.conf
+            echo "  ssl_key = <$HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key" >> /etc/dovecot/conf.d/domains/$domain.conf
+            echo "}" >> /etc/dovecot/conf.d/domains/$domain.conf
+
+            # Add domain SSL configuration to exim4
+            # Cleanup broken symlinks
+            find /usr/local/hestia/ssl/mail -xtype l -delete
+
+            ln -s -f $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem /usr/local/hestia/ssl/mail/mail.$domain.crt
+            ln -s -f $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key /usr/local/hestia/ssl/mail/mail.$domain.key
+
+            # Set correct permissions on certificates
+            chmod 750 $HOMEDIR/$user/conf/mail/$domain/ssl
+            chown -R $MAIL_USER:mail $HOMEDIR/$user/conf/mail/$domain/ssl
+            chmod 0644 $HOMEDIR/$user/conf/mail/$domain/ssl/*
+            chown -h $user:mail $HOMEDIR/$user/conf/mail/$domain/ssl/*
+            chmod -R 0644 /usr/local/hestia/ssl/mail/*
+            chown -h $user:mail /usr/local/hestia/ssl/mail/*
+        fi
+
         # Restoring email accounts
         cp -f $tmpdir/mail/$domain/$backup_system/$domain.conf $USER_DATA/mail/
 

+ 56 - 20
bin/v-update-sys-hestia-git

@@ -1,6 +1,16 @@
 #!/bin/bash
 
-# Autocompile Script for HestiaCP deb Files.
+# v-update-sys-hestia-git
+# Downloads and compiles/installs packages from GitHub repositories
+# Options:  REPOSITORY BRANCH INSTALL [PACKAGES]
+# Example:  v-update-sys-hestia-git hestiacp staging/beta install all
+#           - Will download from the hestiacp repository
+#           - Pulls code from staging/beta branch
+#           - install: installs package immediately
+#           - install-auto: installs package and schedules automatic updates from Git
+#           - 'all': (optional) - compiles nginx and php alongside panel.
+#                                 this option takes a long time, only use when needed
+
 
 # Define download function
 download_file() {
@@ -56,18 +66,20 @@ INSTALL_DIR='/usr/local/hestia'
 ARCHIVE_DIR="${BUILD_DIR}/archive"
 
 # Set command variables
-branch=$1
-install=$2
+fork=$1
+branch=$2
+install=$3
+flags=$4
 
 # Set Version for compiling
-BUILD_VER=$(curl -s https://raw.githubusercontent.com/hestiacp/hestiacp/$branch/src/deb/hestia/control | grep "Version:" | cut -d' ' -f2)
+BUILD_VER=$(curl -s https://raw.githubusercontent.com/$fork/hestiacp/$branch/src/deb/hestia/control | grep "Version:" | cut -d' ' -f2)
 BUILD_ARCH='amd64'
 HESTIA_V="${BUILD_VER}_${BUILD_ARCH}"
-NGINX_V=$(curl -s https://raw.githubusercontent.com/hestiacp/hestiacp/$branch/src/deb/nginx/control |grep "Version:" |cut -d' ' -f2)
-OPENSSL_V='1.1.1c'
+NGINX_V=$(curl -s https://raw.githubusercontent.com/$fork/hestiacp/$branch/src/deb/nginx/control |grep "Version:" |cut -d' ' -f2)
+OPENSSL_V='1.1.1g'
 PCRE_V='8.43'
 ZLIB_V='1.2.11'
-PHP_V=$(curl -s https://raw.githubusercontent.com/hestiacp/hestiacp/$branch/src/deb/php/control |grep "Version:" |cut -d' ' -f2)
+PHP_V=$(curl -s https://raw.githubusercontent.com/$fork/hestiacp/$branch/src/deb/php/control |grep "Version:" |cut -d' ' -f2)
 
 # Create build directories
 rm -rf $BUILD_DIR
@@ -84,13 +96,26 @@ timestamp() {
 
 # Set install flags
 if [ ! -z "$1" ]; then
+    fork_check=$(curl -s --head -w %{http_code} https://raw.githubusercontent.com/$fork/hestiacp/release/src/deb/hestia/control -o /dev/null)
+    if [ $fork_check -ne "200" ]; then
+        echo "ERROR: invalid repository name specified."
+        exit 1
+    else
+        echo "[!] Download code from GitHub repository: $fork"
+        fork="$1"
+    fi
+else
+    fork="hestiacp"
+fi
+
+if [ ! -z "$2" ]; then
     branch_check=$(curl -s --head -w %{http_code} https://raw.githubusercontent.com/hestiacp/hestiacp/$branch/src/deb/hestia/control -o /dev/null)
     if [ $branch_check -ne "200" ]; then
-        echo "Error: invalid branch name specified."
+        echo "ERROR: invalid branch name specified."
         exit 1
     else
         /usr/local/hestia/bin/v-change-sys-config-value 'RELEASE_BRANCH' "$branch"
-        echo "Changed release branch to $branch."
+        echo "[!] Changed system release branch to: $branch."
     fi
 else
     source /usr/local/hestia/conf/hestia.conf
@@ -98,15 +123,15 @@ else
 fi
 
 if [ -z "$branch" ]; then
-    echo "No branch detected, please provide one using: v-update-sys-hestia-git branch"
+    echo "ERROR: No branch detected."
     exit
 fi
 
 
 # Install needed software
-echo "Updating system APT repositories..."
+echo "[*] Updating APT package cache..."
 apt-get -qq update > /dev/null 2>&1
-echo "Installing dependencies for compilation..."
+echo "[*] Checking for missing dependencies and installing required libraries..."
 apt-get -qq install -y $SOFTWARE > /dev/null 2>&1
 
 # Fix for Debian PHP Envroiment
@@ -115,14 +140,22 @@ ln -s /usr/include/x86_64-linux-gnu/curl /usr/local/include/curl > /dev/null 2>&
 # Get system cpu cores
 NUM_CPUS=$(grep "^cpu cores" /proc/cpuinfo | uniq |  awk '{print $4}')
 
-# Set packages to compile
-HESTIA_B='true'
+# Check for existence of flags argument and set packages to build
+if [ ! -z "$flags" ]; then
+    if [ "$flags" = "all" ]; then
+        HESTIA_B='true'
+        NGINX_B='true'
+        PHP_B='true'
+    fi
+else
+    HESTIA_B='true'
+fi
 
 # Set git repository raw path
-GIT_REP='https://raw.githubusercontent.com/hestiacp/hestiacp/'$branch'/src/deb'
+GIT_REP='https://raw.githubusercontent.com/'$fork'/hestiacp/'$branch'/src/deb'
 
 # Generate Links for sourcecode
-HESTIA_ARCHIVE_LINK='https://github.com/hestiacp/hestiacp/archive/'$branch'.tar.gz'
+HESTIA_ARCHIVE_LINK='https://github.com/'$fork'/hestiacp/archive/'$branch'.tar.gz'
 NGINX='https://nginx.org/download/nginx-'$NGINX_V'.tar.gz'
 OPENSSL='https://www.openssl.org/source/openssl-'$OPENSSL_V'.tar.gz'
 PCRE='https://ftp.pcre.org/pub/pcre/pcre-'$PCRE_V'.tar.gz'
@@ -140,7 +173,7 @@ branch=$(echo "$branch" |sed 's/\//-/g');
 
 if [ "$NGINX_B" = true ] ; then
 
-    echo "Building hestia-nginx package..."
+    echo "[*] Building Package: hestia-nginx (backend web server)..."
     # Change to build directory
     cd $BUILD_DIR
 
@@ -235,7 +268,7 @@ fi
 #################################################################################
 
 if [ "$PHP_B" = true ] ; then
-    echo "Building hestia-php package..."
+    echo "[*] Building Package: hestia-php (backend engine)..."
     # Change to build directory
     cd $BUILD_DIR
 
@@ -311,7 +344,7 @@ fi
 #################################################################################
 
 if [ "$HESTIA_B" = true ] ; then
-    echo "Building Hestia Control Panel package..."
+    echo "[*] Building Package: hestia (Control Panel)..."
     # Change to build directory
     cd $BUILD_DIR
 
@@ -389,8 +422,11 @@ install_build() {
 
 # Define installation routine
 
-if [ "$install" = "yes" ]; then 
+if [ "$install" = "install" ] || [ "$install" = "yes" ] || [ "$install" = "install-auto" ]; then 
     install_build
+    if [ "$install" = "install-auto" ]; then
+        $HESTIA/bin/v-add-cron-hestia-autoupdate git
+    fi
 else
     warning_message
     read -p "Do you wish to proceed with the installation? [y/n] " answer

+ 9 - 29
bin/v-update-web-templates

@@ -27,41 +27,21 @@ if [ -d "${WEBTPL}" ]; then
     rm -rf "${WEBTPL}/unassigned" 2>/dev/null
 fi
 
-for php_ver in $(ls /etc/php/); do
-    [ ! -d "/etc/php/$php_ver/fpm/pool.d/" ] && continue
-    cp -f "$HESTIA_INSTALL_DIR/php-fpm/multiphp.tpl"  ${WEBTPL}/php-fpm/PHP-${php_ver/\./_}.tpl
-done
-
-for webtpl_folder in $(ls $HESTIA_INSTALL_DIR/templates/web/* -d 2>/dev/null | egrep -v '/(nginx)$' ); do
-    cp -rf "${webtpl_folder}" "${WEBTPL}/"
-done
-
 [ -d "${WEBTPL}/nginx" ] || mkdir -p "${WEBTPL}/nginx"
 
-# Update Multi-PHP templates
-php_versions=$(ls /etc/php/*/fpm -d 2>/dev/null | wc -l)
-if [ "$php_versions" -gt 1 ] && [ -z "$WEB_BACKEND" ]; then
-    for v in $(ls /etc/php/); do
-        if [ ! -d "/etc/php/$v/fpm/pool.d/" ]; then
-            continue
-        fi
-        v_tpl=$(echo "$v" | sed -e 's/[.]//')
-        cp -f "$HESTIA_INSTALL_DIR/multiphp/${WEB_SYSTEM}/PHP-${v_tpl}".* "${WEBTPL}/${WEB_SYSTEM}/"
-    done
-    chmod a+x "${WEBTPL}/${WEB_SYSTEM}/"*.sh 2> /dev/null
-
-    # Create default TPL symlink when missing and point to the last php version found
-    if [ ! -z $v_tpl ] && [ "$WEB_SYSTEM" = "nginx" ]; then
-        [ -e "${WEBTPL}/${WEB_SYSTEM}/default.sh"   ] || ln -s "${WEBTPL}/${WEB_SYSTEM}/PHP-${v_tpl}.sh" "${WEBTPL}/${WEB_SYSTEM}/default.sh"
-        [ -e "${WEBTPL}/${WEB_SYSTEM}/default.tpl"  ] || ln -s "${WEBTPL}/${WEB_SYSTEM}/PHP-${v_tpl}.tpl" "${WEBTPL}/${WEB_SYSTEM}/default.tpl"
-        [ -e "${WEBTPL}/${WEB_SYSTEM}/default.stpl" ] || ln -s "${WEBTPL}/${WEB_SYSTEM}/PHP-${v_tpl}.stpl" "${WEBTPL}/${WEB_SYSTEM}/default.stpl"
-    fi
-fi
-
 if [ "$PROXY_SYSTEM" = 'nginx' ] || [ "$WEB_BACKEND" = "php-fpm" ]; then
     cp -rf "${HESTIA_INSTALL_DIR}/templates/web/nginx" "${WEBTPL}/"
 fi
 
+for webtpl_folder in $(ls $HESTIA_INSTALL_DIR/templates/web/* -d 2>/dev/null | egrep -v '/(nginx)$' ); do
+    cp -rf "${webtpl_folder}" "${WEBTPL}/"
+done
+
+for php_ver in $(ls /etc/php/); do
+    [ ! -d "/etc/php/$php_ver/fpm/pool.d/" ] && continue
+    cp -f "$HESTIA_INSTALL_DIR/php-fpm/multiphp.tpl"  ${WEBTPL}/php-fpm/PHP-${php_ver/\./_}.tpl
+done
+
 # Rebuilding web domains
 for user in $($BIN/v-list-sys-users plain); do
     $BIN/v-rebuild-web-domains $user no

+ 29 - 26
func/upgrade.sh

@@ -18,7 +18,7 @@ upgrade_welcome_message() {
     echo "                            Version: $new_version                       "
     echo "========================================================================"
     echo
-    echo "(!) IMPORTANT INFORMATION:                                              "
+    echo "[ ! ] IMPORTANT INFORMATION:                                              "
     echo
     echo "Default configuration files and templates may be modified or replaced   "
     echo "during the upgrade process. You may restore these files from:           "
@@ -77,23 +77,9 @@ upgrade_start_routine() {
     #####################################################################
     release_branch_check=$(cat $HESTIA/conf/hestia.conf | grep RELEASE_BRANCH)
     if [ -z "$release_branch_check" ]; then
-        echo "(*) Adding global release branch variable to system configuration..."
+        echo "[ * ] Adding global release branch variable to system configuration..."
         $BIN/v-change-sys-config-value 'RELEASE_BRANCH' 'release'
     fi
-
-    #####################################################################
-    #######         Start upgrade for pre-release builds          #######
-    #######     Ensures clean upgrade path from v1.0.1 onwards    #######
-    #######             DO NOT MODIFY THIS SECTION                #######
-    #####################################################################
-
-    if [ $VERSION = "0.9.8-25" ] || [ $VERSION = "0.9.8-26" ] || [ $VERSION = "0.9.8-27" ] || [ $VERSION = "0.9.8-28" ] || [ $VERSION = "0.9.8-29" ] || [ $VERSION = "0.10.0" ] || [ $VERSION = "1.00.0-190618" ] || [ $VERSION = "1.00.0-190621" ] || [ $VERSION = "1.0.0" ]; then
-        source $HESTIA/install/upgrade/versions/previous/0.9.8-29.sh
-        source $HESTIA/install/upgrade/versions/previous/1.00.0-190618.sh
-        source $HESTIA/install/upgrade/versions/previous/1.0.1.sh
-        VERSION="1.0.1"
-        upgrade_refresh_config
-    fi
     
     #####################################################################
     #######             Start standard upgrade process            #######
@@ -102,11 +88,21 @@ upgrade_start_routine() {
 
     # Ensure that latest upgrade commands are processed if version is the same
     if [ $VERSION = "$new_version" ]; then
-        echo "(!) The latest version of Hestia Control Panel is already installed."
-        echo "    Verifying configuration..."
+        echo "[ ! ] The latest version of Hestia Control Panel is already installed."
+        echo "      Verifying configuration..."
         echo ""
         source $HESTIA/install/upgrade/versions/latest.sh
         VERSION="$new_version"
+        upgrade_set_version $VERSION
+        upgrade_refresh_config
+    fi
+
+    if [ $VERSION = "0.9.8-25" ] || [ $VERSION = "0.9.8-26" ] || [ $VERSION = "0.9.8-27" ] || [ $VERSION = "0.9.8-28" ] || [ $VERSION = "0.9.8-29" ] || [ $VERSION = "0.10.0" ] || [ $VERSION = "1.00.0-190618" ] || [ $VERSION = "1.00.0-190621" ] || [ $VERSION = "1.0.0" ]; then
+        source $HESTIA/install/upgrade/versions/previous/0.9.8-29.sh
+        source $HESTIA/install/upgrade/versions/previous/1.00.0-190618.sh
+        source $HESTIA/install/upgrade/versions/previous/1.0.1.sh
+        VERSION="1.0.1"
+        upgrade_set_version $VERSION
         upgrade_refresh_config
     fi
 
@@ -114,6 +110,7 @@ upgrade_start_routine() {
     if [ $VERSION = "1.0.1" ]; then
         source $HESTIA/install/upgrade/versions/previous/1.0.2.sh
         VERSION="1.0.2"
+        upgrade_set_version $VERSION
         upgrade_refresh_config
     fi
 
@@ -121,6 +118,7 @@ upgrade_start_routine() {
     if [ $VERSION = "1.0.2" ]; then
         source $HESTIA/install/upgrade/versions/previous/1.0.3.sh
         VERSION="1.0.3"
+        upgrade_set_version $VERSION
         upgrade_refresh_config
     fi
 
@@ -128,6 +126,7 @@ upgrade_start_routine() {
     if [ $VERSION = "1.0.3" ]; then
         source $HESTIA/install/upgrade/versions/previous/1.0.4.sh
         VERSION="1.0.4"
+        upgrade_set_version $VERSION
         upgrade_refresh_config
     fi
 
@@ -135,6 +134,7 @@ upgrade_start_routine() {
     if [ $VERSION = "1.0.4" ]; then
         source $HESTIA/install/upgrade/versions/previous/1.0.5.sh
         VERSION="1.0.5"
+        upgrade_set_version $VERSION
         upgrade_refresh_config
     fi
 
@@ -142,6 +142,7 @@ upgrade_start_routine() {
     if [ $VERSION = "1.0.5" ]; then
         source $HESTIA/install/upgrade/versions/previous/1.0.6.sh
         VERSION="1.0.6"
+        upgrade_set_version $VERSION
         upgrade_refresh_config
     fi
 
@@ -149,6 +150,7 @@ upgrade_start_routine() {
     if [ $VERSION = "1.0.6" ]; then
         source $HESTIA/install/upgrade/versions/previous/1.1.0.sh
         VERSION="1.1.0"
+        upgrade_set_version $VERSION
         upgrade_refresh_config
     fi
 
@@ -156,6 +158,7 @@ upgrade_start_routine() {
     if [ $VERSION = "1.1.0" ]; then
         source $HESTIA/install/upgrade/versions/previous/1.1.1.sh
         VERSION="1.1.1"
+        upgrade_set_version $VERSION
         upgrade_refresh_config
     fi
 
@@ -179,10 +182,10 @@ upgrade_phpmyadmin() {
 
         pma_release_file=$(ls /usr/share/phpmyadmin/RELEASE-DATE-* 2>/dev/null |tail -n 1)
         if version_ge "${pma_release_file##*-}" "$pma_v"; then
-            echo "(!) phpMyAdmin v${pma_release_file##*-} is already installed, skipping update..."
+            echo "[ ! ] phpMyAdmin v${pma_release_file##*-} is already installed, skipping update..."
         else
             # Display upgrade information
-            echo "(*) Upgrading phpMyAdmin to version v$pma_v..."
+            echo "[ * ] Upgrading phpMyAdmin to version v$pma_v..."
             [ -d /usr/share/phpmyadmin ] || mkdir -p /usr/share/phpmyadmin
 
             # Download latest phpMyAdmin release
@@ -215,7 +218,7 @@ upgrade_phpmyadmin() {
 }
 
 update_php_templates() {
-    echo "(*) Updating default PHP templates..."
+    echo "[ * ] Updating default PHP templates..."
     # Update default template
     cp -f $HESTIA_INSTALL_DIR/templates/web/php-fpm/default.tpl \
         $HESTIA/data/templates/web/php-fpm/default.tpl
@@ -229,7 +232,7 @@ update_php_templates() {
         $HESTIA/data/templates/web/php-fpm/socket.tpl
 
     for version in $($HESTIA/bin/v-list-sys-php plain); do 
-        echo "(*) Updating templates for PHP ${version}..."
+        echo "[ * ] Updating templates for PHP ${version}..."
         cp -f $HESTIA_INSTALL_DIR/php-fpm/multiphp.tpl \
             $HESTIA/data/templates/web/php-fpm/PHP-${version/\./_}.tpl; 
     done
@@ -243,12 +246,12 @@ upgrade_get_version() {
 upgrade_set_version() {
     # Set new version number in hestia.conf
     sed -i "/VERSION/d" $HESTIA/conf/hestia.conf
-    echo "VERSION='$new_version'" >> $HESTIA/conf/hestia.conf
+    echo "VERSION='$@'" >> $HESTIA/conf/hestia.conf
 }
 
 upgrade_rebuild_users() {
     for user in $($HESTIA/bin/v-list-sys-users plain); do
-        echo "(*) Rebuilding domains and account for user: $user..."
+        echo "[ * ] Rebuilding domains and account for user: $user..."
         if [ ! -z "$WEB_SYSTEM" ]; then
             $BIN/v-rebuild-web-domains $user 'no' >/dev/null 2>&1
         fi
@@ -265,12 +268,12 @@ upgrade_restart_services() {
     # Refresh user interface theme
     if [ "$THEME" ]; then
         if [ "$THEME" != "default" ]; then
-            echo "(*) Applying user interface updates..."
+            echo "[ * ] Applying user interface updates..."
             $BIN/v-change-sys-theme $THEME
         fi
     fi
 
-    echo "(*) Restarting services..."
+    echo "[ * ] Restarting services..."
     sleep 5
     if [ ! -z "$MAIL_SYSTEM" ]; then
         $BIN/v-restart-mail $restart

+ 39 - 38
install/hst-install-debian.sh

@@ -312,35 +312,35 @@ mkdir -p $hst_backups
 
 # Checking ntpdate
 if [ ! -e '/usr/sbin/ntpdate' ]; then
-    echo "(*) Installing ntpdate..."
+    echo "[ * ] Installing ntpdate..."
     apt-get -y install ntpdate >> $LOG
     check_result $? "Can't install ntpdate"
 fi
 
 # Checking wget
 if [ ! -e '/usr/bin/wget' ]; then
-    echo "(*) Installing wget..."
+    echo "[ * ] Installing wget..."
     apt-get -y install wget >> $LOG
     check_result $? "Can't install wget"
 fi
 
 # Checking dirmngr
 if [ ! -e '/usr/bin/dirmngr' ]; then
-    echo "(*) Installing dirmngr..."
+    echo "[ * ] Installing dirmngr..."
     apt-get -y install dirmngr >> $LOG
     check_result $? "Can't install dirmngr"
 fi
 
 # Check if apt-transport-https is installed
 if [ ! -e '/usr/lib/apt/methods/https' ]; then
-    echo "(*) Installing apt-transport-https..."
+    echo "[ * ] Installing apt-transport-https..."
     apt-get -y install apt-transport-https >> $LOG
     check_result $? "Can't install apt-transport-https"
 fi
 
 # Check if gnupg or gnupg2 is installed
 if [ ! -e '/usr/lib/gnupg2' ] || [ ! -e '/usr/lib/gnupg' ]; then
-    echo "(*) Installing gnupg2..."
+    echo "[ * ] Installing gnupg2..."
     apt-get -y install gnupg2 >> $LOG
     check_result $? "Can't install gnupg2"
 fi
@@ -613,21 +613,21 @@ echo
 
 # Installing Nginx repo
 if [ "$nginx" = 'yes' ]; then
-    echo "(*) NGINX"
+    echo "[ * ] NGINX"
     echo "deb [arch=amd64] http://nginx.org/packages/mainline/$VERSION/ $codename nginx" > $apt/nginx.list
     wget --quiet http://nginx.org/keys/nginx_signing.key -O /tmp/nginx_signing.key
     APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add /tmp/nginx_signing.key > /dev/null 2>&1
 fi
 
 # Installing sury PHP repo
-echo "(*) PHP"
+echo "[ * ] PHP"
 echo "deb https://packages.sury.org/php/ $codename main" > $apt/php.list
 wget --quiet https://packages.sury.org/php/apt.gpg -O /tmp/php_signing.key
 APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add /tmp/php_signing.key > /dev/null 2>&1
 
 # Installing sury Apache2 repo
 if [ "$apache" = 'yes' ]; then
-    echo "(*) Apache2"
+    echo "[ * ] Apache2"
     echo "deb https://packages.sury.org/apache2/ $codename main" > $apt/apache2.list
     wget --quiet https://packages.sury.org/apache2/apt.gpg -O /tmp/apache2_signing.key
     APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add /tmp/apache2_signing.key > /dev/null 2>&1
@@ -635,7 +635,7 @@ fi
 
 # Installing MariaDB repo
 if [ "$mysql" = 'yes' ]; then
-    echo "(*) MariaDB"
+    echo "[ * ] MariaDB"
     echo "deb [arch=amd64] http://ams2.mirrors.digitalocean.com/mariadb/repo/$mariadb_v/$VERSION $codename main" > $apt/mariadb.list
     if [ "$release" -eq 8 ]; then
         APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --recv-keys --keyserver keyserver.ubuntu.com CBCB082A1BB943DB > /dev/null 2>&1
@@ -650,13 +650,13 @@ if [ "$release" -eq 8 ]; then
 fi
 
 # Installing HestiaCP repo
-echo "(*) Hestia Control Panel"
+echo "[ * ] Hestia Control Panel"
 echo "deb https://$RHOST/ $codename main" > $apt/hestia.list
 APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A189E93654F0B0E5 > /dev/null 2>&1
 
 # Installing PostgreSQL repo
 if [ "$postgresql" = 'yes' ]; then
-    echo "(*) PostgreSQL"
+    echo "[ * ] PostgreSQL"
     echo "deb http://apt.postgresql.org/pub/repos/apt/ $codename-pgdg main" > $apt/postgresql.list
     wget --quiet https://www.postgresql.org/media/keys/ACCC4CF8.asc -O /tmp/psql_signing.key
     APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add /tmp/psql_signing.key > /dev/null 2>&1
@@ -888,7 +888,7 @@ echo
 
 # Install Hestia packages from local folder
 if [ ! -z "$withdebs" ] && [ -d "$withdebs" ]; then
-    echo "(*) Installing local package files..."
+    echo "[ * ] Installing local package files..."
     echo "    - hestia core package"
     dpkg -i $withdebs/hestia_*.deb > /dev/null 2>&1
 
@@ -917,7 +917,7 @@ rm -f /usr/sbin/policy-rc.d
 #----------------------------------------------------------#
 
 
-echo "(*) Configuring system settings..."
+echo "[ * ] Configuring system settings..."
 # Enable SSH password authentication
 sed -i "s/rdAuthentication no/rdAuthentication yes/g" /etc/ssh/sshd_config
 
@@ -979,7 +979,7 @@ fi
 #                     Configure Hestia                     #
 #----------------------------------------------------------#
 
-echo "(*) Configuring Hestia Control Panel..."
+echo "[ * ] Configuring Hestia Control Panel..."
 # Installing sudo configuration
 mkdir -p /etc/sudoers.d
 cp -f $HESTIA_INSTALL_DIR/sudo/admin /etc/sudoers.d/
@@ -1116,6 +1116,7 @@ fi
 
 # Backups
 echo "BACKUP_SYSTEM='local'" >> $HESTIA/conf/hestia.conf
+echo "BACKUP_GZIP='9'" >> $HESTIA/conf/hestia.conf
 
 # Language
 echo "LANGUAGE='$lang'" >> $HESTIA/conf/hestia.conf
@@ -1151,7 +1152,7 @@ cp -rf $HESTIA_INSTALL_DIR/firewall $HESTIA/data/
 $HESTIA/bin/v-change-sys-hostname $servername > /dev/null 2>&1
 
 # Generating SSL certificate
-echo "(*) Generating default self-signed SSL certificate..."
+echo "[ * ] Generating default self-signed SSL certificate..."
 $HESTIA/bin/v-generate-ssl-cert $(hostname) $email 'US' 'California' \
      'San Francisco' 'Hestia Control Panel' 'IT' > /tmp/hst.pem
 
@@ -1161,7 +1162,7 @@ key_start=$(grep -n "BEGIN RSA" /tmp/hst.pem |cut -f 1 -d:)
 key_end=$(grep -n  "END RSA" /tmp/hst.pem |cut -f 1 -d:)
 
 # Adding SSL certificate
-echo "(*) Adding SSL certificate to Hestia Control Panel..."
+echo "[ * ] Adding SSL certificate to Hestia Control Panel..."
 cd $HESTIA/ssl
 sed -n "1,${crt_end}p" /tmp/hst.pem > certificate.crt
 sed -n "$key_start,${key_end}p" /tmp/hst.pem > certificate.key
@@ -1177,7 +1178,7 @@ cp -f $HESTIA_INSTALL_DIR/ssl/dhparam.pem /etc/ssl
 #----------------------------------------------------------#
 
 if [ "$nginx" = 'yes' ]; then
-    echo "(*) Configuring NGINX..."
+    echo "[ * ] Configuring NGINX..."
     rm -f /etc/nginx/conf.d/*.conf
     cp -f $HESTIA_INSTALL_DIR/nginx/nginx.conf /etc/nginx/
     cp -f $HESTIA_INSTALL_DIR/nginx/status.conf /etc/nginx/conf.d/
@@ -1211,7 +1212,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$apache" = 'yes' ]; then
-    echo "(*) Configuring Apache Web Server..."
+    echo "[ * ] Configuring Apache Web Server..."
 
     mkdir -p /etc/apache2/conf.d
     mkdir -p /etc/apache2/conf.d/domains
@@ -1274,13 +1275,13 @@ if [ "$multiphp" = 'yes' ] ; then
     for v in "${multiphp_v[@]}"; do
         cp -r /etc/php/$v/ /root/hst_install_backups/php$v/
         rm -f /etc/php/$v/fpm/pool.d/*
-        echo "(*) Install PHP version $v..."
+        echo "[ * ] Install PHP version $v..."
         $HESTIA/bin/v-add-web-php "$v" > /dev/null 2>&1
     done
 fi
 
 if [ "$phpfpm" = 'yes' ]; then
-    echo "(*) Configuring PHP-FPM..."
+    echo "[ * ] Configuring PHP-FPM..."
     $HESTIA/bin/v-add-web-php "$fpm_v" > /dev/null 2>&1
     cp -f $HESTIA_INSTALL_DIR/php-fpm/www.conf /etc/php/$fpm_v/fpm/pool.d/www.conf
     update-rc.d php$fpm_v-fpm defaults > /dev/null 2>&1
@@ -1294,7 +1295,7 @@ fi
 #                     Configure PHP                        #
 #----------------------------------------------------------#
 
-echo "(*) Configuring PHP..."
+echo "[ * ] Configuring PHP..."
 ZONE=$(timedatectl > /dev/null 2>&1|grep Timezone|awk '{print $2}')
 if [ -z "$ZONE" ]; then
     ZONE='UTC'
@@ -1316,7 +1317,7 @@ chmod 755 /etc/cron.daily/php-session-cleanup
 #----------------------------------------------------------#
 
 if [ "$vsftpd" = 'yes' ]; then
-    echo "(*) Configuring Vsftpd server..."
+    echo "[ * ] Configuring Vsftpd server..."
     cp -f $HESTIA_INSTALL_DIR/vsftpd/vsftpd.conf /etc/
     touch /var/log/vsftpd.log
     chown root:adm /var/log/vsftpd.log
@@ -1336,7 +1337,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$proftpd" = 'yes' ]; then
-    echo "(*) Configuring ProFTPD server..."
+    echo "[ * ] Configuring ProFTPD server..."
     echo "127.0.0.1 $servername" >> /etc/hosts
     cp -f $HESTIA_INSTALL_DIR/proftpd/proftpd.conf /etc/proftpd/
     update-rc.d proftpd defaults > /dev/null 2>&1
@@ -1350,7 +1351,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$mysql" = 'yes' ]; then
-    echo "(*) Configuring MariaDB database server..."
+    echo "[ * ] Configuring MariaDB database server..."
     mycnf="my-small.cnf"
     if [ $memory -gt 1200000 ]; then
         mycnf="my-medium.cnf"
@@ -1396,7 +1397,7 @@ fi
 
 if [ "$mysql" = 'yes' ]; then
     # Display upgrade information
-    echo "(*) Installing phpMyAdmin version v$pma_v..."
+    echo "[ * ] Installing phpMyAdmin version v$pma_v..."
 
     # Download latest phpmyadmin release
     wget --quiet https://files.phpmyadmin.net/phpMyAdmin/$pma_v/phpMyAdmin-$pma_v-all-languages.tar.gz
@@ -1436,7 +1437,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$postgresql" = 'yes' ]; then
-    echo "(*) Configuring PostgreSQL database server..."
+    echo "[ * ] Configuring PostgreSQL database server..."
     ppass=$(gen_pass)
     cp -f $HESTIA_INSTALL_DIR/postgresql/pg_hba.conf /etc/postgresql/*/main/
     systemctl restart postgresql
@@ -1458,7 +1459,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$named" = 'yes' ]; then
-    echo "(*) Configuring Bind DNS server..."
+    echo "[ * ] Configuring Bind DNS server..."
     cp -f $HESTIA_INSTALL_DIR/bind/named.conf /etc/bind/
     cp -f $HESTIA_INSTALL_DIR/bind/named.conf.options /etc/bind/
     chown root:bind /etc/bind/named.conf
@@ -1490,7 +1491,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$exim" = 'yes' ]; then
-    echo "(*) Configuring Exim mail server..."
+    echo "[ * ] Configuring Exim mail server..."
     gpasswd -a Debian-exim mail > /dev/null 2>&1
     cp -f $HESTIA_INSTALL_DIR/exim/exim4.conf.template /etc/exim4/
     cp -f $HESTIA_INSTALL_DIR/exim/dnsbl.conf /etc/exim4/
@@ -1525,7 +1526,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$dovecot" = 'yes' ]; then
-    echo "(*) Configuring Dovecot POP/IMAP mail server..."
+    echo "[ * ] Configuring Dovecot POP/IMAP mail server..."
     gpasswd -a dovecot mail > /dev/null 2>&1
     cp -rf $HESTIA_INSTALL_DIR/dovecot /etc/
     cp -f $HESTIA_INSTALL_DIR/logrotate/dovecot /etc/logrotate.d/
@@ -1559,7 +1560,7 @@ if [ "$clamd" = 'yes' ]; then
             /lib/systemd/system/clamav-daemon.service
         systemctl daemon-reload
     fi
-    echo -ne "(*) Installing ClamAV anti-virus definitions... "
+    echo -ne "[ * ] Installing ClamAV anti-virus definitions... "
     /usr/bin/freshclam >> $LOG &
     BACK_PID=$!
     spin_i=1
@@ -1578,7 +1579,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$spamd" = 'yes' ]; then
-    echo "(*) Configuring SpamAssassin..."
+    echo "[ * ] Configuring SpamAssassin..."
     update-rc.d spamassassin defaults > /dev/null 2>&1
     sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/spamassassin
     systemctl start spamassassin >> $LOG
@@ -1595,7 +1596,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$dovecot" = 'yes' ] && [ "$exim" = 'yes' ] && [ "$mysql" = 'yes' ]; then
-    echo "(*) Configuring Roundcube webmail client..."
+    echo "[ * ] Configuring Roundcube webmail client..."
     cp -f $HESTIA_INSTALL_DIR/roundcube/main.inc.php /etc/roundcube/config.inc.php
     cp -f $HESTIA_INSTALL_DIR/roundcube/db.inc.php /etc/roundcube/debian-db-roundcube.php
     cp -f $HESTIA_INSTALL_DIR/roundcube/config.inc.php /etc/roundcube/plugins/password/
@@ -1677,7 +1678,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$fail2ban" = 'yes' ]; then
-    echo "(*) Configuring fail2ban access monitor..."
+    echo "[ * ] Configuring fail2ban access monitor..."
     cp -rf $HESTIA_INSTALL_DIR/fail2ban /etc/
     if [ "$dovecot" = 'no' ]; then
         fline=$(cat /etc/fail2ban/jail.local |grep -n dovecot-iptables -A 2)
@@ -1848,7 +1849,7 @@ command="sudo $HESTIA/bin/v-update-sys-rrd"
 $HESTIA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command"
 
 # Enable automatic updates
-$HESTIA/bin/v-add-cron-hestia-autoupdate
+$HESTIA/bin/v-add-cron-hestia-autoupdate apt
 
 # Building initital rrd images
 $HESTIA/bin/v-update-sys-rrd
@@ -1865,7 +1866,7 @@ $HESTIA/bin/v-change-sys-port $port > /dev/null 2>&1
 $HESTIA/bin/v-change-sys-theme 'default'
 
 # Update remaining packages since repositories have changed
-echo -ne "(*) Installing remaining software updates..."
+echo -ne "[ * ] Installing remaining software updates..."
 apt-get -qq update
 apt-get -y upgrade >> $LOG &
 BACK_PID=$!
@@ -1882,8 +1883,8 @@ chown admin:admin $HESTIA/data/sessions
 #                  Configure File Manager                   #
 #----------------------------------------------------------#
 
-echo "(*) Configuring File Manager..."
-source $HESTIA_INSTALL_DIR/filemanager/install-fm.sh > /dev/null 2>&1
+echo "[ * ] Configuring File Manager..."
+$HESTIA/bin/v-add-sys-filemanager quiet
 
 
 #----------------------------------------------------------#
@@ -1945,7 +1946,7 @@ rm -f $tmpfile
 # Add welcome message to notification panel
 $HESTIA/bin/v-add-user-notification admin 'Welcome to Hestia Control Panel!' '<br>You are now ready to begin <a href="/add/user/">adding user accounts</a> and <a href="/add/web/">domains</a>. For help and assistance, view the <a href="https://docs.hestiacp.com/" target="_new">documentation</a> or visit our <a href="https://forum.hestiacp.com/" target="_new">user forum</a>.<br><br>Please report any bugs or issues via <a href="https://github.com/hestiacp/hestiacp/issues" target="_new"><i class="fab fa-github"></i> GitHub</a> or e-mail <a href="mailto:info@hestiacp.com?Subject="['$new_version'] Bug Report: ">info@hestiacp.com</a>.<br><br><b>Have a wonderful day!</b><br><br><i class="fas fa-heart status-icon red"></i> The Hestia Control Panel development team'
 
-echo "(!) IMPORTANT: You must logout or restart the server before continuing."
+echo "[ ! ] IMPORTANT: You must logout or restart the server before continuing."
 echo ""
 if [ "$interactive" = 'yes' ]; then
     echo -n " Do you want to reboot now? [Y/N] "

+ 39 - 38
install/hst-install-ubuntu.sh

@@ -294,35 +294,35 @@ mkdir -p $hst_backups
 
 # Checking ntpdate
 if [ ! -e '/usr/sbin/ntpdate' ]; then
-    echo "(*) Installing ntpdate..."
+    echo "[ * ] Installing ntpdate..."
     apt-get -y install ntpdate >> $LOG
     check_result $? "Can't install ntpdate"
 fi
 
 # Checking wget
 if [ ! -e '/usr/bin/wget' ]; then
-    echo "(*) Installing wget..."
+    echo "[ * ] Installing wget..."
     apt-get -y install wget >> $LOG
     check_result $? "Can't install wget"
 fi
 
 # Check if apt-transport-https is installed
 if [ ! -e '/usr/lib/apt/methods/https' ]; then
-    echo "(*) Installing apt-transport-https..."
+    echo "[ * ] Installing apt-transport-https..."
     apt-get -y install apt-transport-https >> $LOG
     check_result $? "Can't install apt-transport-https"
 fi
 
 # Check if apt-add-repository is installed
 if [ ! -e '/usr/bin/apt-add-repository' ]; then
-    echo "(*) Installing apt-add-repository..."
+    echo "[ * ] Installing apt-add-repository..."
     apt-get -y install software-properties-common >> $LOG
     check_result $? "Can't install software-properties-common"
 fi
 
 # Check if gnupg or gnupg2 is installed
 if [ ! -e '/usr/lib/gnupg2' ] || [ ! -e '/usr/lib/gnupg' ]; then
-    echo "(*) Installing gnupg2..."
+    echo "[ * ] Installing gnupg2..."
     apt-get -y install gnupg2 >> $LOG
     check_result $? "Can't install gnupg2"
 fi
@@ -588,7 +588,7 @@ echo
 
 # Installing Nginx repo
 if [ "$nginx" = 'yes' ]; then
-    echo "(*) NGINX"
+    echo "[ * ] NGINX"
     echo "deb [arch=amd64] http://nginx.org/packages/mainline/$VERSION/ $codename nginx" \
     > $apt/nginx.list
     wget --quiet http://nginx.org/keys/nginx_signing.key -O /tmp/nginx_signing.key
@@ -596,30 +596,30 @@ if [ "$nginx" = 'yes' ]; then
 fi
 
 # Installing sury PHP repo
-echo "(*) PHP"
+echo "[ * ] PHP"
 LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php > /dev/null 2>&1
 
 # Installing sury Apache2 repo
 if [ "$apache" = 'yes' ]; then
-    echo "(*) Apache2"
+    echo "[ * ] Apache2"
     echo "deb http://ppa.launchpad.net/ondrej/apache2/ubuntu $codename main" > $apt/apache2.list
 fi
 
 # Installing MariaDB repo
 if [ "$mysql" = 'yes' ]; then
-    echo "(*) MariaDB"
+    echo "[ * ] MariaDB"
     echo "deb [arch=amd64] http://ams2.mirrors.digitalocean.com/mariadb/repo/$mariadb_v/$VERSION $codename main" > $apt/mariadb.list
     APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8 > /dev/null 2>&1
 fi
 
 # Installing HestiaCP repo
-echo "(*) Hestia Control Panel"
+echo "[ * ] Hestia Control Panel"
 echo "deb https://$RHOST/ $codename main" > $apt/hestia.list
 APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A189E93654F0B0E5 > /dev/null 2>&1
 
 # Installing PostgreSQL repo
 if [ "$postgresql" = 'yes' ]; then
-    echo "(*) PostgreSQL"
+    echo "[ * ] PostgreSQL"
     echo "deb http://apt.postgresql.org/pub/repos/apt/ $codename-pgdg main" > $apt/postgresql.list
     wget --quiet https://www.postgresql.org/media/keys/ACCC4CF8.asc -O /tmp/psql_signing.key
     APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add /tmp/psql_signing.key > /dev/null 2>&1
@@ -886,7 +886,7 @@ echo
 
 # Install Hestia packages from local folder
 if [ ! -z "$withdebs" ] && [ -d "$withdebs" ]; then
-    echo "(*) Installing local package files..."
+    echo "[ * ] Installing local package files..."
     echo "    - hestia core package"
     dpkg -i $withdebs/hestia_*.deb > /dev/null 2>&1
 
@@ -915,7 +915,7 @@ rm -f /usr/sbin/policy-rc.d
 #                     Configure system                     #
 #----------------------------------------------------------#
 
-echo "(*) Configuring system settings..."
+echo "[ * ] Configuring system settings..."
 # Enable SSH password authentication
 sed -i "s/rdAuthentication no/rdAuthentication yes/g" /etc/ssh/sshd_config
 
@@ -1013,7 +1013,7 @@ fi
 #                     Configure Hestia                     #
 #----------------------------------------------------------#
 
-echo "(*) Configuring Hestia Control Panel..."
+echo "[ * ] Configuring Hestia Control Panel..."
 # Installing sudo configuration
 mkdir -p /etc/sudoers.d
 cp -f $HESTIA_INSTALL_DIR/sudo/admin /etc/sudoers.d/
@@ -1144,6 +1144,7 @@ fi
 
 # Backups
 echo "BACKUP_SYSTEM='local'" >> $HESTIA/conf/hestia.conf
+echo "BACKUP_GZIP='9'" >> $HESTIA/conf/hestia.conf
 
 # Language
 echo "LANGUAGE='$lang'" >> $HESTIA/conf/hestia.conf
@@ -1179,7 +1180,7 @@ cp -rf $HESTIA_INSTALL_DIR/firewall $HESTIA/data/
 $HESTIA/bin/v-change-sys-hostname $servername > /dev/null 2>&1
 
 # Generating SSL certificate
-echo "(*) Generating default self-signed SSL certificate..."
+echo "[ * ] Generating default self-signed SSL certificate..."
 $HESTIA/bin/v-generate-ssl-cert $(hostname) $email 'US' 'California' \
      'San Francisco' 'Hestia Control Panel' 'IT' > /tmp/hst.pem
 
@@ -1189,7 +1190,7 @@ key_start=$(grep -n "BEGIN RSA" /tmp/hst.pem |cut -f 1 -d:)
 key_end=$(grep -n  "END RSA" /tmp/hst.pem |cut -f 1 -d:)
 
 # Adding SSL certificate
-echo "(*) Adding SSL certificate to Hestia Control Panel..."
+echo "[ * ] Adding SSL certificate to Hestia Control Panel..."
 cd $HESTIA/ssl
 sed -n "1,${crt_end}p" /tmp/hst.pem > certificate.crt
 sed -n "$key_start,${key_end}p" /tmp/hst.pem > certificate.key
@@ -1211,7 +1212,7 @@ cp -f $HESTIA_INSTALL_DIR/ssl/dhparam.pem /etc/ssl
 #----------------------------------------------------------#
 
 if [ "$nginx" = 'yes' ]; then
-    echo "(*) Configuring NGINX..."
+    echo "[ * ] Configuring NGINX..."
     rm -f /etc/nginx/conf.d/*.conf
     cp -f $HESTIA_INSTALL_DIR/nginx/nginx.conf /etc/nginx/
     cp -f $HESTIA_INSTALL_DIR/nginx/status.conf /etc/nginx/conf.d/
@@ -1245,7 +1246,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$apache" = 'yes' ]; then
-    echo "(*) Configuring Apache Web Server..."
+    echo "[ * ] Configuring Apache Web Server..."
 
     mkdir -p /etc/apache2/conf.d
     mkdir -p /etc/apache2/conf.d/domains
@@ -1305,13 +1306,13 @@ if [ "$multiphp" = 'yes' ] ; then
     for v in "${multiphp_v[@]}"; do
         cp -r /etc/php/$v/ /root/hst_install_backups/php$v/
         rm -f /etc/php/$v/fpm/pool.d/*
-        echo "(*) Install PHP version $v..."
+        echo "[ * ] Install PHP version $v..."
         $HESTIA/bin/v-add-web-php "$v" > /dev/null 2>&1
     done
 fi
 
 if [ "$phpfpm" = 'yes' ]; then
-    echo "(*) Configuring PHP-FPM..."
+    echo "[ * ] Configuring PHP-FPM..."
     $HESTIA/bin/v-add-web-php "$fpm_v" > /dev/null 2>&1
     cp -f $HESTIA_INSTALL_DIR/php-fpm/www.conf /etc/php/$fpm_v/fpm/pool.d/www.conf
     update-rc.d php$fpm_v-fpm defaults > /dev/null 2>&1
@@ -1325,7 +1326,7 @@ fi
 #                     Configure PHP                        #
 #----------------------------------------------------------#
 
-echo "(*) Configuring PHP..."
+echo "[ * ] Configuring PHP..."
 ZONE=$(timedatectl > /dev/null 2>&1|grep Timezone|awk '{print $2}')
 if [ -z "$ZONE" ]; then
     ZONE='UTC'
@@ -1347,7 +1348,7 @@ chmod 755 /etc/cron.daily/php-session-cleanup
 #----------------------------------------------------------#
 
 if [ "$vsftpd" = 'yes' ]; then
-    echo "(*) Configuring Vsftpd server..."
+    echo "[ * ] Configuring Vsftpd server..."
     cp -f $HESTIA_INSTALL_DIR/vsftpd/vsftpd.conf /etc/
     touch /var/log/vsftpd.log
     chown root:adm /var/log/vsftpd.log
@@ -1367,7 +1368,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$proftpd" = 'yes' ]; then
-    echo "(*) Configuring ProFTPD server..."
+    echo "[ * ] Configuring ProFTPD server..."
     echo "127.0.0.1 $servername" >> /etc/hosts
     cp -f $HESTIA_INSTALL_DIR/proftpd/proftpd.conf /etc/proftpd/
     update-rc.d proftpd defaults > /dev/null 2>&1
@@ -1381,7 +1382,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$mysql" = 'yes' ]; then
-    echo "(*) Configuring MariaDB database server..."
+    echo "[ * ] Configuring MariaDB database server..."
     mycnf="my-small.cnf"
     if [ $memory -gt 1200000 ]; then
         mycnf="my-medium.cnf"
@@ -1427,7 +1428,7 @@ fi
 
 if [ "$mysql" = 'yes' ]; then
     # Display upgrade information
-    echo "(*) Installing phpMyAdmin version v$pma_v..."
+    echo "[ * ] Installing phpMyAdmin version v$pma_v..."
 
     # Download latest phpmyadmin release
     wget --quiet https://files.phpmyadmin.net/phpMyAdmin/$pma_v/phpMyAdmin-$pma_v-all-languages.tar.gz
@@ -1468,7 +1469,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$postgresql" = 'yes' ]; then
-    echo "(*) Configuring PostgreSQL database server..."
+    echo "[ * ] Configuring PostgreSQL database server..."
     ppass=$(gen_pass)
     cp -f $HESTIA_INSTALL_DIR/postgresql/pg_hba.conf /etc/postgresql/*/main/
     systemctl restart postgresql
@@ -1490,7 +1491,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$named" = 'yes' ]; then
-    echo "(*) Configuring Bind DNS server..."
+    echo "[ * ] Configuring Bind DNS server..."
     cp -f $HESTIA_INSTALL_DIR/bind/named.conf /etc/bind/
     cp -f $HESTIA_INSTALL_DIR/bind/named.conf.options /etc/bind/
     chown root:bind /etc/bind/named.conf
@@ -1527,7 +1528,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$exim" = 'yes' ]; then
-    echo "(*) Configuring Exim mail server..."
+    echo "[ * ] Configuring Exim mail server..."
     gpasswd -a Debian-exim mail > /dev/null 2>&1
     cp -f $HESTIA_INSTALL_DIR/exim/exim4.conf.template /etc/exim4/
     cp -f $HESTIA_INSTALL_DIR/exim/dnsbl.conf /etc/exim4/
@@ -1563,7 +1564,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$dovecot" = 'yes' ]; then
-    echo "(*) Configuring Dovecot POP/IMAP mail server..."
+    echo "[ * ] Configuring Dovecot POP/IMAP mail server..."
     gpasswd -a dovecot mail > /dev/null 2>&1
     cp -rf $HESTIA_INSTALL_DIR/dovecot /etc/
     cp -f $HESTIA_INSTALL_DIR/logrotate/dovecot /etc/logrotate.d/
@@ -1586,7 +1587,7 @@ if [ "$clamd" = 'yes' ]; then
     gpasswd -a clamav Debian-exim > /dev/null 2>&1
     cp -f $HESTIA_INSTALL_DIR/clamav/clamd.conf /etc/clamav/
     update-rc.d clamav-daemon defaults
-    echo -ne "(*) Installing ClamAV anti-virus definitions... "
+    echo -ne "[ * ] Installing ClamAV anti-virus definitions... "
     /usr/bin/freshclam >> $LOG &
     BACK_PID=$!
     spin_i=1
@@ -1605,7 +1606,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$spamd" = 'yes' ]; then
-    echo "(*) Configuring SpamAssassin..."
+    echo "[ * ] Configuring SpamAssassin..."
     update-rc.d spamassassin defaults > /dev/null 2>&1
     sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/spamassassin
     systemctl start spamassassin >> $LOG
@@ -1622,7 +1623,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$dovecot" = 'yes' ] && [ "$exim" = 'yes' ] && [ "$mysql" = 'yes' ]; then
-    echo "(*) Configuring Roundcube webmail client..."
+    echo "[ * ] Configuring Roundcube webmail client..."
     cp -f $HESTIA_INSTALL_DIR/roundcube/main.inc.php /etc/roundcube/config.inc.php
     cp -f $HESTIA_INSTALL_DIR/roundcube/db.inc.php /etc/roundcube/debian-db-roundcube.php
     cp -f $HESTIA_INSTALL_DIR/roundcube/config.inc.php /etc/roundcube/plugins/password/
@@ -1681,7 +1682,7 @@ fi
 #----------------------------------------------------------#
 
 if [ "$fail2ban" = 'yes' ]; then
-    echo "(*) Configuring fail2ban access monitor..."
+    echo "[ * ] Configuring fail2ban access monitor..."
     cp -rf $HESTIA_INSTALL_DIR/fail2ban /etc/
     if [ "$dovecot" = 'no' ]; then
         fline=$(cat /etc/fail2ban/jail.local |grep -n dovecot-iptables -A 2)
@@ -1852,7 +1853,7 @@ command="sudo $HESTIA/bin/v-update-sys-rrd"
 $HESTIA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command"
 
 # Enable automatic updates
-$HESTIA/bin/v-add-cron-hestia-autoupdate
+$HESTIA/bin/v-add-cron-hestia-autoupdate apt
 
 # Building initital rrd images
 $HESTIA/bin/v-update-sys-rrd
@@ -1869,7 +1870,7 @@ $HESTIA/bin/v-change-sys-port $port > /dev/null 2>&1
 $HESTIA/bin/v-change-sys-theme 'default'
 
 # Update remaining packages since repositories have changed
-echo -ne "(*) Installing remaining software updates..."
+echo -ne "[ * ] Installing remaining software updates..."
 apt-get -qq update
 apt-get -y upgrade >> $LOG &
 BACK_PID=$!
@@ -1886,8 +1887,8 @@ chown admin:admin $HESTIA/data/sessions
 #                  Configure File Manager                   #
 #----------------------------------------------------------#
 
-echo "(*) Configuring File Manager..."
-source $HESTIA_INSTALL_DIR/filemanager/install-fm.sh > /dev/null 2>&1
+echo "[ * ] Configuring File Manager..."
+$HESTIA/bin/v-add-sys-filemanager quiet
 
 
 #----------------------------------------------------------#
@@ -1949,7 +1950,7 @@ rm -f $tmpfile
 # Add welcome message to notification panel
 $HESTIA/bin/v-add-user-notification admin 'Welcome to Hestia Control Panel!' '<br>You are now ready to begin <a href="/add/user/">adding user accounts</a> and <a href="/add/web/">domains</a>. For help and assistance, view the <a href="https://docs.hestiacp.com/" target="_new">documentation</a> or visit our <a href="https://forum.hestiacp.com/" target="_new">user forum</a>.<br><br>Please report any bugs or issues via <a href="https://github.com/hestiacp/hestiacp/issues" target="_new"><i class="fab fa-github"></i> GitHub</a> or e-mail <a href="mailto:info@hestiacp.com?Subject="['$new_version'] Bug Report: ">info@hestiacp.com</a>.<br><br><b>Have a wonderful day!</b><br><br><i class="fas fa-heart status-icon red"></i> The Hestia Control Panel development team'
 
-echo "(!) IMPORTANT: You must logout or restart the server before continuing."
+echo "[ ! ] IMPORTANT: You must logout or restart the server before continuing."
 echo ""
 if [ "$interactive" = 'yes' ]; then
     echo -n " Do you want to reboot now? [Y/N] "

+ 31 - 19
install/upgrade/versions/latest.sh

@@ -53,7 +53,7 @@ fi
 
 # Add sury apache2 repository
 if [ "$WEB_SYSTEM" = "apache2" ] && [ ! -e "/etc/apt/sources.list.d/apache2.list" ]; then
-    echo "(*) Configuring sury.org Apache2 repository..."
+    echo "[ * ] Configuring sury.org Apache2 repository..."
 
     # Check OS and install related repository
     if [ -e "/etc/os-release" ]; then
@@ -72,7 +72,7 @@ fi
 
 # Roundcube fixes for PHP 7.4 compatibility
 if [ -d /usr/share/roundcube ]; then
-    echo "(*) Updating Roundcube configuration..."
+    echo "[ * ] Updating Roundcube configuration..."
     [ -f "/usr/share/roundcube/plugins/enigma/lib/enigma_ui.php" ] && sed -i 's/$identities, "\\n"/"\\n", $identities/g' /usr/share/roundcube/plugins/enigma/lib/enigma_ui.php
     [ -f "/usr/share/roundcube/program/lib/Roundcube/rcube_contacts.php" ] && sed -i 's/(array_keys($post_search), \x27|\x27)/(\x27|\x27, array_keys($post_search))/g' /usr/share/roundcube/program/lib/Roundcube/rcube_contacts.php
     [ -f "/usr/share/roundcube/program/lib/Roundcube/rcube_db.php" ] && sed -i 's/implode($name, \x27.\x27)/implode(\x27.\x27, $name)/g' /usr/share/roundcube/program/lib/Roundcube/rcube_db.php
@@ -90,13 +90,13 @@ fi
 
 # HELO support for multiple domains and IPs
 if [ -e "/etc/exim4/exim4.conf.template" ]; then
-    echo "(*) Updating exim4 configuration..."
+    echo "[ * ] Updating exim4 configuration..."
     sed -i 's|helo_data = ${primary_hostname}|helo_data = ${if exists {\/etc\/exim4\/mailhelo.conf}{${lookup{$sender_address_domain}lsearch*{\/etc\/exim4\/mailhelo.conf}{$value}{$primary_hostname}}}{$primary_hostname}}|g' /etc/exim4/exim4.conf.template
 fi
 
 # Add daily midnight cron
 if [ -z "$($BIN/v-list-cron-jobs admin | grep 'v-update-sys-queue daily')" ]; then
-    echo "(*) Updating cron jobs..."
+    echo "[ * ] Updating cron jobs..."
     command="sudo $BIN/v-update-sys-queue daily"
     $BIN/v-add-cron-job 'admin' '01' '00' '*' '*' '*' "$command"
 fi
@@ -115,7 +115,7 @@ fi
 
 # Add hestia-event.conf, if the server is running apache2
 if [ "$WEB_SYSTEM" = "apache2" ]; then
-    echo "(*) Updating Apache2 configuration..."
+    echo "[ * ] Updating Apache2 configuration..."
     # Cleanup
     rm --force /etc/apache2/mods-available/hestia-event.conf
     rm --force /etc/apache2/mods-enabled/hestia-event.conf
@@ -134,20 +134,26 @@ if [ "$WEB_SYSTEM" = "apache2" ]; then
     rm --force /etc/apache2/mods-enabled/status.conf # a2dismod will not remove the file if it isn't a symlink
 fi
 
-# Install Filegator FileManager during upgrade
-if [ ! -e "$HESTIA/web/fm/configuration.php" ]; then
-    echo "(*) Configuring File Manager..."
-    # Install the FileManager
-    source $HESTIA_INSTALL_DIR/filemanager/install-fm.sh > /dev/null 2>&1
-else 
-    echo "(*) Updating File Manager configuration..."
-    # Update configuration.php
-    cp -f $HESTIA_INSTALL_DIR/filemanager/filegator/configuration.php $HESTIA/web/fm/configuration.php
+# Install File Manager during upgrade if environment variable oesn't already exist and isn't set to false
+# so that we don't override preference
+FILE_MANAGER_CHECK=$(cat $HESTIA/conf/hestia.conf | grep "FILE_MANAGER='false'")
+if [ -z "$FILE_MANAGER_CHECK" ]; then
+    if [ ! -e "$HESTIA/web/fm/configuration.php" ]; then
+        echo "[ ! ] Installing File Manager..."
+        # Install the File Manager
+        $HESTIA/bin/v-add-sys-filemanager quiet
+    else 
+        echo "[ * ] Updating File Manager configuration..."
+        # Update configuration.php
+        cp -f $HESTIA_INSTALL_DIR/filemanager/filegator/configuration.php $HESTIA/web/fm/configuration.php
+        # Set environment variable for interface
+        $HESTIA/bin/v-change-sys-config-value 'FILE_MANAGER' 'true'
+    fi
 fi
 
 # Enable nginx module loading
 if [ -f "/etc/nginx/nginx.conf" ]; then
-    echo "(*) Updating NGINX configuration..."
+    echo "[ * ] Updating NGINX configuration..."
     if [ ! -d "/etc/nginx/modules-enabled" ]; then
         mkdir -p "/etc/nginx/modules-enabled"
     fi
@@ -158,7 +164,7 @@ if [ -f "/etc/nginx/nginx.conf" ]; then
 fi
 
 # Fix public_(s)html group ownership
-echo "(*) Updating public_(s)html ownership..."
+echo "[ * ] Updating public_(s)html ownership..."
 for user in $($HESTIA/bin/v-list-sys-users plain); do
     # skip users with missing home folder
     [[ -d /home/${user}/ ]] || continue
@@ -171,7 +177,7 @@ done
 
 # Fix phpMyAdmin blowfish_secret error message due to incorrect permissions
 if [ -e /var/lib/phpmyadmin/blowfish_secret.inc.php ]; then
-    echo "(*) Updating phpMyAdmin permissions..."
+    echo "[ * ] Updating phpMyAdmin permissions..."
     chmod 0644 /var/lib/phpmyadmin/blowfish_secret.inc.php
 fi
 
@@ -179,7 +185,7 @@ fi
 if [ -e "/var/lib/phpmyadmin" ]; then
 PMA_ALIAS_CHECK=$(cat $HESTIA/conf/hestia.conf | grep DB_PMA_ALIAS)
     if [ -z "$PMA_ALIAS_CHECK" ]; then
-        echo "(*) Updating phpMyAdmin alias..."
+        echo "[ * ] Updating phpMyAdmin alias..."
         $HESTIA/bin/v-change-sys-db-alias "pma" "phpmyadmin"
     fi
 fi
@@ -187,8 +193,14 @@ fi
 if [ -e "/var/lib/phppgadmin" ]; then
 PGA_ALIAS_CHECK=$(cat $HESTIA/conf/hestia.conf | grep DB_PGA_ALIAS)
     if [ -z "$PGA_ALIAS_CHECK" ]; then
-        echo "(*) Updating phpPgAdmin alias..."
+        echo "[ * ] Updating phpPgAdmin alias..."
         $HESTIA/bin/v-change-sys-db-alias "pga" "phppgadmin"
     fi
 fi
 
+# Ensure that backup compression level is correctly set
+GZIP_LVL_CHECK=$(cat $HESTIA/conf/hestia.conf | grep BACKUP_GZIP)
+if [ -z "$GZIP_LVL_CHECK" ]; then
+    echo "[ * ] Updating backup compression level variable..."
+    $BIN/v-change-sys-config-value "BACKUP_GZIP" '9'
+fi

+ 2 - 2
install/upgrade/versions/previous/1.0.1.sh

@@ -8,13 +8,13 @@
 
 # Ensure that users from previous releases are set to the correct stable release branch
 if [ ! -z "$RELEASE_BRANCH" ] && [ "$RELEASE_BRANCH" = "master" ] || [ "$RELEASE_BRANCH" = "develop" ]; then
-    echo "(*) Updating default release branch configuration..."
+    echo "[ * ] Updating default release branch configuration..."
     $HESTIA/bin/v-change-sys-config-value 'RELEASE_BRANCH' 'release'
 fi
 
 # Back up old template files and install the latest versions
 if [ -d $HESTIA/data/templates/ ]; then
-    echo "(*) Updating web templates to enable per-domain HSTS/OCSP SSL support..."
+    echo "[ * ] Updating web templates to enable per-domain HSTS/OCSP SSL support..."
     cp -rf $HESTIA/data/templates $HESTIA_BACKUP/templates/
     $HESTIA/bin/v-update-web-templates >/dev/null 2>&1
 fi

+ 12 - 17
install/upgrade/versions/previous/1.0.2.sh

@@ -7,7 +7,7 @@
 #######################################################################################
 
 # Replace dhparam 1024 with dhparam 4096
-echo "(*) Increasing Diffie-Hellman Parameter strength to 4096-bit..."
+echo "[ * ] Increasing Diffie-Hellman Parameter strength to 4096-bit..."
 if [ -e /etc/ssl/dhparam.pem ]; then
     mv /etc/ssl/dhparam.pem $HESTIA_BACKUP/conf/
 fi
@@ -16,20 +16,20 @@ chmod 600 /etc/ssl/dhparam.pem
 
 # Enhance Vsftpd security
 if [ "$FTP_SYSTEM" = "vsftpd" ]; then
-    echo "(*) Hardening Vsftpd SSL configuration..."
+    echo "[ * ] Hardening Vsftpd SSL configuration..."
     cp -f /etc/vsftpd.conf $HESTIA_BACKUP/conf/
     sed -i "s|ssl_tlsv1=YES|ssl_tlsv1=NO|g" /etc/vsftpd.conf
 fi
 
 # Enhance Dovecot security
 if [ "$IMAP_SYSTEM" = "dovecot" ]; then
-    echo "(*) Hardening Dovecot SSL configuration..."
+    echo "[ * ] Hardening Dovecot SSL configuration..."
     mv /etc/dovecot/conf.d/10-ssl.conf $HESTIA_BACKUP/conf/
     cp -f $HESTIA/install/deb/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/
 fi
 
 # Update DNS resolvers in hestia-nginx's configuration
-echo "(*) Updating DNS resolvers for Hestia Internal Web Server..."
+echo "[ * ] Updating DNS resolvers for Hestia Internal Web Server..."
 dns_resolver=$(cat /etc/resolv.conf | grep -i '^nameserver' | cut -d ' ' -f2 | tr '\r\n' ' ' | xargs)
 for ip in $dns_resolver; do
     if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
@@ -43,33 +43,28 @@ fi
 # Remove Webalizer and set AWStats as default
 WEBALIZER_CHECK=$(cat $HESTIA/conf/hestia.conf | grep webalizer)
 if [ ! -z "$WEBALIZER_CHECK" ]; then
-    echo "(*) Removing Webalizer and setting AWStats as default web statistics backend..."
-    apt purge webalizer -y > /dev/null 2>&1
-    if [ -d "$HESTIA/data/templates/web/webalizer" ]; then
-        rm -rf $HESTIA/data/templates/web/webalizer
-    fi
-    if [ -d "/var/www/webalizer" ]; then
-        rm -rf /var/www/webalizer
-    fi
+    echo "[ * ] Set awstats as default web statistics backend..."
     $HESTIA/bin/v-change-sys-config-value 'STATS_SYSTEM' 'awstats'
 fi
 
 # Remove old hestia.conf files from Apache & NGINX if they exist
 if [ -f "/etc/apache2/conf.d/hestia.conf" ]; then
-    echo "(*) Removing old Apache configuration file from previous version of Hestia Control Panel..."
+    echo "[ * ] Removing old Apache configuration file from previous version of Hestia Control Panel..."
     rm -f /etc/apache2/conf.d/hestia.conf
 fi
 if [ -f "/etc/nginx/conf.d/hestia.conf" ]; then
-    echo "(*) Removing old NGINX configuration file from previous version of Hestia Control Panel..."
+    echo "[ * ] Removing old NGINX configuration file from previous version of Hestia Control Panel..."
     rm -f /etc/nginx/conf.d/hestia.conf
 fi
 
 # Update webmail templates to enable OCSP/SSL stapling
 if [ ! -z "$IMAP_SYSTEM" ]; then
-    echo "(*) Enabling OCSP stapling support for webmail services..."
+    echo "[ * ] Enabling OCSP stapling support for webmail services..."
     $BIN/v-update-mail-templates > /dev/null 2>&1
 fi 
 
 # Enhance webmail security
-cp -f /etc/nginx/conf.d/webmail.inc $HESTIA_BACKUP/conf/
-sed -i "s/config|temp|logs/README.md|config|temp|logs|bin|SQL|INSTALL|LICENSE|CHANGELOG|UPGRADING/g" /etc/nginx/conf.d/webmail.inc
+if [ -e "/etc/nginx/conf.d/webmail.inc" ]; then
+    cp -f /etc/nginx/conf.d/webmail.inc $HESTIA_BACKUP/conf/
+    sed -i "s/config|temp|logs/README.md|config|temp|logs|bin|SQL|INSTALL|LICENSE|CHANGELOG|UPGRADING/g" /etc/nginx/conf.d/webmail.inc
+fi

+ 13 - 13
install/upgrade/versions/previous/1.0.4.sh

@@ -7,16 +7,16 @@
 #######################################################################################
 
 # Add php-imagick package to existing version...
-php_versions=$(ls /etc/php/*/fpm -d 2>/dev/null |wc -l)
-if [ "$php_versions" -gt 1 ]; then
-    echo "(*) Install PHP Imageqick..."
-    software="php-imagick"
-    for v in $(ls /etc/php/); do
-        if [ ! -d "/etc/php/$v/fpm/pool.d/" ]; then
-            continue
-        fi
-        software="$software php$v-imagick"
-    done
-fi
-apt -qq update
-apt -qq install $software -y
+#php_versions=$(ls /etc/php/*/fpm -d 2>/dev/null |wc -l)
+#if [ "$php_versions" -gt 1 ]; then
+#    echo "[ * ] Install PHP Imageqick..."
+#    software="php-imagick"
+#    for v in $(ls /etc/php/); do
+#        if [ ! -d "/etc/php/$v/fpm/pool.d/" ]; then
+#            continue
+#        fi
+#        software="$software php$v-imagick"
+#    done
+#fi
+#apt -qq update
+#apt -qq install $software -y

+ 18 - 18
install/upgrade/versions/previous/1.00.0-190618.sh

@@ -8,25 +8,25 @@
 
 # Add webmail alias variable to system configuration if non-existent
 if [ -z "$WEBMAIL_ALIAS" ]; then
-    echo "(*) Updating webmail alias configuration..."
+    echo "[ * ] Updating webmail alias configuration..."
     $HESTIA/bin/v-change-sys-config-value 'WEBMAIL_ALIAS' "webmail"
 fi
 
 # Update Apache and Nginx configuration to support new file structure
 if [ -f /etc/apache2/apache.conf ]; then
-    echo "(*) Updating Apache configuration..."
+    echo "[ * ] Updating Apache configuration..."
     mv  /etc/apache2/apache.conf $HESTIA_BACKUP/conf/
     cp -f $HESTIA_INSTALL_DIR/apache2/apache.conf /etc/apache2/apache.conf
 fi
 if [ -f /etc/nginx/nginx.conf ]; then
-    echo "(*) Updating NGINX configuration..."
+    echo "[ * ] Updating NGINX configuration..."
     mv  /etc/nginx/nginx.conf $HESTIA_BACKUP/conf/
     cp -f $HESTIA_INSTALL_DIR/nginx/nginx.conf /etc/nginx/nginx.conf
 fi
 
 # Generate dhparam
 if [ ! -e /etc/ssl/dhparam.pem ]; then
-    echo "(*) Enabling HTTPS Strict Transport Security (HSTS) support..."
+    echo "[ * ] Enabling HTTPS Strict Transport Security (HSTS) support..."
     mv  /etc/nginx/nginx.conf $HESTIA_BACKUP/conf/
     cp -f $HESTIA_INSTALL_DIR/nginx/nginx.conf /etc/nginx/
 
@@ -40,13 +40,13 @@ fi
 
 # Back up default package and install latest version
 if [ -d $HESTIA/data/packages/ ]; then
-    echo "(*) Replacing default packages..."
+    echo "[ * ] Replacing default packages..."
     cp -f $HESTIA/data/packages/default.pkg $HESTIA_BACKUP/packages/
 fi
 
 # Back up old template files and install the latest versions
 if [ -d $HESTIA/data/templates/ ]; then
-    echo "(*) Replacing default Web, DNS, and Mail templates..."
+    echo "[ * ] Replacing default Web, DNS, and Mail templates..."
     cp -rf $HESTIA/data/templates $HESTIA_BACKUP/templates/
     $HESTIA/bin/v-update-web-templates >/dev/null 2>&1
     $HESTIA/bin/v-update-dns-templates >/dev/null 2>&1
@@ -105,7 +105,7 @@ if [ -d "/etc/roundcube" ]; then
 fi
 
 # Add a general group for normal users created by Hestia
-echo "(*) Verifying ACLs and hardening user permissions..."
+echo "[ * ] Verifying ACLs and hardening user permissions..."
 if [ -z "$(grep ^hestia-users: /etc/group)" ]; then
     groupadd --system "hestia-users"
 fi
@@ -132,7 +132,7 @@ for ipaddr in $(ls /usr/local/hestia/data/ips/ 2>/dev/null); do
     rm -f $web_conf
 
     if [ "$WEB_SYSTEM" = "apache2" ]; then
-        echo "(*) Adding unassigned hosts configuration to Apache..."
+        echo "[ * ] Adding unassigned hosts configuration to Apache..."
         if [ -z "$(/usr/sbin/apache2 -v | grep Apache/2.4)" ]; then
             echo "NameVirtualHost $ipaddr:$WEB_PORT" >  $web_conf
         fi
@@ -155,7 +155,7 @@ for ipaddr in $(ls /usr/local/hestia/data/ips/ 2>/dev/null); do
     fi
 
     if [ "$PROXY_SYSTEM" = "nginx" ]; then
-        echo "(*) Adding unassigned hosts configuration to Nginx..."
+        echo "[ * ] Adding unassigned hosts configuration to Nginx..."
         cat $WEBTPL/$PROXY_SYSTEM/proxy_ip.tpl |\
         sed -e "s/%ip%/$ipaddr/g" \
             -e "s/%web_port%/$WEB_PORT/g" \
@@ -175,7 +175,7 @@ chmod 755 /etc/cron.daily/php-session-cleanup
 # Fix empty pool error message for MultiPHP
 php_versions=$(ls /etc/php/*/fpm -d 2>/dev/null |wc -l)
 if [ "$php_versions" -gt 1 ]; then
-    echo "(*) Updating Multi-PHP configuration..."
+    echo "[ * ] Updating Multi-PHP configuration..."
     for v in $(ls /etc/php/); do
         if [ ! -d "/etc/php/$v/fpm/pool.d/" ]; then
             continue
@@ -187,7 +187,7 @@ if [ "$php_versions" -gt 1 ]; then
 fi
 
 # Set Purge to false in Roundcube configuration - https://goo.gl/3Nja3u
-echo "(*) Updating Roundcube configuration..."
+echo "[ * ] Updating Roundcube configuration..."
 if [ -f /etc/roundcube/config.inc.php ]; then
     sed -i "s/\['flag_for_deletion'] = 'Purge';/\['flag_for_deletion'] = false;/gI" /etc/roundcube/config.inc.php
 fi
@@ -200,16 +200,16 @@ fi
 
 # Remove old OS-specific installation files if they exist to free up space
 if [ -d $HESTIA/install/ubuntu ]; then
-    echo "(*) Removing old HestiaCP installation files for Ubuntu..."
+    echo "[ * ] Removing old HestiaCP installation files for Ubuntu..."
     rm -rf $HESTIA/install/ubuntu
 fi
 if [ -d $HESTIA/install/debian ]; then
-    echo "(*) Removing old HestiaCP installation files for Debian..."
+    echo "[ * ] Removing old HestiaCP installation files for Debian..."
     rm -rf $HESTIA/install/debian
 fi
 
 # Fix Dovecot configuration
-echo "(*) Updating Dovecot IMAP/POP server configuration..."
+echo "[ * ] Updating Dovecot IMAP/POP server configuration..."
 if [ -f /etc/dovecot/conf.d/15-mailboxes.conf ]; then
     mv  /etc/dovecot/conf.d/15-mailboxes.conf $HESTIA_BACKUP/conf/
 fi
@@ -223,7 +223,7 @@ fi
 
 # Fix Exim configuration
 if [ -f /etc/exim4/exim4.conf.template ]; then
-    echo "(*) Updating Exim SMTP server configuration..."
+    echo "[ * ] Updating Exim SMTP server configuration..."
     mv  /etc/exim4/exim4.conf.template $HESTIA_BACKUP/conf/
     cp -f $HESTIA_INSTALL_DIR/exim/exim4.conf.template /etc/exim4/exim4.conf.template
     # Reconfigure spam filter and virus scanning
@@ -239,7 +239,7 @@ fi
 # Add IMAP system variable to configuration if Dovecot is installed
 if [ -z "$IMAP_SYSTEM" ]; then
     if [ -f /usr/bin/dovecot ]; then
-        echo "(*) Adding missing IMAP_SYSTEM variable to hestia.conf..."
+        echo "[ * ] Adding missing IMAP_SYSTEM variable to hestia.conf..."
         echo "IMAP_SYSTEM = 'dovecot'" >> $HESTIA/conf/hestia.conf
     fi
 fi
@@ -250,7 +250,7 @@ $HESTIA/bin/v-add-sys-sftp-jail
 # Enable SFTP subsystem for SSH
 sftp_subsys_enabled=$(grep -iE "^#?.*subsystem.+(sftp )?sftp-server" /etc/ssh/sshd_config)
 if [ ! -z "$sftp_subsys_enabled" ]; then
-    echo "(*) Updating SFTP subsystem configuration..."
+    echo "[ * ] Updating SFTP subsystem configuration..."
     sed -i -E "s/^#?.*Subsystem.+(sftp )?sftp-server/Subsystem sftp internal-sftp/g" /etc/ssh/sshd_config
     systemctl restart ssh
 fi
@@ -263,7 +263,7 @@ for user in `ls /usr/local/hestia/data/users/`; do
     for domain in $($BIN/v-list-web-domains $user plain |cut -f 1); do
         obskey=$(get_object_value 'web' 'DOMAIN' "$domain" '$FORCESSL')
         if [ ! -z "$obskey" ]; then
-            echo "(*) Fixing HTTP-to-HTTPS redirection for $domain"
+            echo "[ * ] Fixing HTTP-to-HTTPS redirection for $domain"
             update_object_value 'web' 'DOMAIN' "$domain" '$FORCESSL' ''
 
             # copy value under new key name

+ 13 - 13
install/upgrade/versions/previous/1.1.0.sh

@@ -8,13 +8,13 @@
 
 # Set default theme
 if [ -z $THEME ]; then
-    echo "(*) Enabling support for themes..."
+    echo "[ * ] Enabling support for themes..."
     $BIN/v-change-sys-theme 'default'
 fi
 
 # Reduce SSH login grace time
 if [ -e /etc/ssh/sshd_config ]; then
-    echo "(*) Hardening SSH daemon configuration..."
+    echo "[ * ] Hardening SSH daemon configuration..."
     sed -i "s/LoginGraceTime 2m/LoginGraceTime 1m/g" /etc/ssh/sshd_config
     sed -i "s/#LoginGraceTime 2m/LoginGraceTime 1m/g" /etc/ssh/sshd_config
 fi
@@ -28,7 +28,7 @@ fi
 
 # Enable OCSP SSL stapling and harden nginx configuration for roundcube
 if [ ! -z "$IMAP_SYSTEM" ]; then
-    echo "(*) Hardening security of Roundcube webmail..."
+    echo "[ * ] Hardening security of Roundcube webmail..."
     $BIN/v-update-mail-templates > /dev/null 2>&1
     if [ -e /etc/nginx/conf.d/webmail.inc ]; then
         cp -f /etc/nginx/conf.d/webmail.inc $HESTIA_BACKUP/conf/
@@ -46,7 +46,7 @@ fi
 if [ -e "/etc/clamav/clamd.conf" ]; then
     clamd_conf_update_check=$(grep DetectBrokenExecutables /etc/clamav/clamd.conf)
     if [ ! -z "$clamd_conf_update_check" ]; then
-        echo "(*) Updating ClamAV configuration..."
+        echo "[ * ] Updating ClamAV configuration..."
         sed -i '/DetectBrokenExecutables/d' /etc/clamav/clamd.conf
     fi
 fi
@@ -58,7 +58,7 @@ fi
 
 # Use exim4 server hostname instead of mail domain and remove hardcoded mail prefix
 if [ ! -z "$MAIL_SYSTEM" ]; then
-    echo "(*) Updating exim configuration..."
+    echo "[ * ] Updating exim configuration..."
     if cat /etc/exim4/exim4.conf.template | grep -q 'helo_data = mail.${sender_address_domain}'; then
         sed -i 's/helo_data = mail.${sender_address_domain}/helo_data = ${primary_hostname}/g' /etc/exim4/exim4.conf.template
     fi
@@ -85,7 +85,7 @@ if [ -e "/etc/cron.d/hestia-sftp" ]; then
 fi
 
 # Create default writeable folders for all users
-echo "(*) Updating default writable folders for all users..."
+echo "[ * ] Updating default writable folders for all users..."
 for user in $($HESTIA/bin/v-list-sys-users plain); do
     mkdir -p \
         $HOMEDIR/$user/.cache \
@@ -113,14 +113,14 @@ fi
 
 # Update Office 365/Microsoft 365 DNS template
 if [ -e "$HESTIA/data/templates/dns/office365.tpl" ]; then
-    echo "(*) Updating DNS template for Office 365..."
+    echo "[ * ] Updating DNS template for Office 365..."
     cp -f $HESTIA/install/deb/templates/dns/office365.tpl $HESTIA/data/templates/dns/office365.tpl
 fi
 
 # Ensure that backup compression level is correctly set
 GZIP_LVL_CHECK=$(cat $HESTIA/conf/hestia.conf | grep BACKUP_GZIP)
 if [ -z "$GZIP_LVL_CHECK" ]; then
-    echo "(*) Updating backup compression level variable..."
+    echo "[ * ] Updating backup compression level variable..."
     $BIN/v-change-sys-config-value "BACKUP_GZIP" '9'
 fi
 
@@ -140,7 +140,7 @@ fi
 
 # Installing postgresql repo
 if [ -e "/etc/postgresql" ]; then
-    echo "(*) Enabling native PostgreSQL APT repository..."
+    echo "[ * ] Enabling native PostgreSQL APT repository..."
     osname="$(cat /etc/os-release | grep "^ID\=" | sed "s/ID\=//g")"
     if [ "$osname" = "ubuntu" ]; then
         codename="$(lsb_release -s -c)"
@@ -157,7 +157,7 @@ fi
 if [ -e "/etc/mysql/my.cnf" ]; then
     mysql_local_infile_check=$(grep local-infile /etc/mysql/my.cnf)
     if [ -z "$mysql_local_infile_check" ]; then
-        echo "(*) Hardening MySQL configuration..."
+        echo "[ * ] Hardening MySQL configuration..."
         sed -i '/symbolic-links\=0/a\local-infile=0' /etc/mysql/my.cnf
     fi
 fi
@@ -166,7 +166,7 @@ fi
 if [ -e "/etc/nginx/nginx.conf" ]; then
     nginx_tls_check=$(grep TLSv1.1 /etc/nginx/nginx.conf)
     if [ ! -z "$nginx_tls_check" ]; then
-        echo "(*) Updating nginx security settings - disabling TLS v1.1..."
+        echo "[ * ] Updating nginx security settings - disabling TLS v1.1..."
         sed -i 's/TLSv1.1 //g' /etc/nginx/nginx.conf
     fi
 fi
@@ -195,7 +195,7 @@ chown root:root /var/log/$WEB_SYSTEM/domains/$WEBMAIL_ALIAS* > /dev/null 2>&1
 
 # Enable IMAP/POP3 quota information
 if [ "$IMAP_SYSTEM" = "dovecot" ]; then
-    echo "(*) Enabling IMAP quota information reporting..."
+    echo "[ * ] Enabling IMAP quota information reporting..."
     if [ -e /etc/dovecot/conf.d/20-pop3.conf ]; then
         cp -f $HESTIA/install/deb/dovecot/conf.d/20-pop3.conf /etc/dovecot/conf.d/20-pop3.conf
     fi
@@ -210,7 +210,7 @@ fi
 # Trigger multiphp legacy migration script
 num_php_versions=$(ls -d /etc/php/*/fpm/pool.d 2>/dev/null |wc -l)
 if [ "$num_php_versions" -gt 1 ] && [ -z "$WEB_BACKEND" ]; then
-    echo "(*) Enabling modular Multi-PHP backend..."
+    echo "[ * ] Enabling modular Multi-PHP backend..."
     cp -rf $HESTIA/data/templates/web $HESTIA_BACKUP/templates/web
     bash $HESTIA/install/upgrade/manual/migrate_multiphp.sh > /dev/null 2>&1
 fi

+ 2 - 2
install/upgrade/versions/previous/1.1.1.sh

@@ -8,13 +8,13 @@
 
 # Remove 5s delay when sending mail through exim4
 if [ -e "/etc/exim4/exim4.conf.template" ]; then
-    echo "(*) Updating exim4 configuration..."
+    echo "[ * ] Updating exim4 configuration..."
     sed -i "s|rfc1413_query_timeout = 5s|rfc1413_query_timeout = 0s|g" /etc/exim4/exim4.conf.template
 fi
 
 # Fix phpMyAdmin blowfish and tmp directory issues
 if [ -e "/usr/share/phpmyadmin/libraries/vendor_config.php" ]; then
-    echo "(*) Updating phpMyAdmin configuration..."
+    echo "[ * ] Updating phpMyAdmin configuration..."
     sed -i "s|define('CONFIG_DIR', ROOT_PATH);|define('CONFIG_DIR', '/etc/phpmyadmin/');|" /usr/share/phpmyadmin/libraries/vendor_config.php
     sed -i "s|define('TEMP_DIR', ROOT_PATH . 'tmp/');|define('TEMP_DIR', '/var/lib/phpmyadmin/tmp/');|" /usr/share/phpmyadmin/libraries/vendor_config.php
 fi

+ 1 - 1
src/deb/hestia/postinst

@@ -41,7 +41,7 @@ update_php_templates
 upgrade_phpmyadmin
 
 # Set new version number in hestia.conf
-upgrade_set_version
+upgrade_set_version $new_version
 
 # Perform account and domain rebuild to ensure configuration files are correct
 upgrade_rebuild_users

+ 2 - 2
src/hst_bootstrap_install.sh

@@ -15,7 +15,7 @@ wget https://raw.githubusercontent.com/$fork/hestiacp/$branch/src/hst_autocompil
 
 # Execute compiler and build hestia core package
 chmod +x hst_autocompile.sh
-./hst_autocompile.sh --hestia master no
+./hst_autocompile.sh --hestia $branch no
 
 # Execute Hestia Control Panel installer with default dummy options for testing
-bash hst-install-$os.sh -f -y no -e admin@test.local -p P@ssw0rd -s hestia-$branch-$os.test.local --with-debs /tmp/hestiacp-src/debs
+bash hst-install-$os.sh -f -y no -e admin@test.local -p P@ssw0rd -s hestia-$os.test.local --with-debs /tmp/hestiacp-src/debs

+ 22 - 5
web/css/src/styles.css

@@ -1511,7 +1511,19 @@ div.l-content > div.l-separator:nth-of-type(4) {
 }
 
 .lang-ru .l-select {
-  width: 199px;
+  width: 170px;
+}
+
+.body-firewall.lang-ru .l-select {
+  max-width: 125px;
+}
+
+.body-firewall.lang-ru .l-select {
+  max-width: 125px;
+}
+
+.body-firewall.lang-es .l-select {
+  max-width: 135px;
 }
 
 .l-select:after {
@@ -2003,7 +2015,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
 
 .l-unit__stat-col--right {
   float: left;
-  max-width: 152px;
+  max-width: 170px;
 }
 
 .l-unit-toolbar__col--left {
@@ -2755,7 +2767,7 @@ a.vst-text:active b{
   border-bottom: none;
   color: #326b9b;
   font-size: 10px;
-  padding: 2px 2px 0;
+  padding: 2px !important;
   text-decoration: none;
   text-transform: uppercase;
   font-size: 0.85em !important;
@@ -2837,7 +2849,7 @@ a.vst-text:active b{
 }
 
 .hide-password {
-  color: #2361a1;
+  color: #aaa;
   margin-left: -36px;
   padding-left: 3px;
   z-index: 1;
@@ -3019,8 +3031,9 @@ a.button.cancel {
   cursor: pointer;
   position: absolute;
   margin-left: -32px;
-  margin-top: 13px;
+  margin-top: 16px;
   z-index: 1;
+  font-size: 0.8rem;
 }
 
 .optional {
@@ -3915,6 +3928,10 @@ form#vstobjects.suspended {
   font-size: 1.05em;
 }
 
+.lang-es .userlist-email {
+  width: 270px;
+}
+
 @media screen and (max-width: 950px) {
   .helper-container {
     display: none;

File diff suppressed because it is too large
+ 0 - 0
web/css/styles.min.css


BIN
web/images/toggle_password.png


BIN
web/images/unlim.png


+ 104 - 11
web/inc/i18n/ar.php

@@ -3,6 +3,7 @@
  * Hestia language file
  * HestiaCP (info@hestiacp.com)
  * orwah
+ * Arabian
  */
 
 $LANG['ar'] = array(
@@ -697,17 +698,6 @@ $LANG['ar'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'الاختصارات الهمت من قبل ال GNU الرائعة<a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'مفتاح الترخيص',
-    'Enter License Key' => 'أدخل مفتاح الترخيص',
-    'Buy Licence' => 'شراء ترخيص',
-    'Buy Lifetime License' => 'شراء ترخيص مدى الحياة',
-    'Disable and Cancel Licence' => 'تعطيل وإلغاء الترخيص',
-    'Licence Activated' => 'الترخيص تم تفعيله',
-    'Licence Deactivated' => 'الترخيص تم تعطيله',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'تقييد المستخدمين بحيث لايتمكنون من استخدام SSH ولايستطيعون الدخول ٍوى إلى الملفات الخاصة بهم.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'استعراض, نسخ, تحرير, فتح, واسترجاع كل ملفات موقعك باستخدام مدير الملفات.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'هذا البرنامج تجاري وليس مجاني, تحتاج لشراء مفتاح ترخيص لتفعيله.',
-
     'Minutes' => 'دقائق',
     'Hourly' => 'ساعي',
     'Run Command' => 'أمر التنفيذ',
@@ -763,4 +753,107 @@ $LANG['ar'] = array(
     'MainDomain' => 'النطاق الرئيسي',
     'SubDomain' => 'النطاق الفرعي (الجزء الاول الذي يضاف إلى النطاق الرئيسي)',
     'Add Sub Domain' => 'إضافة نطاق فرعي',
+
+    'Please wait while php is installed or removed' => 'يرجى الانتظار حتى تكتمل العملية ولا تقم بتحديث الصفحة.',
+    'Avoid adding web domains on admin account' => 'يُنصح بشدة <a href="/add/user/"> بإنشاء حساب مستخدم قياسي </a> قبل إضافة نطاقات الويب إلى الخادم بسبب الامتيازات المتزايدة التي يمتلكها حساب المشرف ومخاطر الأمان المحتملة.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'يجب ألا يكون حقل SSH فارغًا',
+    'SSH KEY is invalid' => 'مفتاح SSH غير صالح',
+    'SSH KEY already exists' => 'مفتاح SSH موجود بالفعل',
+    'SSH KEY Added' => 'تمت إضافة مفتاح SSH',
+    'Add SSH Key' => 'تمت إضافة مفتاح SSH',
+    'SSH KEY' => 'مفتاح SSH',    
+    'DELETE_KEY_CONFIRM' => 'هل أنت متأكد أنك تريد حذف مفتاح SSH %s?',
+    'SSH_ID' => 'معرف SSH',
+    'Manage SSH keys' => 'إدارة مفاتيح SSH',
+ 
+    //Header 
+    'Fm' => 'الملفات',
+    //PHP Cli
+    'PHP CLI Version' => 'إصدار سطر أوامر PHP',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'قائمة IP جديدة',
+    'Ip List Name' => 'اسم قائمة IP',
+    'Data Source' => 'مصدر البيانات',
+    'Ip Version' => 'إصدار IP',
+    'Autoupdate' => 'التحديث التلقائي',
+    'Add IP list' => 'أضف قائمة IP',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'تم إنشاء قائمة IP بنجاح',
+    'DELETE_IPSET_CONFIRMATION' => 'هل أنت متأكد أنك تريد حذف قائمة IP %s?',
+    '1 Ipset list' => '1 قائمة IP',
+    '%s Ipset lists' => '%s قوائم IP',
+    'There are currently no IP lists defined.' => 'لا توجد قوائم IP محددة حاليًا.',
+    'list ipset' => 'إدارة قوائم IP',
+    
+    //Backup
+    'File Name' => 'اسم الملف',
+    'Size' => 'بحجم',
+    'Runtime' => 'المدة الزمنية',
+    //Logs
+    'Refresh' => 'تحديث',
+    'Time' => 'زمن',
+    'Value' => 'القيمة',
+    
+    //DNS 
+    'default' => 'إفتراضي',
+    '1 DNS zone' => '1 منطقة DNS',
+    '%s DNS zones' => '%s مناطق DNS',
+    'Add Record' => 'قم بإضافة سجل',
+    //user
+    '1 user account' => 'حساب مستخدم واحد',
+    '%s user accounts' => '%s حسابات المستخدمين',
+    //database
+    '1 SQL database' => '1 قاعدة بيانات SQL',
+    '%s SQL databases' => '%s قواعد بيانات SQL',
+    //mail
+    '1 mail domain' => '1 مجال البريد',
+    '%s mail domains' => '%s مجالات البريد',
+    //web
+    '1 web domain' => '1 مجال الويب',
+    '%s web domains' => '%s مجالات الويب',
+    
+    //rrd
+    'Bandwidth Usage' => 'استخدام عرض النطاق الترددي',
+    
+    //reset
+    'Forgot Password' => 'لقد نسيت كلمة المرور',
+    //web
+    'Quick Install App' => 'ثبّت تطبيقًا',
+    //webapp 
+    'version' => 'الإصدار',
+    'Setup' => 'اقامة',
+    //Server
+    'Restart' => 'اعادة البدء',
+    'Mail Server' => 'خادم البريد',
+    'Enabled multi PHP versions' => 'إصدارات PHP الممكنة',
+    'Service' => 'اسم الخدمة',
+    'Description' => 'وصف',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'تعيين كلغة افتراضية لجميع المستخدمين',
+    
+    //2FA 
+    'Forgot token' => 'فتح الحساب',
+    '2FA Token' => 'PIN OTP',
+    '2FA Reset successfully' => 'تم إيقاف المصادقة الثنائية لحسابك الآن.<br><br>يمكنك الآن المتابعة لتسجيل الدخول.',
+    'Reset 2FA' => 'فتح الحساب',
+    '2FA Reset Code' => 'رمز استعادة الحساب',
+    'Invalid or missing token' => 'رمز تالف أو مفقود',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'هل أنت متأكد أنك تريد حذف السجلات؟',
+
+    'Force SSL/HTTPS' => 'تمكين إعادة التوجيه التلقائي من HTTP إلى HTTPS',
+    'Enable SSL HSTS' => 'تمكين أمان النقل الصارم HTTP (HSTS) <a href="https://ar.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'توثيق ذو عاملين',
+    'Enable 2FA' => 'تمكين المصادقة الثنائية',
+    'Please scan the code below in your 2FA application:' => 'لإنهاء إعداد المصادقة ذات العاملين ، امسح رمز الاستجابة السريعة أدناه <br /> باستخدام تطبيق المصادقة (مثل <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'رمز استرداد الحساب:',
 );

+ 109 - 11
web/inc/i18n/az.php

@@ -2,8 +2,9 @@
 /**
  * Hestia Azerbaijani language file
  * 21.05.2018 Orkhan Oder (orkhan@our.az)
-
+ * Azerbaijani / Azerbaijan
  */
+ 
 $LANG['az'] = array(
     'Packages'  => 'Paketlər',
     'IP'  => 'IP',
@@ -671,16 +672,6 @@ $LANG['az'] = array(
     'Select All Files' => 'Bütün faylları seçin',
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'qısayollar mükəmməl fayl idarəçisi <a href="https://www.midnight-commander.org/">Midnight Commander</a> fayl idarəçisindən alınmışdır',
-    'Licence Key' => 'Lisenziya açarı',
-    'Enter License Key' => 'Lisenziya açarını daxil edin',
-    'Buy Licence' => 'Lisenziya alın',
-    'Buy Lifetime License' => 'Ömür boyu lisenziyası alın',
-    'Disable and Cancel Licence' => 'Lisenziyanı söndürün və ləğv edin',
-    'Licence Activated' => 'Lisenziya aktivdir',
-    'Licence Deactivated' => 'Lisenziya ləğv edilib',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'İstifadəçilə SSH yalnız öz əsas kataloqlarına daxil ola bilərlər.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Baxış, kopyalama, redaktə, tamfunksional fayl meneceri vasitəsilə veb domendə olan faylların baxışı və ixracı.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Bu kommersiya moduludur. Ondan istifadə etmək üçün lisenziya açarını əldə etməlisiniz',
     'Minutes' => 'Dəqiqəlik',
     'Hourly' => 'Saatlıq',
     'Run Command' => 'Əmri aktivləşdir',
@@ -722,4 +713,111 @@ $LANG['az'] = array(
     'Do not use encryption' => 'Şifrələnməni istifadə etmə',
     'maximum characters length, including prefix' => 'Simvolların maksimal uzunlu %s, prfiks daxil',
     'Email Credentials' => 'E-poçt hüquqları',
+
+
+    'Theme' => 'Görünüş',
+
+    'Operating System' => 'Əməliyyat sistemi',
+    'Please wait while php is installed or removed' => 'Xahiş edirəm proses başa çatana qədər gözləyin və səhifəni yeniləməyin.',
+    'Avoid adding web domains on admin account' => 'Qəti şəkildə tövsiyə olunur <a href="/add/user/">standart istifadəçi hesabı yaratmaq</a> İdarəetmə hesabının sahib olduğu üstünlüklər və potensial təhlükəsizlik riskləri səbəbiylə veb domenləri serverə əlavə etməzdən əvvəl.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Sahə SSH Açarı boş olmamalıdır',
+    'SSH KEY is invalid' => 'SSH açarı etibarsızdır',
+    'SSH KEY already exists' => 'SSH açarı artıq mövcuddur',
+    'SSH KEY Added' => 'SSH açarı əlavə edildi',
+    'Add SSH Key' => 'SSH düyməsini əlavə edin',
+    'SSH KEY' => 'SSH açarı',    
+    'DELETE_KEY_CONFIRM' => 'SSH düyməsini silmək istədiyinizə əminsiniz %s?',
+    'SSH_ID' => 'SSH şəxsiyyəti',
+    'Manage SSH keys' => 'SSH düymələrini idarə edin',
+ 
+    //Header 
+    'Fm' => 'Fayllar',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI versiyası',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'Yeni IP siyahısı',
+    'Ip List Name' => 'IP siyahısı adı',
+    'Data Source' => 'Verilənlər mənbəyi',
+    'Ip Version' => 'IP versiyası',
+    'Autoupdate' => 'Avtomatik yeniləmə',
+    'Add IP list' => 'IP siyahısını əlavə edin',
+    'BLACKLIST' => 'QARABAQ',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP siyahısı uğurla yaradılmışdır',
+    'DELETE_IPSET_CONFIRMATION' => 'IP siyahısını silmək istədiyinizə əminsiniz %s?',
+    '1 Ipset list' => '1 IP siyahısı',
+    '%s Ipset lists' => '%s IP siyahıları',
+    'There are currently no IP lists defined.' => 'Hal-hazırda müəyyən edilmiş IP siyahıları yoxdur.',
+    'list ipset' => 'IP siyahılarını idarə et',
+    
+    //Backup
+    'File Name' => 'Fayl adı',
+    'Size' => 'Ölçüsü',
+    'Runtime' => 'İş vaxtı',
+    //Logs
+    'Refresh' => 'təzələmək',
+    'Time' => 'Vaxt',
+    'Value' => 'Dəyər',
+    
+    //DNS 
+    'default' => 'defolt',
+    '1 DNS zone' => '1 DNS zonası',
+    '%s DNS zones' => '%s DNS zonaları',
+    'Add Record' => 'Qeyd əlavə edin',
+    //user
+    '1 user account' => '1 istifadəçi hesabı',
+    '%s user accounts' => '%s istifadəçi hesabları',
+    //database
+    '1 SQL database' => '1 SQL verilənlər bazası',
+    '%s SQL databases' => '%s SQL verilənlər bazası',
+    //mail
+    '1 mail domain' => '1 poçt domeni',
+    '%s mail domains' => '%s poçt sahələri',
+    //web
+    '1 web domain' => '1 veb domeni',
+    '%s web domains' => '%s veb domenləri',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bant genişliyi istifadəsi',
+    
+    //reset
+    'Forgot Password' => 'Şifrəni unutmusunuz',
+    //web
+    'Quick Install App' => 'Tez Quraşdırma Tətbiqi',
+    //webapp 
+    'version' => 'versiya',
+    'Setup' => 'Qurmaq',
+    //Server
+    'Restart' => 'Yenidən başlamaq',
+    'Mail Server' => 'e-poçt serveri',
+    'Enabled multi PHP versions' => 'Effektiv PHP versiyaları',
+    'Service' => 'Xidmət',
+    'Description' => 'Təsvir',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Bütün istifadəçilər üçün standart dil olaraq təyin edin',
+    
+    //2FA 
+    'Forgot token' => 'Hesabı açın',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Hesabınız üçün iki amil identifikasiyası artıq söndürüldü. <br> <br> İndi girməyə davam edə bilərsiniz.',
+    'Reset 2FA' => 'Hesabı açın',
+    '2FA Reset Code' => 'Hesabın bərpası koduHesab bərpa proqramı',
+    'Invalid or missing token' => 'Etibarsız və ya çatışmayan işarədir',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Günlükləri silmək istədiyinizə əminsiniz?',
+
+    'Force SSL/HTTPS' => 'Avtomatik HTTP-dən HTTPS yönləndirməsini aktiv edin',
+    'Enable SSL HSTS' => 'HTTP sərt nəqliyyat təhlükəsizliyini (HSTS) aktivləşdirin <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'İki faktorlu Doğrulama',
+    'Enable 2FA' => 'İki faktorlu identifikasiyanı aktivləşdirin',
+    'Please scan the code below in your 2FA application:' => 'İki faktorlu identifikasiyanı qurmağı başa çatdırmaq üçün aşağıdakı qr kodu yoxlayın <br /> bir identifikasiya tətbiqindən istifadə edərəkp (kimi <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Hesab bərpa kodu:',
 );

+ 105 - 10
web/inc/i18n/bg.php

@@ -2,6 +2,7 @@
 /**
  * Hestia language file
  * Kronz (apaunovski@gmail.com) and loderx
+ * Bulgarian
  */
 
 $LANG['bg'] = array(
@@ -689,16 +690,7 @@ $LANG['bg'] = array(
     'Select All Files' => 'Избери всички файлове',
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> файлов мениджър' =>
     'преките пътища са вдъхновени от великолепният GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> файлов мениджър',
-    'Licence Key' => 'Лицензен ключ',
-    'Enter License Key' => 'Въведете лицензен ключ',
-    'Buy Licence' => 'Купете лиценз',
-    'Buy Lifetime License' => 'Купете доживотен лиценз',
-    'Disable and Cancel Licence' => 'Деактивирайте и отменете лиценз',
-    'Licence Activated' => 'Лицензът е активиран',
-    'Licence Deactivated' => 'Лицензът е деактивиран',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Ограничавайте потребителите от използването на SSH, давайки им достъп единствено до личните им директории.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Разглеждайте, копирайте, редактирайте, показвайте и извличайте всички уеб домейн файлове, използвайки напълно функциониращия ни файлов мениджър.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Това е комерсиален модул, за чиито ползване е нужно да поръчате лицензионен ключ.',
+
     'Minutes' => 'Минути',
     'Hourly' => 'Всеки час',
     'Daily' => 'Всеки ден ',
@@ -751,5 +743,108 @@ $LANG['bg'] = array(
 
     'Theme' => 'Външния вид',
     'Operating System' => 'Операционна система',
+
+    'Please wait while php is installed or removed' => 'Моля, изчакайте, докато процесът приключи и не опреснявайте страницата.',
+    'Avoid adding web domains on admin account' => 'Препоръчително е <a href="/add/user/"> да създадете стандартен потребителски акаунт </a> преди да добавите уеб домейни към сървъра поради увеличените привилегии, които администраторският акаунт притежава и потенциалните рискове за сигурността.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Полето SSH ключ не трябва да бъде празно',
+    'SSH KEY is invalid' => 'SSH ключът е невалиден',
+    'SSH KEY already exists' => 'SSH ключ вече съществува',
+    'SSH KEY Added' => 'SSH ключът е добавен',
+    'Add SSH Key' => 'Добавете SSH ключ',
+    'SSH KEY' => 'SSH ключ',    
+    'DELETE_KEY_CONFIRM' => 'Сигурни ли сте, че искате да изтриете SSH ключ %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Управление на SSH ключовете',
+ 
+    //Header 
+    'Fm' => 'файлове',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI версия',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'Нов IP списък',
+    'Ip List Name' => 'Име на IP списъка',
+    'Data Source' => 'Източник на данни',
+    'Ip Version' => 'IP версия',
+    'Autoupdate' => 'Автоматично актуализиране',
+    'Add IP list' => 'Добавяне на IP списък',
+    'BLACKLIST' => 'черен списък',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP списъкът е създаден успешно',
+    'DELETE_IPSET_CONFIRMATION' => 'Сигурни ли сте, че искате да изтриете IP списъка %s?',
+    '1 Ipset list' => '1 IP списък',
+    '%s Ipset lists' => '%s IP списъци',
+    'There are currently no IP lists defined.' => 'В момента няма дефинирани IP списъци.',
+    'list ipset' => 'Управление на IP списъци',
+    
+    //Backup
+    'File Name' => 'Име на файл',
+    'Size' => 'размер',
+    'Runtime' => 'Времетраене',
+    //Logs
+    'Refresh' => 'Обновяване',
+    'Time' => 'път',
+    'Value' => 'стойност',
+    
+    //DNS 
+    'default' => 'отменянето',
+    '1 DNS zone' => '1 DNS зона',
+    '%s DNS zones' => '%s DNS зони',
+    'Add Record' => 'Добавяне на запис',
+    //user
+    '1 user account' => '1 потребителски акаунт',
+    '%s user accounts' => '%s потребителски акаунти',
+    //database
+    '1 SQL database' => '1 SQL база данни',
+    '%s SQL databases' => '%s SQL бази данни',
+    //mail
+    '1 mail domain' => '1 домейн по пощата',
+    '%s mail domains' => '%s имейли за поща',
+    //web
+    '1 web domain' => '1 уеб домейн',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Използване на лентата',
+    
+    //reset
+    'Forgot Password' => 'Забравена парола',
+    //web
+    'Quick Install App' => 'Приложение за бързо инсталиране',
+    //webapp 
+    'version' => 'версия',
+    'Setup' => 'Настройвам',
+    //Server
+    'Restart' => 'Рестартирам',
+    'Mail Server' => 'Сървър за електронна поща',
+    'Enabled multi PHP versions' => 'Активирани PHP версии',
+    'Service' => 'Обслужване',
+    'Description' => 'описание',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Задаване като език по подразбиране за всички потребители',
+    
+    //2FA 
+    'Forgot token' => 'Отключи акаунта',
+    '2FA Token' => 'OTP ПИН',
+    '2FA Reset successfully' => 'Двуфакторното удостоверяване вече е изключено за вашия акаунт. <br> <br> Вече можете да продължите да влизате.',
+    'Reset 2FA' => 'Отключи акаунта',
+    '2FA Reset Code' => 'Код за възстановяване на акаунта',
+    'Invalid or missing token' => 'Невалиден или липсващ маркер',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Сигурни ли сте, че искате да изтриете дневниците?',
+
+    'Force SSL/HTTPS' => 'Активиране на автоматично пренасочване от HTTP към HTTPS',
+    'Enable SSL HSTS' => 'Активиране на HTTP стриктна транспортна сигурност (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Двуфакторна автентификация',
+    'Enable 2FA' => 'Активиране на двуфакторна автентификация',
+    'Please scan the code below in your 2FA application:' => 'за да завършите настройката на двуфакторната автентификация, сканирайте QR кода по-долу <br /> с помощта на приложение за удостоверяване (като <a href = "https://play.google.com/store/apps/details?id=com"). google.android.apps.authenticator2 "> Google Удостоверител </a>):',
+    '2FA Reset Code:' => 'Код за възстановяване на акаунта:',
 );
 

+ 103 - 11
web/inc/i18n/bs.php

@@ -696,17 +696,6 @@ $LANG['bs'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licencni ključ',
-    'Enter License Key' => 'Unesi ključ licence',
-    'Buy Licence' => 'Kupi licencu',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licenca je aktivirana',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minuta',
     'Hourly' => 'Sahati',
     'Run Command' => 'Pokreni komandu',
@@ -756,4 +745,107 @@ $LANG['bs'] = array(
 
     'Theme' => 'Izgled',
     'Operating System' => 'Operativni sistem',
+
+    'Please wait while php is installed or removed' => 'Pričekajte dok se postupak ne završi i ne osvježite stranicu.',
+    'Avoid adding web domains on admin account' => 'Preporučuje se <a href="/add/user/"> kreiranje standardnog korisničkog naloga </a> prije dodavanja web domena na poslužitelj zbog povećanih privilegija koje administrativni račun posjeduje i potencijalnih sigurnosnih rizika.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Polje SSH ključ ne smije biti prazno',
+    'SSH KEY is invalid' => 'SSH ključ nije važeći',
+    'SSH KEY already exists' => 'SSH ključ već postoji',
+    'SSH KEY Added' => 'SSH ključ je dodan',
+    'Add SSH Key' => 'Dodajte SSH ključ',
+    'SSH KEY' => 'SSH ključ',    
+    'DELETE_KEY_CONFIRM' => 'Jeste li sigurni da želite izbrisati SSH ključ %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Upravljajte SSH ključevima',
+ 
+    //Header 
+    'Fm' => 'Datoteke',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI verzija',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'Nova IP lista',
+    'Ip List Name' => 'Naziv IP liste',
+    'Data Source' => 'Izvor podataka',
+    'Ip Version' => 'IP verzija',
+    'Autoupdate' => 'Automatsko ažuriranje',
+    'Add IP list' => 'Dodajte IP listu',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP lista je kreirana uspješno',
+    'DELETE_IPSET_CONFIRMATION' => 'Jeste li sigurni da želite izbrisati IP listu %s?',
+    '1 Ipset list' => '1 IP lista',
+    '%s Ipset lists' => '%s IP liste',
+    'There are currently no IP lists defined.' => 'Trenutno nisu definisane IP liste.',
+    'list ipset' => 'Upravljanje IP spiskovima',
+    
+    //Backup
+    'File Name' => 'Ime dokumenta',
+    'Size' => 'Veličina',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Osvježiti',
+    'Time' => 'Vreme',
+    'Value' => 'Vrijednost',
+    
+    //DNS 
+    'default' => 'zadani',
+    '1 DNS zone' => '1 DNS zona',
+    '%s DNS zones' => '%s DNS zone',
+    'Add Record' => 'Dodaj zapis',
+    //user
+    '1 user account' => '1 korisnički račun',
+    '%s user accounts' => '%s korisnički računi',
+    //database
+    '1 SQL database' => '1 SQL baza podataka',
+    '%s SQL databases' => '%s SQL baze podataka',
+    //mail
+    '1 mail domain' => '1 domenu pošte',
+    '%s mail domains' => '%s domene pošte',
+    //web
+    '1 web domain' => '1 web domena',
+    '%s web domains' => '%s web domene',
+    
+    //rrd
+    'Bandwidth Usage' => 'Upotreba propusne širine',
+    
+    //reset
+    'Forgot Password' => 'Zaboravili ste lozinku',
+    //web
+    'Quick Install App' => 'Brza instalacija aplikacije',
+    //webapp 
+    'version' => 'verzija',
+    'Setup' => 'Postaviti',
+    //Server
+    'Restart' => 'Ponovo pokreni',
+    'Mail Server' => 'server za poštu',
+    'Enabled multi PHP versions' => 'Omogućene verzije PHP-a',
+    'Service' => 'Usluga',
+    'Description' => 'Opis',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Postavite kao zadani jezik za sve korisnike',
+    
+    //2FA 
+    'Forgot token' => 'Otključaj račun',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Dvofaktorska provjera autentičnosti sada je isključena za vaš račun. <br> <br> Sada možete nastaviti s prijavom.',
+    'Reset 2FA' => 'Otključaj račun',
+    '2FA Reset Code' => 'Kôd za povrat računa',
+    'Invalid or missing token' => 'Nevažeći ili nedostajući token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Jeste li sigurni da želite izbrisati zapisnike?',
+
+    'Force SSL/HTTPS' => 'Omogući automatsko preusmjeravanje s HTTP na HTTPS',
+    'Enable SSL HSTS' => 'Omogući HTTP strogu sigurnost prijevoza (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"> <i class = "fas fa-pitanje-krug"> </i> </a>',
+
+    '2 Factor Authentication' => 'Dvofaktorska provjera autentičnosti',
+    'Enable 2FA' => 'Omogući dvofaktorsku provjeru identiteta',
+    'Please scan the code below in your 2FA application:' => 'Da biste dovršili postavljanje dvofaktorske provjere autentičnosti, skenirajte QR kôd ispod <br /> pomoću autentifikacijske aplikacije (poput <a href = "https://play.google.com/store/apps/details?id=com" google.android.apps.authenticator2 "> Google Autentičar </a>):',
+    '2FA Reset Code:' => 'Kôd za povrat računa:',
 );

+ 103 - 11
web/inc/i18n/cn.php

@@ -708,17 +708,6 @@ $LANG['cn'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     '快捷键的灵感来自华丽的 GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> 文件管理器',
 
-    'Licence Key' => '许可密匙',
-    'Enter License Key' => '输入许可密匙',
-    'Buy Licence' => '购买许可',
-    'Buy Lifetime License' => '购买终身许可',
-    'Disable and Cancel Licence' => '停用并取消许可',
-    'Licence Activated' => '许可已激活',
-    'Licence Deactivated' => '许可已停用',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => '限制用户,对他们禁用 SSH 且只能访问自己的主目录。',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => '功能全面的文件管理器,浏览,复制,编辑,查看和检索你的 Web 文件。',
-    'This is a commercial module, you would need to purchace license key to enable it.' => '这是商业模块,请购买许可密匙来启用它。',
-
     'Minutes' => '分钟',
     'Hourly' => '小时',
     'Run Command' => '运行指令于',
@@ -769,4 +758,107 @@ $LANG['cn'] = array(
 
     'Theme' => '主题',
     'Operating System' => '操作系统',
+
+    'Please wait while php is installed or removed' => '请等待该过程完成,并且不要刷新页面。',
+    'Avoid adding web domains on admin account' => '强烈建议在将Web域添加到服务器之前,先<a href="/add/user/">创建标准用户帐户</a>,因为管理员帐户拥有的特权增加,并且存在潜在的安全风险。',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => '字段SSH密钥不能为空',
+    'SSH KEY is invalid' => 'SSH密钥无效',
+    'SSH KEY already exists' => 'SSH密钥已存在',
+    'SSH KEY Added' => 'SSH密钥已添加',
+    'Add SSH Key' => '添加SSH密钥',
+    'SSH KEY' => 'SSH密钥',    
+    'DELETE_KEY_CONFIRM' => '确定要删除SSH密钥 %s?',
+    'SSH_ID' => 'SSH帐号',
+    'Manage SSH keys' => '管理SSH密钥',
+ 
+    //Header 
+    'Fm' => '档案',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP命令行版本',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => '新IP清单',
+    'Ip List Name' => 'IP列表名称',
+    'Data Source' => '数据源e',
+    'Ip Version' => 'IP版本',
+    'Autoupdate' => '自动更新',
+    'Add IP list' => '添加IP列表',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP列表创建成功',
+    'DELETE_IPSET_CONFIRMATION' => '您确定要删除IP列表吗 %s?',
+    '1 Ipset list' => '1个IP清单',
+    '%s Ipset lists' => '%s IP清单',
+    'There are currently no IP lists defined.' => '当前没有定义IP列表。',
+    'list ipset' => '管理IP清单',
+    
+    //Backup
+    'File Name' => '文档名称',
+    'Size' => '尺寸',
+    'Runtime' => '持续时间',
+    //Logs
+    'Refresh' => '刷新',
+    'Time' => '时间',
+    'Value' => '值',
+    
+    //DNS 
+    'default' => '默认',
+    '1 DNS zone' => '1 DNS区域',
+    '%s DNS zones' => '%s DNS区域',
+    'Add Record' => '添加记录',
+    //user
+    '1 user account' => '1 用户帐号',
+    '%s user accounts' => '%s 用户帐号',
+    //database
+    '1 SQL database' => '1 SQL数据库',
+    '%s SQL databases' => '%s SQL数据库',
+    //mail
+    '1 mail domain' => '1 邮件域',
+    '%s mail domains' => '%s 邮件域',
+    //web
+    '1 web domain' => '1 网络域',
+    '%s web domains' => '%s 网络域',
+    
+    //rrd
+    'Bandwidth Usage' => '带宽使用',
+    
+    //reset
+    'Forgot Password' => '忘记密码',
+    //web
+    'Quick Install App' => '安装软件',
+    //webapp 
+    'version' => '版',
+    'Setup' => '建立',
+    //Server
+    'Restart' => '建立',
+    'Mail Server' => '邮件服务器',
+    'Enabled multi PHP versions' => '启用的PHP版本',
+    'Service' => '服务',
+    'Description' => '描述',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia控制面板',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => '设置为所有用户的默认语言',
+    
+    //2FA 
+    'Forgot token' => '解锁账户',
+    '2FA Token' => 'OTP密码',
+    '2FA Reset successfully' => '您的帐户的两因素身份验证已关闭。<br><br>您现在可以继续登录。',
+    'Reset 2FA' => '解锁账户',
+    '2FA Reset Code' => '帐户恢复码',
+    'Invalid or missing token' => '令牌无效或丢失',
+
+    'DELETE_LOGS_CONFIRMATION'  => '您确定要删除日志吗?',
+
+    'Force SSL/HTTPS' => '启用自动HTTP到HTTPS重定向',
+    'Enable SSL HSTS' => '启用HTTP严格传输安全性(HSTS) <a href="https://cn.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => '两因素验证',
+    'Enable 2FA' => '启用两因素身份验证',
+    'Please scan the code below in your 2FA application:' => '要完成两因素身份验证的设置,请扫描以下QR码<br />使用身份验证应用程序,例如 <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google身份验证器</a>):',
+    '2FA Reset Code:' => '帐户恢复代码:',
 );

+ 103 - 11
web/inc/i18n/cz.php

@@ -697,17 +697,6 @@ $LANG['cz'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licence Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy Licence',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licence Activated',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Hourly',
     'Run Command' => 'Run Command',
@@ -757,4 +746,107 @@ $LANG['cz'] = array(
 
     'Theme' => 'Vzhled',
     'Operating System' => 'Operační systém',
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s?',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 103 - 11
web/inc/i18n/da.php

@@ -698,17 +698,6 @@ $LANG['da'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licence Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy Licence',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licence Activated',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Hourly',
     'Run Command' => 'Run Command',
@@ -758,4 +747,107 @@ $LANG['da'] = array(
 
     'Theme' => 'Udseende',
     'Operating System' => 'Operativsystem',
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s?',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 5 - 16
web/inc/i18n/de.php

@@ -9,7 +9,7 @@ $LANG['de'] = array(
     'IP'  => 'Netzwerk',
     'Graphs'  => 'Leistungsgrafiken',
     'Statistics'  => 'Statistiken',
-    'Log'  => 'Logs',
+    'Log'  => 'Protokoll',
     'Server'  => 'Server',
     'Services'  => 'Dienste',
     'Firewall' => 'Firewall',
@@ -699,17 +699,6 @@ $LANG['de'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licence Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy Licence',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licence Activated',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minuten',
     'Hourly' => 'Stunden',
     'Run Command' => 'Ausführen',
@@ -765,7 +754,7 @@ $LANG['de'] = array(
     'Theme' => 'aussehen',
     'Operating System' => 'Betriebssystem',
 
-    'Please wait while php is installed or removed' => 'Bitte warten Sie, bis der Vorgang abgeschlossen ist, und aktualisieren Sie die Seite nicht.',
+    'Please wait while php is installed or removed' => 'Das Speichern von Änderungen kann einige Minuten dauern. Bitte warten Sie, bis der Vorgang abgeschlossen ist, und aktualisieren Sie die Seite nicht.',
     'Avoid adding web domains on admin account' => 'Es wird dringend empfohlen, <a href="/add/user/">ein normales Benutzerkonto</a> zu erstellen, bevor Sie dem Server Webdomänen hinzufügen, da das Administratorkonto über erhöhte Berechtigungen und potenzielle Sicherheitsrisiken verfügt.',
     
     //SSH Key
@@ -851,10 +840,10 @@ $LANG['de'] = array(
     'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Als Standardsprache für alle Benutzer festlegen',
     
     //2FA 
-    'Forgot token' => 'Token vergessen',
+    'Forgot token' => 'Konto entsperren',
     '2FA Token' => 'OTP PIN',
-    '2FA Reset successfully' => '2FA Token wurde mit Erfolg zurückgesetzt. Sie können sich jetzt erneut anmelden',
-    'Reset 2FA' => '2FA zurücksetzen',
+    '2FA Reset successfully' => 'Die Zwei-Faktor-Authentifizierung ist jetzt für Ihr Konto deaktiviert.<br><br>Sie können sich jetzt erneut anmelden',
+    'Reset 2FA' => 'Konto entsperren',
     '2FA Reset Code' => 'Kontowiederherstellungscode',
     'Invalid or missing token' => 'Ungültiger oder fehlender Kontowiederherstellungscode',  
 );

+ 131 - 39
web/inc/i18n/el.php

@@ -8,7 +8,7 @@
 
 $LANG['el'] = array(
     'Packages'  => 'Πακέτα',
-    'IP'  => 'IP',
+    'IP'  => 'Δίκτυο',
     'Graphs'  => 'Γραφήματα',
     'Statistics'  => 'Στατιστικά',
     'Log'  =>  'Αρχείο',
@@ -45,11 +45,11 @@ $LANG['el'] = array(
     'no notifications'  => 'Δεν υπάρχουν ειδοποιήσεις',
 
     'Add User'  => 'Προσθέστε χρήστη',
-    'Add Domain'  => 'Προσθέστε domain',
-    'Add Web Domain'  => 'Προσθέστε Web Domain',
-    'Add DNS Domain'  => 'Προσθέστε DNS Domain',
+    'Add Domain'  => 'Προσθέστε πεδίο ορισμού',
+    'Add Web Domain'  => 'Προσθέστε Web πεδίο ορισμού',
+    'Add DNS Domain'  => 'Προσθέστε DNS πεδίο ορισμού',
     'Add DNS Record'  => 'Προσθέστε Εγγραφή DNS',
-    'Add Mail Domain'  => 'Προσθέστε Mail Domain',
+    'Add Mail Domain'  => 'Προσθέστε Mail πεδίο ορισμού',
     'Add Mail Account'  => 'Προσθέστε Λογαριασμό Mail',
     'Add Database'  => 'Προσθέστε Βάση Δεδομένων',
     'Add Cron Job'  => 'Προσθέστε Cron Job',
@@ -95,7 +95,7 @@ $LANG['el'] = array(
     'list accounts'  => 'εμφάνιση %s λογαριασμών',
     'add account'  => 'προσθήκη λογαριασμού',
     'open webmail'  => 'άνοιγμα webmail',
-    'list fail2ban' => 'εμφάνιση fail2ban',
+    'list fail2ban' => 'Διαχείριση αποκλεισμένων IP',
     'open %s'  => 'άνοιγμα %s',
     'download'  => 'λήψη',
     'restore'  => 'επαναφορά',
@@ -115,14 +115,14 @@ $LANG['el'] = array(
 
     'Adding User'  => 'Προσθήκη Χρήστη',
     'Editing User'  => 'Επεξεργασία Χρήστη',
-    'Adding Domain'  => 'Προσθήκη Domain',
-    'Editing Domain'  => 'Επεξεργασία Domain',
-    'Adding DNS Domain'  => 'Προσθήκη DNS Domain',
-    'Editing DNS Domain'  => 'Επεξεργασία DNS Domain',
+    'Adding Domain'  => 'Προσθήκη πεδίο ορισμού',
+    'Editing Domain'  => 'Επεξεργασία πεδίο ορισμού',
+    'Adding DNS Domain'  => 'Προσθήκη DNS πεδίο ορισμού',
+    'Editing DNS Domain'  => 'Επεξεργασία DNS πεδίο ορισμού',
     'Adding DNS Record'  => 'Προσθήκη Εγγραφής DNS',
     'Editing DNS Record'  => 'Επεξεργασία Εγγραφής DNS',
-    'Adding Mail Domain'  => 'Προσθήκη Mail Domain',
-    'Editing Mail Domain'  => 'Επεξεργασία Mail Domain',
+    'Adding Mail Domain'  => 'Προσθήκη Mail πεδίο ορισμού',
+    'Editing Mail Domain'  => 'Επεξεργασία Mail πεδίο ορισμού',
     'Adding Mail Account'  => 'Προσθήκη Λογαριασμού Mail',
     'Editing Mail Account'  => 'Επεξεργασία Λογαριασμού Mail',
     'Adding database'  => 'Προσθήκη database',
@@ -164,7 +164,7 @@ $LANG['el'] = array(
     'minutes'  => 'λεπτά',
     'month'  => 'μήνας',
     'package'  => 'πακέτο',
-    'Bandwidth'  => 'Bandwidth',
+    'Bandwidth'  => 'εύρος ζώνης',
     'Disk'  => 'Δίσκος',
     'Web'  => 'Web',
     'Mail'  => 'Mail',
@@ -290,7 +290,7 @@ $LANG['el'] = array(
     'Send login credentials to email address'  => 'αποστολή των διαπιστευτηρίων εισόδου στην διεύθυνση ηλεκτρονικού ταχυδρομείου',
     'Default Template'  => 'Προεπιλεγμένο Template',
     'Default Name Servers'  => 'Προεπιλεγμένοι Name Servers',
-    'Domain'  => 'Domain',
+    'Domain'  => 'πεδίο ορισμού',
     'DNS Support'  => 'Υποστήριξη DNS',
     'Mail Support'  => 'Υποστήριξη Mail',
     'Advanced options'  => 'Προχωρημένες επιλογές',
@@ -582,8 +582,8 @@ $LANG['el'] = array(
     'Web Config Editor' => 'Web Config Editor',
     'Template Manager' => 'Template Manager',
     'Backup Migration Manager' => 'Backup Migration Manager',
-    'FileManager' => 'FileManager',
-    'show: CPU / MEM / NET / DISK' => 'show: CPU / MEM / NET / DISK',
+    'FileManager' => 'Αρχεία',
+    'show: CPU / MEM / NET / DISK' => 'Προβολή πρόσθετων λεπτομερειών',
 
     'sort by' => 'ταξινόμηση κατά',
     'Date' => 'Ημερομηνία',
@@ -592,7 +592,7 @@ $LANG['el'] = array(
 
     'save to favorites' => 'Αποθηκεύστε στα αγαπημένα',
 
-    'File Manager' => 'File Manager',
+    'File Manager' => 'Αρχεία',
     'size' => 'size',
     'date' => 'date',
     'name' => 'name',
@@ -698,21 +698,10 @@ $LANG['el'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licence Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy Licence',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licence Activated',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Λεπτά',
     'Hourly' => 'Hourly',
-    'Run Command' => 'Run Command',
-    'every month' => 'every month',
+    'Run Command' => 'Εκτελέστε την εντολή',
+    'every month' => 'κάθε μήνα',
     'every odd month' => 'every odd month',
     'every even month' => 'every even month',
     'every day' => 'κάθε μέρα',
@@ -732,7 +721,7 @@ $LANG['el'] = array(
     'every minute' => 'κάθε λεπτό',
     'every two minutes' => 'κάθε δύο λεπτά',
     'every' => 'κάθε',
-    'Generate' => 'Generate',
+    'Generate' => 'δημιουργήσει',
 
     'awstats' => 'awstats',
 
@@ -745,17 +734,120 @@ $LANG['el'] = array(
     'PUB_KEY' => 'PUB_KEY',
     'ISSUER' => 'ISSUER',
 
-    'Use server hostname' => 'Use server hostname',
-    'Use domain hostname' => 'Use domain hostname',
-    'Use STARTTLS' => 'Use STARTTLS',
-    'Use SSL / TLS' => 'Use SSL / TLS',
-    'No encryption' => 'No encryption',
-    'Do not use encryption' => 'Do not use encryption',
+    'Use server hostname' => 'Χρήση ονόματος κεντρικού υπολογιστή διακομιστή',
+    'Use domain hostname' => 'Χρήση ονόματος κεντρικού υπολογιστή τομέα',
+    'Use STARTTLS' => 'Χρήση STARTTLS',
+    'Use SSL / TLS' => 'Χρήση SSL / TLS',
+    'No encryption' => 'Χωρίς κρυπτογράφηση',
+    'Do not use encryption' => 'Να μην χρησιμοποιείται κρυπτογράφηση',
 
-    'maximum characters length, including prefix' => 'maximum %s characters length, including prefix',
+    'maximum characters length, including prefix' => 'μέγιστο μήκος χαρακτήρων %s, συμπεριλαμβανομένου του προθέματος',
 
-    'Email Credentials' => 'Email Credentials',
+    'Email Credentials' => 'Διαπιστευτήρια ηλεκτρονικού ταχυδρομείου',
 
     'Theme' => 'Εμφάνιση',
     'Operating System' => 'Λειτουργικό σύστημα',
+
+    'Please wait while php is installed or removed' => 'Περιμένετε μέχρι να ολοκληρωθεί η διαδικασία και μην ανανεώσετε τη σελίδα.',
+    'Avoid adding web domains on admin account' => '<a href="/add/user/"> Δημιουργήστε έναν τυπικό λογαριασμό χρήστη </a> προτού προσθέσετε ενότητες ιστού στον διακομιστή λόγω αυξημένων δικαιωμάτων λογαριασμού διαχειριστή και πιθανών κινδύνων ασφαλείας.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Το κλειδί πεδίου SSH δεν πρέπει να είναι κενό',
+    'SSH KEY is invalid' => 'Το κλειδί SSH δεν είναι έγκυρο',
+    'SSH KEY already exists' => 'Το κλειδί SSH υπάρχει ήδη',
+    'SSH KEY Added' => 'Προστέθηκε κλειδί SSH',
+    'Add SSH Key' => 'Προσθήκη κλειδιού SSH',
+    'SSH KEY' => 'Κλειδί SSH',    
+    'DELETE_KEY_CONFIRM' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε το κλειδί SSH%s?',
+    'SSH_ID' => 'Αναγνωριστικό SSH',
+    'Manage SSH keys' => 'Προβολή κλειδιών SSH',
+ 
+    //Header 
+    'Fm' => 'Αρχεία',
+    //PHP Cli
+    'PHP CLI Version' => 'Έκδοση γραμμής εντολών PHP',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'Νέα λίστα IP',
+    'Ip List Name' => 'Όνομα λίστας IP',
+    'Data Source' => 'Πηγή δεδομένων',
+    'Ip Version' => 'Έκδοση IP',
+    'Autoupdate' => 'Αυτόματη ενημέρωση',
+    'Add IP list' => 'Προσθήκη λίστας IP',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'Η λίστα IP δημιουργήθηκε με επιτυχία',
+    'DELETE_IPSET_CONFIRMATION' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε τη λίστα IP %s?',
+    '1 Ipset list' => '1 λίστα IP',
+    '%s Ipset lists' => '%s Λίστες IP',
+    'There are currently no IP lists defined.' => 'Προς το παρόν δεν έχουν καθοριστεί λίστες IP.',
+    'list ipset' => 'Διαχείριση λιστών IP',
+    
+    //Backup
+    'File Name' => 'Ονομα αρχείου',
+    'Size' => 'Μέγεθος',
+    'Runtime' => 'Χρόνος εκτέλεσης',
+    //Logs
+    'Refresh' => 'Φρεσκάρω',
+    'Time' => 'χρόνος',
+    'Value' => 'Ρεκόρ',
+    
+    //DNS 
+    'default' => 'Προκαθορισμένο',
+    '1 DNS zone' => '1 Ζώνη DNS',
+    '%s DNS zones' => '%s Ζώνες DNS',
+    'Add Record' => 'Προσθήκη εγγραφής',
+    //user
+    '1 user account' => '1 λογαριασμός χρήστη',
+    '%s user accounts' => '%s λογαριασμοί χρηστών',
+    //database
+    '1 SQL database' => '1 Βάση δεδομένων SQL',
+    '%s SQL databases' => '%s Βάσεις δεδομένων SQL',
+    //mail
+    '1 mail domain' => '1 τομέας αλληλογραφίας',
+    '%s mail domains' => '%s τομείς αλληλογραφίας',
+    //web
+    '1 web domain' => '1 τομέας web',
+    '%s web domains' => '%s τομείς web',
+    
+    //rrd
+    'Bandwidth Usage' => 'Χρήση εύρους ζώνης',
+    
+    //reset
+    'Forgot Password' => 'Ξεχάσατε τον κωδικό πρόσβασης',
+    //web
+    'Quick Install App' => 'Εγκατάσταση εφαρμογής',
+    //webapp 
+    'version' => 'Έκδοση',
+    'Setup' => 'στήσετε',
+    //Server
+    'Restart' => 'επανεκκίνηση',
+    'Mail Server' => 'Διακομιστής αλληλογραφίας',
+    'Enabled multi PHP versions' => 'Ενεργοποιημένες εκδόσεις PHP',
+    'Service' => 'Υπηρεσία',
+    'Description' => 'περιγραφή',
+    
+    //header
+    'Hestia Control Panel' => 'Πίνακας Ελέγχου Hestia',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Ορισμός ως προεπιλεγμένης γλώσσας για όλους τους χρήστες',
+    
+    //2FA 
+    'Forgot token' => 'Ξεκλείδωμα λογαριασμού',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Ο έλεγχος ταυτότητας δύο παραγόντων είναι τώρα απενεργοποιημένος για το λογαριασμό σας.<br><br>Μπορείτε τώρα να συνεχίσετε να συνδέεστε.',
+    'Reset 2FA' => 'Ξεκλείδωμα λογαριασμού',
+    '2FA Reset Code' => 'Κωδικός ανάκτησης λογαριασμού',
+    'Invalid or missing token' => 'Το διακριτικό ή λείπει δεν είναι έγκυρο',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε τα αρχεία καταγραφής;',
+
+    'Force SSL/HTTPS' => 'Ενεργοποίηση αυτόματης ανακατεύθυνσης HTTP-to-HTTPS',
+    'Enable SSL HSTS' => 'Ενεργοποίηση αυστηρής ασφάλειας μεταφοράς HTTP (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Έλεγχος ταυτότητας δύο παραγόντων',
+    'Enable 2FA' => 'Ενεργοποίηση ελέγχου ταυτότητας δύο παραγόντων',
+    'Please scan the code below in your 2FA application:' => 'Για να ολοκληρώσετε τη ρύθμιση ελέγχου ταυτότητας δύο παραγόντων, σαρώστε τον κωδικό QR παρακάτω<br />χρησιμοποιώντας μια εφαρμογή ελέγχου ταυτότητας (όπως <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Επαληθευτής Google</a>):',
+    '2FA Reset Code:' => 'Κωδικός ανάκτησης λογαριασμού:',
 );

+ 2 - 13
web/inc/i18n/en.php

@@ -702,17 +702,6 @@ $LANG['en'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'License Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy License',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel License',
-    'Licence Activated' => 'License Activated',
-    'Licence Deactivated' => 'License Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Hourly',
     'Run Command' => 'Run Command',
@@ -767,7 +756,7 @@ $LANG['en'] = array(
     'Theme' => 'Appearance',
 
     'Operating System' => 'Operating System',
-    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Please wait while php is installed or removed' => 'It may take a few minutes to save your changes. Please wait until the process has completed and do not refresh the page.',
     'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
     
     //SSH Key
@@ -796,7 +785,7 @@ $LANG['en'] = array(
     'BLACKLIST' => 'BLACKLIST',
     'IPVERSE' => 'IPVERSE',
     'IPSET_CREATED_OK' => 'IP list created successfully',
-    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s?',
     '1 Ipset list' => '1 IP list',
     '%s Ipset lists' => '%s IP lists',
     'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',

+ 110 - 18
web/inc/i18n/es.php

@@ -101,11 +101,11 @@ $LANG['es'] = array(
     'list accounts'  => 'listar %s cuentas',
     'add account'  => 'añadir cuenta',
     'open webmail'  => 'abrir webmail',
-    'list fail2ban' => 'listar fail2ban',
+    'list fail2ban' => 'Administrar IP prohibidas',
     'open %s'  => 'abrir %s',
     'download'  => 'descargar',
     'restore'  => 'restaurar',
-    'configure restore settings'  => 'configurar las opciones de restauración',
+    'configure restore settings'  => 'Configurar las opciones de restauración',
     'stop'  => 'detener',
     'start'  => 'iniciar',
     'restart'  => 'reiniciar',
@@ -113,11 +113,11 @@ $LANG['es'] = array(
     'generate'  => 'generar',
     'Generate CSR' => 'Generar CSR',
     'reread IP' => 'releer IP',
-    'enable autoupdate' => 'activar actualizaciones automáticas',
-    'disable autoupdate' => 'desactivar actualizaciones automáticas',
-    'turn on notifications' => 'activar notificaciones',
-    'turn off notifications' => 'desactivar notificaciones',
-    'configure' => 'configurar',
+    'enable autoupdate' => 'Dctivar actualizaciones automáticas',
+    'disable autoupdate' => 'Desactivar actualizaciones automáticas',
+    'turn on notifications' => 'Activar notificaciones',
+    'turn off notifications' => 'Desactivar notificaciones',
+    'configure' => 'Configurar',
 
     'Adding User'  => 'Añadiendo Usuario',
     'Editing User'  => 'Editando Usuario',
@@ -704,17 +704,6 @@ $LANG['es'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'Atajos inspirados en el editor de archivos <a href="https://www.midnight-commander.org/">Midnight Commander</a>',
 
-    'Licence Key' => 'Clave de licencia',
-    'Enter License Key' => 'Inserta la clave de licencia',
-    'Buy Licence' => 'Comprar Licencia',
-    'Buy Lifetime License' => 'Comprar Licencia de por vida',
-    'Disable and Cancel Licence' => 'Deshabilitar y Cancelar Licencia',
-    'Licence Activated' => 'Licencia Activada',
-    'Licence Deactivated' => 'Licencia Desactivada',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restringe a los usuarios para que sólo puedan ingresar a su directorio local y prohíbe el acceso a SSH.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Navegar, copiar, editar, ver y descargar todos los archivos de tu página web utilizando el Administrador de Archivos.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Este es un módulo comercial, tendrás que adquirir una licencia para poder activarlo.',
-
     'Minutes' => 'Minutos',
     'Hourly' => 'Cada hora',
     'Run Command' => 'Ejecutar Comando',
@@ -764,4 +753,107 @@ $LANG['es'] = array(
 
     'Theme' => 'Aspecto',
     'Operating System' => 'Sistema operativo',
+
+    'Please wait while php is installed or removed' => 'Los cambios pueden tardar unos minutos en guardarse. Espere hasta que se complete el proceso y no actualice la página.',
+    'Avoid adding web domains on admin account' => 'Se recomienda encarecidamente que <a href="/add/user/">cree una cuenta de usuario estándar</a> antes de agregar dominios web al servidor debido a los mayores privilegios que posee la cuenta de administrador y los posibles riesgos de seguridad.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'La clave SSH de campo no debe estar en blanco',
+    'SSH KEY is invalid' => 'La clave SSH no es válida',
+    'SSH KEY already exists' => 'La clave SSH ya existe',
+    'SSH KEY Added' => 'Se ha agregado la clave SSH',
+    'Add SSH Key' => 'Añadir clave SSH',
+    'SSH KEY' => 'Clave SSH',    
+    'DELETE_KEY_CONFIRM' => '¿Estás seguro de que quieres eliminar la clave SSH %s?',
+    'SSH_ID' => 'ID de SSH',
+    'Manage SSH keys' => 'Administrar claves SSH',
+ 
+    //Header 
+    'Fm' => 'Archivos',
+    //PHP Cli
+    'PHP CLI Version' => 'Versión de línea de comando PHP',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'Nueva lista de IP',
+    'Ip List Name' => 'Nombre de la lista de IP',
+    'Data Source' => 'Fuente de datos',
+    'Ip Version' => 'Versión IP',
+    'Autoupdate' => 'Auto actualización',
+    'Add IP list' => 'Agregar lista de IP',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'Lista de IP creada con éxito',
+    'DELETE_IPSET_CONFIRMATION' => '¿Está seguro de que desea eliminar la lista de IP %s?',
+    '1 Ipset list' => '1 Lista de IP',
+    '%s Ipset lists' => '%s Listas de IP',
+    'There are currently no IP lists defined.' => 'Actualmente no hay listas de IP definidas.',
+    'list ipset' => 'Administrar listas de IP',
+    
+    //Backup
+    'File Name' => 'Nombre del archivo',
+    'Size' => 'Talla',
+    'Runtime' => 'Tiempo de ejecución',
+    //Logs
+    'Refresh' => 'Actualizar',
+    'Time' => 'Hora',
+    'Value' => 'Valor',
+    
+    //DNS 
+    'default' => 'defecto',
+    '1 DNS zone' => '1 Zona DNS',
+    '%s DNS zones' => '%s Zonas DNS',
+    'Add Record' => 'Agregar registro',
+    //user
+    '1 user account' => '1 cuenta de usuario',
+    '%s user accounts' => '%s cuentas de usuario',
+    //database
+    '1 SQL database' => '1 Base de datos SQL',
+    '%s SQL databases' => '%s Bases de datos SQL',
+    //mail
+    '1 mail domain' => '1 dominio de correo',
+    '%s mail domains' => '%s dominios de correo',
+    //web
+    '1 web domain' => '1 dominio web',
+    '%s web domains' => '%s dominios web',
+    
+    //rrd
+    'Bandwidth Usage' => 'Uso de Ancho de Banda',
+    
+    //reset
+    'Forgot Password' => 'Se te olvidó tu contraseña',
+    //web
+    'Quick Install App' => 'Instalar aplicación',
+    //webapp 
+    'version' => 'versión',
+    'Setup' => 'Preparar',
+    //Server
+    'Restart' => 'Reiniciar',
+    'Mail Server' => 'Servidor de correo',
+    'Enabled multi PHP versions' => 'Versiones PHP habilitadas',
+    'Service' => 'Servicio',
+    'Description' => 'Descripción',
+    
+    //header
+    'Hestia Control Panel' => 'Panel de control de Hestia',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Establecer como idioma predeterminado para todos los usuarios',
+    
+    //2FA 
+    'Forgot token' => 'Desbloquear cuenta',
+    '2FA Token' => 'PIN OTP',
+    '2FA Reset successfully' => 'La autenticación de dos factores ahora está desactivada para su cuenta.<br><br>Ahora puede proceder a iniciar sesión.',
+    'Reset 2FA' => 'Desbloquear cuenta',
+    '2FA Reset Code' => 'Código de recuperación de cuenta',
+    'Invalid or missing token' => 'Token inválido o faltante',
+
+    'DELETE_LOGS_CONFIRMATION'  => '¿Estás seguro de que quieres eliminar los registros',
+
+    'Force SSL/HTTPS' => 'Habilitar la redirección automática de HTTP a HTTPS',
+    'Enable SSL HSTS' => 'Habilitar HTTP Strict Transport Security (HSTS) <a href="https://es.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Autenticación de dos factores',
+    'Enable 2FA' => 'Habilitar autenticación de dos factores',
+    'Please scan the code below in your 2FA application:' => 'Para terminar de configurar la autenticación de dos factores, escanee el código QR a continuación<br />usando una aplicación de autenticación (como <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Autenticador de Google</a>):',
+    '2FA Reset Code:' => 'Código de recuperación de cuenta:',
 );

+ 102 - 10
web/inc/i18n/fa.php

@@ -674,16 +674,6 @@ $LANG['fa'] = array(
     'Select All Files' => 'انتخاب تمامی پرونده ها',
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'میانبرها الهام گرفته از <a href="https://www.midnight-commander.org/">Midnight Commander</a> مدیریت فایل باشكوه GNU است.',
-    'Licence Key' => 'كلید مجوز',
-    'Enter License Key' => 'كلید مجوز را وارد كنید',
-    'Buy Licence' => 'خرید مجوز',
-    'Buy Lifetime License' => 'خرید مجوز همیشگی',
-    'Disable and Cancel Licence' => 'از کار انداختن و انصراف مجوز',
-    'Licence Activated' => 'مجوز به کار انداخته شد',
-    'Licence Deactivated' => 'مجوز از کار انداخته شد',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'محدود كردن كاربران كه نتوانند از SSH استفاده كنند و فقط به پوشه خانگی دسترسی داشته باشند.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'مرور، كپی، ویرایش، نمایش، و بازیابی تمامی ژرونده های دامنه شما با یك مدیریت كننده برجسته فایل.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'این افزونه تجاریست, شما باید كلید مجوز برای به کار انداختن آن سفارش دهید.',
     'Minutes' => 'دقیقه',
     'Hourly' => 'ساعتی',
     'Run Command' => 'اجرای دستور',
@@ -727,4 +717,106 @@ $LANG['fa'] = array(
     'Email Credentials' => 'اعتبار پست الکترونیکی',
     'Theme' => 'ظاهر',
     'Operating System' => 'سیستم عامل',
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 102 - 11
web/inc/i18n/fi.php

@@ -698,17 +698,6 @@ $LANG['fi'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Lisenssiavain',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Osta lisenssi',
-    'Buy Lifetime License' => 'Osta elinikäinen lisenssi',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Lisenssi aktivoitu',
-    'Licence Deactivated' => 'Lisenssi deaktivoitu',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minuutittain',    // fuzzy
     'Hourly' => 'Tunneittain',
     'Run Command' => 'Aja Komento',
@@ -759,6 +748,108 @@ $LANG['fi'] = array(
     'Theme' => 'Ulkonäkö',
 
     'Operating System' => 'Käyttöjärjestelmä',
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
     
 // Texts below doesn't exist in en.php
     'traffic' => 'tiedonsiirto',

+ 1 - 12
web/inc/i18n/fr.php

@@ -699,17 +699,6 @@ $LANG['fr'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Clé de License',
-    'Enter License Key' => 'Entrez la clé de License',
-    'Buy Licence' => 'Acheter une License',
-    'Buy Lifetime License' => 'Acheter une License Unlimited',
-    'Disable and Cancel Licence' => 'Désactiver ou Annuler la License',
-    'Licence Activated' => 'License activée',
-    'Licence Deactivated' => 'Licence désactivée',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Horaire',
     'Run Command' => 'Exécuter la commande',
@@ -764,7 +753,7 @@ $LANG['fr'] = array(
 
     'Theme' => 'Apparence',
 
-    'Please wait while php is installed or removed' => 'Veuillez attendre la fin du processus et ne pas actualiser la page.',
+    'Please wait while php is installed or removed' => 'L\'enregistrement des modifications peut prendre quelques minutes. Veuillez attendre la fin du processus et ne pas actualiser la page.',
     'Avoid adding web domains on admin account' => 'Il est fortement conseillé de <a href="/add/user/">créer un compte utilisateur standard</a> avant d\'ajouter des domaines Web au serveur en raison des privilèges accrus du compte administrateur et des risques de sécurité potentiels.',
     
     'Operating System' => 'Système d\'exploitation',

+ 93 - 12
web/inc/i18n/hr.php

@@ -702,17 +702,6 @@ $LANG['hr'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     'prečaci su inspirirani veličanstvenim GNU upraviteljem datoteka <a href="https://www.midnight-commander.org/">Midnight Commander-om</a>',
 
-    'Licence Key' => 'Licenčni ključ',
-    'Enter License Key' => 'Unesite licenčni ključ',
-    'Buy Licence' => 'Kupite licencu',
-    'Buy Lifetime License' => 'Kupite doživotnu licencu',
-    'Disable and Cancel Licence' => 'Onemogučite i otkažite licencu',
-    'Licence Activated' => 'Licenca aktivirana',
-    'Licence Deactivated' => 'Licenca deaktivirana',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Ograničite prava korisnika tako da ne mogu koristiti SSH, odnosno da mogu koristiti samo svoju osobnu mapu.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Pretražujte, kopirajte, uređujte, pregledavajte i preuzimajte sve vaše datoteke s web domene koriteći se cjelovitim upraviteljem datoteka.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Ovo je komercijalni modul, trebate kupiti licenčni ključ da bi ga omogućili.',
-
     'Minutes' => 'Minute',
     'Hourly' => 'Svaki sat',
     'Run Command' => 'Izvršite komandu',
@@ -768,6 +757,98 @@ $LANG['hr'] = array(
 
     'Operating System' => 'Operacijski sustav',
     'Please wait while php is installed or removed' => 'Dodavanje ili uklanjanje neke od inačica PHP-a trajat će oko 1 minute po inačici. Molimo pričekajte dok proces ne završi i nemojte osvježavati stanicu.',
-    'Avoid adding web domains on admin account' => 'Toplo preporučamo da napravite standarnog korisnika prije dodavanja web domena na poslužitelj zbog visokih privilegija koje ima admin račun te potencijalne sigurnosne rizike koji proizlaze iz toga.',
+    'Avoid adding web domains on admin account' => 'Toplo preporučamo da napravite <a href="/add/user/">standarnog korisnika</a> prije dodavanja web domena na poslužitelj zbog visokih privilegija koje ima admin račun te potencijalne sigurnosne rizike koji proizlaze iz toga.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
     
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
 );

+ 102 - 11
web/inc/i18n/hu.php

@@ -700,17 +700,6 @@ $LANG['hu'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licence Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy Licence',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licence Activated',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Hourly',
     'Run Command' => 'Run Command',
@@ -761,4 +750,106 @@ $LANG['hu'] = array(
     'Theme' => 'Megjelenése',
     'Operating System' => 'Operációs rendszer',
     
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 103 - 11
web/inc/i18n/id.php

@@ -697,17 +697,6 @@ $LANG['id'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'pintasan terinspirasi oleh magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Lisensi',
-    'Enter License Key' => 'Masukan Lisensi',
-    'Buy Licence' => 'Beli lisensi',
-    'Buy Lifetime License' => 'Beli Lisensi seumur hidup',
-    'Disable and Cancel Licence' => 'Nonaktifkan dan batalkan lisensi',
-    'Licence Activated' => 'Lisensi telah aktif',
-    'Licence Deactivated' => 'Lisensi telah di nonaktifkan',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Batasi pengguna agar tidak dapat menggunakan SSH dan hanya dapat mengakses direktori home.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Jelajahi, salin, sunting, lihat dan dapatkan semua file web anda menggunakan File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Ini modul komersial, anda perlu membayar lisensi untuk mengaktifkannya.',
-
     'Minutes' => 'Permenit',
     'Hourly' => 'Perhari',
     'Run Command' => 'Jalankan Perintah',
@@ -757,4 +746,107 @@ $LANG['id'] = array(
 
     'Theme' => 'Penampilan',
     'Operating System' => 'Sistem operasi',
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 1 - 12
web/inc/i18n/it.php

@@ -700,17 +700,6 @@ $LANG['it'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licence Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy Licence',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licence Activated',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Hourly',
     'Run Command' => 'Run Command',
@@ -766,7 +755,7 @@ $LANG['it'] = array(
     'Please scan the code below in your 2FA application:' => 'Per completare la configurazione dell\'autenticazione a due fattori, scansiona il codice QR di seguito <br /> utilizzando un\'app di autenticazione (come <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2"> Google Authenticator</a>):',
     '2FA Reset Code:' => 'Codice di recupero dell\'account:',
 
-    'Please wait while php is installed or removed' => 'Attendere il completamento del processo e non aggiornare la pagina.',
+    'Please wait while php is installed or removed' => 'Potrebbero essere necessari alcuni minuti per salvare le modifiche. Attendere il completamento del processo e non aggiornare la pagina.',
     'Avoid adding web domains on admin account' => 'Si consiglia vivamente di <a href="/add/user/">creare un account utente standard</a> prima di aggiungere domini Web al server a causa dei maggiori privilegi dell\'account amministratore e dei potenziali rischi per la sicurezza.',
     
     //SSH Key

+ 102 - 11
web/inc/i18n/ja.php

@@ -696,17 +696,6 @@ $LANG['ja'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'ライセンスキー',
-    'Enter License Key' => 'ライセンスキーを入力',
-    'Buy Licence' => 'ライセンスを購入',
-    'Buy Lifetime License' => '永久ライセンスを購入',
-    'Disable and Cancel Licence' => 'ライセンスをキャンセルして無効化する',
-    'Licence Activated' => 'ライセンスが有効化されました',
-    'Licence Deactivated' => 'ライセンスが無効化されました',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'ユーザーによるSSHの使用を禁止し、各自のホームディレクトリにのみアクセスできるように制限します',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => '高機能なファイルマネージャーを用いてウェブ上のファイルを閲覧、コピー、編集、表示、復旧できます',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'この機能は有償で、有効化するにはライセンスキーを購入する必要があります',
-
     'Minutes' => '分毎',
     'Hourly' => '時間毎',
     'Run Command' => '実行時',
@@ -756,5 +745,107 @@ $LANG['ja'] = array(
 
     'Theme' => '外観',
     'Operating System' => 'オペレーティング システム',
+
+    'Please wait while php is installed or removed' => '変更を保存するには数分かかる場合があります。 プロセスが完了するまで待ち、ページを更新しないでください。',
+    'Avoid adding web domains on admin account' => '管理者アカウントが持つ権限の増加と潜在的なセキュリティリスクのため、サーバーにWebドメインを追加する前に、<a href="/add/user/">標準ユーザーアカウントを作成</a>することを強くお勧めします。',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'フィールドSSHキーは空白にできません',
+    'SSH KEY is invalid' => 'SSHキーが無効です',
+    'SSH KEY already exists' => 'SSHキーはすでに存在します',
+    'SSH KEY Added' => 'SSHキーが追加されました',
+    'Add SSH Key' => 'SSHキーを追加',
+    'SSH KEY' => 'SSHキー',    
+    'DELETE_KEY_CONFIRM' => 'SSHキーを削除してもよろしいですか %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'SSHキーを管理する',
+ 
+    //Header 
+    'Fm' => 'ファイル',
+    //PHP Cli
+    'PHP CLI Version' => 'PHPコマンドラインバージョン',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => '新しいIPリスト',
+    'Ip List Name' => 'IPリスト名',
+    'Data Source' => '情報源',
+    'Ip Version' => 'IPバージョン',
+    'Autoupdate' => '自動更新',
+    'Add IP list' => 'IPリストを追加',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IPリストが正常に作成されました',
+    'DELETE_IPSET_CONFIRMATION' => 'IPリストを削除してもよろしいですか %s?',
+    '1 Ipset list' => '1 IPリスト',
+    '%s Ipset lists' => '%s IPリスト',
+    'There are currently no IP lists defined.' => '現在、定義されているIPリストはありません。',
+    'list ipset' => 'IPリストを管理する',
+    
+    //Backup
+    'File Name' => 'ファイル名',
+    'Size' => 'サイズ',
+    'Runtime' => 'ランタイム',
+    //Logs
+    'Refresh' => 'リフレッシュ',
+    'Time' => '時間',
+    'Value' => '値',
+    
+    //DNS 
+    'default' => 'デフォルト',
+    '1 DNS zone' => '1 DNSゾーン',
+    '%s DNS zones' => '%s DNSゾーン',
+    'Add Record' => 'レコードを追加',
+    //user
+    '1 user account' => '1 ユーザーアカウント',
+    '%s user accounts' => '%s ユーザーアカウント',
+    //database
+    '1 SQL database' => '1 SQLデータベース',
+    '%s SQL databases' => '%s SQLデータベース',
+    //mail
+    '1 mail domain' => '1 メールドメイン',
+    '%s mail domains' => '%s メールドメイン',
+    //web
+    '1 web domain' => '1 Webドメイン',
+    '%s web domains' => '%s Webドメイン',
+    
+    //rrd
+    'Bandwidth Usage' => '帯域幅の使用',
+    
+    //reset
+    'Forgot Password' => 'パスワードを再設定する',
+    //web
+    'Quick Install App' => 'アプリをインストール',
+    //webapp 
+    'version' => 'バージョン',
+    'Setup' => 'セットアップ',
+    //Server
+    'Restart' => '再起動',
+    'Mail Server' => 'メールサーバー',
+    'Enabled multi PHP versions' => '有効なPHPバージョン',
+    'Service' => 'サービス',
+    'Description' => '説明文',
+    
+    //header
+    'Hestia Control Panel' => 'ヘスティアコントロールパネル',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'すべてのユーザーのデフォルト言語として設定',
     
+    //2FA 
+    'Forgot token' => 'アカウントのロックを解除',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'アカウントの二要素認証が無効になりました。<br><br>ログインに進むことができます。',
+    'Reset 2FA' => 'アカウントのロックを解除',
+    '2FA Reset Code' => 'アカウント復旧コード',
+    'Invalid or missing token' => '無効または不足しているトークン',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'ログを削除してもよろしいですか?',
+
+    'Force SSL/HTTPS' => 'HTTPからHTTPSへの自動リダイレクトを有効にする',
+    'Enable SSL HSTS' => 'HTTP Strict Transport Security(HSTS)を有効にする <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 104 - 11
web/inc/i18n/ka.php

@@ -696,17 +696,6 @@ $LANG['ka'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     'მალსახმობები შექმნილია უძლიერესი GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> ფაილური მენეჯერის მიხედვით',
 
-    'Licence Key' => 'ლიცენზიის გასაღები',
-    'Enter License Key' => 'შეიყვანეთ ლიცენზიის გასაღები',
-    'Buy Licence' => 'ლიცენზიის შეძენა',
-    'Buy Lifetime License' => 'სამუდამო ლიცენზიის შეძენა',
-    'Disable and Cancel Licence' => 'ლიცენზიის გამორთვა და გაუქმება',
-    'Licence Activated' => 'ლიცენზია გააქტიურდა',
-    'Licence Deactivated' => 'ლიცენზია გამოირთო',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'მომხმარებლებისტვის SSH-ზე წვდომის შეზღუდვა და მათი მხოლოდ საკუთარ საშინაო კატალოგში მოქცევა.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'მიმოხილვა, კოპირება, რედაქტირება, ნახვა და ყველა თქვენი დომენის ფაილების მართვა სრულად ფუნქციური ფაილური მენეჯერით.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'ეს კომერციული მოდულია და მის ჩასართავად საჭიროა ლიცენზიის გასაღების შეძენა.',
-
     'Minutes' => 'წუთი',
     'Hourly' => 'საათობრივი',
     'Run Command' => 'ბრძანების გაშვება',
@@ -753,4 +742,108 @@ $LANG['ka'] = array(
     'maximum characters length, including prefix' => 'maximum %s characters length, including prefix',
 
     'Email Credentials' => 'Email Credentials',
+
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 103 - 11
web/inc/i18n/ko.php

@@ -696,17 +696,6 @@ $LANG['ko'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     '단축키는 웅장한 GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> 파일 관리자에서 영감을 받았습니다',
 
-    'Licence Key' => '라이센스',
-    'Enter License Key' => '라이센스 키 입력',
-    'Buy Licence' => '라이센스 구매',
-    'Buy Lifetime License' => '평생 라이센스 구매',
-    'Disable and Cancel Licence' => '비활성화 및 라이센스 취소',
-    'Licence Activated' => '라이센스 활성화됨',
-    'Licence Deactivated' => '라이센스 비활성화됨',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'SSH를 사용할 수 없고 자신의 홈 디렉토리에만 액세스 할 수 있도록 사용자를 제한하십시오.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => '모든 기능을 갖춘 파일 관리자를 사용하여 웹 도메인 파일을 탐색, 복사, 편집, 보기 및 검색하십시오.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => '이것은 상용 모듈이므로 라이센스 키를 구입하여 사용 가능하게 해야합니다.',
-
     'Minutes' => '분',
     'Hourly' => '매시',
     'Run Command' => '명령 실행',
@@ -756,4 +745,107 @@ $LANG['ko'] = array(
 
     'Theme' => '모양을',
     'Operating System' => '운영 체제',
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+    
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 19 - 20
web/inc/i18n/nl.php

@@ -8,10 +8,10 @@
 
 $LANG['nl'] = array(
     'Packages'  => 'Pakketten',
-    'IP'  => 'IP',
+    'IP'  => 'Netwerk',
     'Graphs'  => 'Grafieken',
     'Statistics'  => 'Statistieken',
-    'Log'  => 'Logs',
+    'Log'  => 'Logboeken',
     'Server'  => 'Server',
     'Services'  => 'Processen',
     'Firewall' => 'Firewall',
@@ -527,7 +527,7 @@ $LANG['nl'] = array(
     'Database Credentials'  => 'Database gegevens',
     'DATABASE_READY' => "De database is succesvol aangemaakt en klaar voor gebruik.\n\nDatabase: %s\nGebruiker: %s\nWachtwoord: %s\n%s\n\n--\nHestia Controlepaneel\n",
 
-    'forgot password'  => 'Vergeten',
+    'forgot password'  => 'Wachtwoord vergeten',
     'Confirm'  => 'Bevestig',
     'New Password'  => 'Nieuw wachtwoord',
     'Confirm Password'  => 'Bevestig wachtwoord',
@@ -701,17 +701,6 @@ $LANG['nl'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     'snelkoppelingen zijn geïnspireerd door magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licentiecode',
-    'Enter License Key' => 'Voer de licentiecode in',
-    'Buy Licence' => 'Koop Licentie',
-    'Buy Lifetime License' => 'Kopen Levenslange licentie',
-    'Disable and Cancel Licence' => 'Activeer en Annuleren licentie',
-    'Licence Activated' => 'Licentie geactiveerde',
-    'Licence Deactivated' => 'Licentie gedeactiveerd',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Gebruikers beperken zodat zij niet SSH kunnen gebruiken en enkel hun home map kunnen gebruiken.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Blader, kopieer, wijzig, bekijk, en verkrijg al uw webbestanden met een volledige bestandsbeheerder.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Dit is een commerciële module, u moet een licentiesleutel kopen om het te kunnen gebruiken.',
-
     'Minutes' => 'Minuten',
     'Hourly' => 'Ieder uur',
     'Run Command' => 'Voer commando uit',
@@ -759,7 +748,7 @@ $LANG['nl'] = array(
 
     'Email Credentials' => 'E-mail gegevens',
     
-        '2 Factor Authentication' => 'Two factor Authenticatie',
+    '2 Factor Authentication' => 'Two factor Authenticatie',
     'Enable 2FA' => 'Schakel two factor Authenticatie in',
     'Please scan the code below in your 2FA application:' => 'Scan de QR-code hieronder om het instellen van two factor authenticatie te voltooien.<br />
     Maak gebruik van een App (Bijvoorbeeld <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
@@ -853,11 +842,21 @@ $LANG['nl'] = array(
     // Set default language
     'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Stel standaard taal in voor alle gebruikers',
     
-        //2FA 
-    'Forgot token' => 'Token vergeten',
-    '2FA Token' => '2FA Token',
-    '2FA Reset successfully' => '2FA is met success gereset. Je kunt nu normaal inloggen.',
-    'Reset 2FA' => 'Herstel 2FA Code',
+    //2FA 
+    'Forgot token' => 'Deblokeer Account',
+    '2FA Token' => 'OTP Pincode',
+    '2FA Reset successfully' => 'Two-factor verificatie is nu uitgeschakeld voor uw account. <br> <br> U kunt nu doorgaan met inloggen',
+    'Reset 2FA' => 'Deblokeer Account',
     '2FA Reset Code' => 'Account Herstel Code',
     'Invalid or missing token' => 'Ongeldige of geen token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Weet u zeker dat u de logboeken wilt verwijderen?',
+
+    'Force SSL/HTTPS' => 'Schakel automatische HTTP-naar-HTTPS-omleiding in',
+    'Enable SSL HSTS' => 'HTTP Strict Transport Security (HSTS) inschakelen <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Twee-factor-authenticatie',
+    'Enable 2FA' => 'Schakel tweefactorauthenticatie in',
+    'Please scan the code below in your 2FA application:' => 'Scan de QR-code hieronder om het instellen van tweefactorauthenticatie te voltooien<br />met behulp van een authenticatie-app (zoals <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Accountherstelcode:',
 );

+ 102 - 11
web/inc/i18n/no.php

@@ -697,17 +697,6 @@ $LANG['no'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licence Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy Licence',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licence Activated',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Hourly',
     'Run Command' => 'Run Command',
@@ -758,4 +747,106 @@ $LANG['no'] = array(
     'Theme' => 'Utseende',
     'Operating System' => 'Operativsystemet',
     
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 14 - 12
web/inc/i18n/pl.php

@@ -8,7 +8,7 @@
 
 $LANG['pl'] = array(
     'Packages'  => 'Pakiety',
-    'IP'  => 'IP',
+    'IP'  => 'Sieć',
     'Graphs'  => 'Wykresy',
     'Statistics'  => 'Statystyki',
     'Log'  => 'Log',
@@ -704,17 +704,6 @@ $LANG['pl'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'skróty klawiszowe są zainspirowane wspaniałym managerem plików GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a>',
 
-    'Licence Key' => 'Klucz licencyjny',
-    'Enter License Key' => 'Wpisz klucz licencyjny',
-    'Buy Licence' => 'Kup licencję',
-    'Buy Lifetime License' => 'Kup wieczystą licencję',
-    'Disable and Cancel Licence' => 'Wyłącz i anuluj licencję',
-    'Licence Activated' => 'Aktywowano licencję',
-    'Licence Deactivated' => 'Zdezaktywowano licencję',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Daj użytkownikowi dostęp tylko do jego katalogu domowego przez SSH.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Przeglądaj, kopiuj, edytuj i zarządzaj wszystkimi plikami należącymi do twojej domeny przy użyciu kompletnego Menedżera Plików.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'To jest moduł komercyjny. Żeby go aktywować trzeba zakupić klucz licencyjny.',
-
     'Minutes' => 'Minuty',
     'Hourly' => 'Godziny',
     'Run Command' => 'Komenda',
@@ -849,4 +838,17 @@ $LANG['pl'] = array(
     //header
     'Hestia Control Panel' => 'Hestia Control Panel',
 
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Ustaw jako domyślny język dla wszystkich użytkowników',
+    
+    //2FA 
+    'Forgot token' => 'Odblokować konto',
+    '2FA Token' => 'PIN OTP',
+    '2FA Reset successfully' => 'Uwierzytelnianie dwuskładnikowe jest teraz wyłączone dla Twojego konta.<br><br>Możesz teraz przejść do logowania.',
+    'Reset 2FA' => 'Odblokować konto',
+    '2FA Reset Code' => 'Kod odzyskiwania konta',
+    'Invalid or missing token' => 'Nieprawidłowy lub brakujący token',
+
+    'Force SSL/HTTPS' => 'Włącz automatyczne przekierowanie HTTP na HTTPS',
+    'Enable SSL HSTS' => 'Włącz zabezpieczenia ścisłego transportu HTTP (HSTS) <a href="https://pl.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
 );

+ 102 - 11
web/inc/i18n/pt-BR.php

@@ -696,17 +696,6 @@ $LANG['pt-BR'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'atalhos são inspirados pela magnífica GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> Gerenciador de Arquivos',
 
-    'Licence Key' => 'Chave de Licença',
-    'Enter License Key' => 'Digite a Chave de Licença',
-    'Buy Licence' => 'Comprar Licença',
-    'Buy Lifetime License' => 'Comprar Licença Vitalícia',
-    'Disable and Cancel Licence' => 'Desativar e Cancelar a Licença',
-    'Licence Activated' => 'Licença Ativada',
-    'Licence Deactivated' => 'Licença Desativada',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restringir usuários para que eles não possam usar SSH e acessar apenas sua pasta principal.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Navegar, copiar, editar, ver e recuperar todos os arquivos de seu domínio web usando o Gerenciador de Arquivos com mais recursos.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Este é um módulo comercial o qual você pode comprar uma Chave de Licença para habilitá-lo.',
-
     'Minutes' => 'Minutos',
     'Hourly' => 'Hora',
     'Run Command' => 'Executar Comando',
@@ -753,4 +742,106 @@ $LANG['pt-BR'] = array(
     'maximum characters length, including prefix' => 'comprimento máximo de % caracteres, incluindo o prefixo',
 
     'Email Credentials' => 'Credenciais de e-mail',
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 102 - 11
web/inc/i18n/pt.php

@@ -696,17 +696,6 @@ $LANG['pt'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'atalhos são inspirados pela magnífica GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> Gerenciador de Arquivos',
 
-    'Licence Key' => 'Chave de Licença',
-    'Enter License Key' => 'Digite a Chave de Licença',
-    'Buy Licence' => 'Comprar Licença',
-    'Buy Lifetime License' => 'Comprar Licença Vitalícia',
-    'Disable and Cancel Licence' => 'Desativar e Cancelar a Licença',
-    'Licence Activated' => 'Lisença Ativada',
-    'Licence Deactivated' => 'Licença Desativada',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restringir usuários para que eles não possam usar SSH e acessar apenas seu diretório home.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copiar, editar, ver, e recuperar todos os arquivos de seu domínio web usando o completo Gerenciador de Arquivos.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Éste é um módulo comercial que você poderia comprar uma chave de licença para habilita-lo.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Hourly',
     'Run Command' => 'Run Command',
@@ -756,4 +745,106 @@ $LANG['pt'] = array(
 
     'Theme' => 'Aparência',
     'Operating System' => 'Sistema Operacional',
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 101 - 11
web/inc/i18n/ro.php

@@ -698,17 +698,6 @@ $LANG['ro'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     'scurtăturile sunt inspirate de magnificul GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licență',
-    'Enter License Key' => 'Introduceți licența',
-    'Buy Licence' => 'Cumpărați licență',
-    'Buy Lifetime License' => 'Cumpărați licență pe viață',
-    'Disable and Cancel Licence' => 'Dezactivare si anulare licență',
-    'Licence Activated' => 'Licență activată',
-    'Licence Deactivated' => 'Licență dezactivată',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restricționați utilizatorii astfel încât să nu poată folosi SSH și să aibă acces numai la directorul lor.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Navigați, copiați, editați, vizualizați și recuperați toate fișierele sitului dvs. web folosind managerul de fișiere complet echipat.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Acesta este un modul comercial, va trebui să achiziționați o licență pentru a-l activa.',
-
     'Minutes' => 'Minute',
     'Hourly' => 'Oral',
     'Run Command' => 'Execută comanda',
@@ -758,5 +747,106 @@ $LANG['ro'] = array(
 
     'Theme' => 'Aspectul',
     'Operating System' => 'Sistem de operare',
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
     
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 101 - 14
web/inc/i18n/ru.php

@@ -8,7 +8,7 @@
 
 $LANG['ru'] = array(
     'Packages' => 'Пакеты',
-    'IP' => 'IP',
+    'IP' => 'сеть',
     'Graphs' => 'Графики',
     'Statistics' => 'Статистика',
     'Log' => 'Журнал',
@@ -95,7 +95,7 @@ $LANG['ru'] = array(
     'list accounts' => 'показать аккаунты: %s',
     'add account' => 'добавить аккаунт',
     'open webmail' => 'открыть веб-почту',
-    'list fail2ban' => 'показать fail2ban',
+    'list fail2ban' => 'Забаненные IP-адреса',
     'open %s' => 'открыть %s',
     'download' => 'скачать',
     'restore' => 'восстановить',
@@ -680,7 +680,7 @@ $LANG['ru'] = array(
     'New Folder' => 'Создать  Папку',
     'Download' => 'Скачать',
     'Archive' => 'Заархивировать',
-    'Save File (in text editor)' => 'Сохранить Файл (в рамках текстового редактора)',
+    'Save File (in text editor)' => 'Сохранить Файл (в текстовом редакторе)',
     'Close Popup / Cancel' => 'Закрыть Попап / Отмена',
     'Move Cursor Up' => 'Переместить курсор вверх',
     'Move Cursor Down' => 'Переместить курсор вниз',
@@ -699,17 +699,6 @@ $LANG['ru'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'горячие клавиши заимствованы из великолепного файл менеджера GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a>',
 
-    'Licence Key' => 'Лицензионный Ключ',
-    'Enter License Key' => 'Внесите Лицензионный Ключ',
-    'Buy Licence' => 'Купить Лицензионный Ключ',
-    'Buy Lifetime License' => 'Купить Бесконечный Лицензионный Ключ ',
-    'Disable and Cancel Licence' => 'Отключить и Закрыть Лицензию',
-    'Licence Activated' => 'Лицензия Активирована',
-    'Licence Deactivated' => 'Лицензия Отключена',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Ограничить пользователей, так что они не могут использовать SSH и имеют доступ только к домашней папке.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Просмотр, копирование, редактирование, просмотр и использование всех файлов веб-доменов с помощью полнофункционального Файлового менеджера.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Это коммерческий модуль, чтобы включить его, вам необходимо приобрести лицензию.',
-
     'Minutes' => 'по минутам',
     'Hourly' => 'по часам',
     'Run Command' => 'Выполнять',
@@ -764,4 +753,102 @@ $LANG['ru'] = array(
     
     'Theme' => 'Внешний вид',
     'Operating System' => 'Операционная система',
+
+    'Please wait while php is installed or removed' => 'Сохранение ваших изменений может занять несколько минут. Пожалуйста, дождитесь завершения процесса и не обновляйте страницу.',
+    'Avoid adding web domains on admin account' => 'Настоятельно рекомендуется <a href="/add/user/">создать стандартную учетную запись пользователя</a> перед добавлением веб-доменов на сервер из-за расширенных привилегий, которыми обладает учетная запись администратора, и потенциальных угроз безопасности.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Поле SSH Key не должно быть пустым',
+    'SSH KEY is invalid' => 'SSH ключ недействителен',
+    'SSH KEY already exists' => 'Ключ SSH уже существует',
+    'SSH KEY Added' => 'SSH ключ был добавлен',
+    'Add SSH Key' => 'Добавить ключ SSH',
+    'SSH KEY' => 'Ключ SSH',    
+    'DELETE_KEY_CONFIRM' => 'Вы уверены, что хотите удалить ключ SSH %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Управление ключами SSH',
+ 
+    //Header 
+    'Fm' => 'файлы',
+    //PHP Cli
+    'PHP CLI Version' => 'Версия PHP для CLI',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'Новый список IP',
+    'Ip List Name' => 'Имя списка IP',
+    'Data Source' => 'Источник данных',
+    'Ip Version' => 'IP версия',
+    'Autoupdate' => 'Автоматическое обновление',
+    'Add IP list' => 'Добавить список IP',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'Список IP успешно создан',
+    'DELETE_IPSET_CONFIRMATION' => 'Вы уверены, что хотите удалить список IP %s?',
+    '1 Ipset list' => '1 Список IP',
+    '%s Ipset lists' => '%s Списки IP',
+    'There are currently no IP lists defined.' => 'В настоящее время списки IP-адресов не заданы.',
+    'list ipset' => 'Посмотреть списки IP',
+    
+    //Backup
+    'File Name' => 'Имя файла',
+    'Size' => 'Размер',
+    'Runtime' => 'Время выполенения',
+    //Logs
+    'Refresh' => 'обновление',
+    'Time' => 'Время',
+    'Value' => 'Стоимость',
+    
+    //DNS 
+    'default' => 'дефолт',
+    '1 DNS zone' => '1 DNS зона',
+    '%s DNS zones' => '%s DNS-зоны',
+    'Add Record' => 'Добавить запись',
+    //user
+    '1 user account' => '1 учетная запись пользователя',
+    '%s user accounts' => '%s учетные записи пользователей',
+    //database
+    '1 SQL database' => '1 База данных SQL',
+    '%s SQL databases' => '%s Базы данных SQL',
+    //mail
+    '1 mail domain' => '1 почтовый домен',
+    '%s mail domains' => '%s почтовые домены',
+    //web
+    '1 web domain' => '1 веб-домен',
+    '%s web domains' => '%s веб-домены',
+    
+    //rrd
+    'Bandwidth Usage' => 'Использование трафика',
+    
+    //reset
+    'Forgot Password' => 'Забыли пароль',
+    //web
+    'Quick Install App' => 'Установить приложение',
+    //webapp 
+    'version' => 'версия',
+    'Setup' => 'Настроить',
+    //Server
+    'Restart' => 'Перезапуск',
+    'Mail Server' => 'Почтовый сервер',
+    'Enabled multi PHP versions' => 'Включенные версии PHP',
+    'Service' => 'обслуживание',
+    'Description' => 'Описание',
+    
+    //header
+    'Hestia Control Panel' => 'Панель управления Hestia',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Установить язык по умолчанию для всех пользователей',
+    
+    //2FA 
+    'Forgot token' => 'Забыли токен?',
+    '2FA Token' => 'ДФА ПИН',
+    '2FA Reset successfully' => 'Двухфакторная аутентификация теперь отключена для вашей учетной записи.<br><br>Теперь вы можете войти в систему.',
+    'Reset 2FA' => 'Сбросить ДФА',
+    '2FA Reset Code' => 'Код сброса ДФА',
+    'Invalid or missing token' => 'Неверный или отсутствующий токен',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Вы уверены, что хотите удалить логи?',
+
+    'Force SSL/HTTPS' => 'Включить автоматическое перенаправление HTTP-HTTPS',
+    'Enable SSL HSTS' => 'Включить HTTP Strict Transport Security (HSTS) <a href="https://ru.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
 );

+ 103 - 11
web/inc/i18n/se.php

@@ -696,17 +696,6 @@ $LANG['se'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Licence Key',
-    'Enter License Key' => 'Enter License Key',
-    'Buy Licence' => 'Buy Licence',
-    'Buy Lifetime License' => 'Buy Lifetime License',
-    'Disable and Cancel Licence' => 'Disable and Cancel Licence',
-    'Licence Activated' => 'Licence Activated',
-    'Licence Deactivated' => 'Licence Deactivated',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.',
-
     'Minutes' => 'Minutes',
     'Hourly' => 'Hourly',
     'Run Command' => 'Run Command',
@@ -755,4 +744,107 @@ $LANG['se'] = array(
     'Email Credentials' => 'Email Credentials',
 
     'Operating System' => 'Operativsystem',
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 103 - 11
web/inc/i18n/sr.php

@@ -696,17 +696,6 @@ $LANG['sr'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'prečice su slične prečicama u legendarnom GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> fajl menadžeru',
 
-    'Licence Key' => 'Licencni ključ',
-    'Enter License Key' => 'Unesi ključ licence',
-    'Buy Licence' => 'Kupi licencu',
-    'Buy Lifetime License' => 'Kupu doživotnu licencu',
-    'Disable and Cancel Licence' => 'Isključi i otkaži licencu',
-    'Licence Activated' => 'Licenca je aktivirana',
-    'Licence Deactivated' => 'Licenca je deaktivirana',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Ograničava SSH korisnika tako da on može da pristupi samo direktorijumima unutar svog home direktorijuma.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Kopiraj, briši, uploaduj, zapakuj, otpakuj fajlove preko Fajl menadžera direktno iz svog browsera.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Ovaj modul je komercijalan, potrebno je da kupiš licencu za ovaj modul da bi ga koristio.',
-
     'Minutes' => 'Minuta',
     'Hourly' => 'Sati',
     'Run Command' => 'Pokreni komandu',
@@ -756,5 +745,108 @@ $LANG['sr'] = array(
 
     'Theme' => 'Izgled',
     'Operating System' => 'Operacijskog sustava',
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
     
 );

+ 103 - 11
web/inc/i18n/th.php

@@ -699,17 +699,6 @@ $LANG['th'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     'ทางลัดต่างๆ ได้แรงบันดาลใจจากตัวจัดการไฟล์ magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a>',
 
-    'Licence Key' => 'License Key',
-    'Enter License Key' => 'กรอก License Key',
-    'Buy Licence' => 'ซื้อ License',
-    'Buy Lifetime License' => 'ซื้อ License แบบถาวร',
-    'Disable and Cancel License' => 'ปิดการใช้งาน และยกเลิก License',
-    'Licence Activated' => 'เปิดใช้งาน License แล้ว',
-    'Licence Deactivated' => 'ปิดการใช้งาน License แล้ว',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'จำกัดผู้ใช้เพื่อไม่ให้ใช้ SSH และเข้าถึงไดเร็กทอรี่ของตนเองเท่านั้น',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'เรียกดู, คัดลอก, แก้ไข, ดู, และเรียกค้นหาไฟล์โดเมนทั้งหมดของเว็บโดยใช้ตัวจัดการไฟล์ที่มีคุณลักษณะครบถ้วน',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'สิ่งนี้ไม่ใช่โมดูลฟรี, คุณจะต้องซื้อ License Key เพื่อเปิดใช้งาน',
-
     'Minutes' => 'นาที',
     'Hourly' => 'รายชั่วโมง',
     'Run Command' => 'รันคำสั่ง',
@@ -759,4 +748,107 @@ $LANG['th'] = array(
 
     'Theme' => 'ลักษณะ',
     'Operating System' => 'ระบบปฏิบัติการ',
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+    
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 103 - 11
web/inc/i18n/tr.php

@@ -697,17 +697,6 @@ $LANG['tr'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         'kısayollar muhteşem dosya yöneticisi <a href="https://www.midnight-commander.org/">Midnight Commander</a> arayüzünden esinlenilmiştir',
 
-    'Licence Key' => 'Lisans Anahtarı',
-    'Enter License Key' => 'Lisans Anahtarını Girin',
-    'Buy Licence' => 'Lisans Satın Al',
-    'Buy Lifetime License' => 'Ömür Boyu Lisans Satın Al',
-    'Disable and Cancel Licence' => 'Lisansı Devre Dışı Bırak ve İptal Et',
-    'Licence Activated' => 'Lisans Aktif',
-    'Licence Deactivated' => 'Lisans Pasif',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Kullanıcılar SSH ile sadece kendi ev dizinine erişebilir.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Tam özellikli Dosya Yöneticisi ile alan adınızdaki tüm dosyalarda listeleme, kopyalama, düzenleme ve görüntüleme yapabilirsiniz.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Bu ticari bir modül, bunu etkinleştirmek için lisans anahtarı satın almanız gerekir.',
-
     'Minutes' => 'Dakikalık',
     'Hourly' => 'Saatlik',
     'Run Command' => 'Komutu Çalıştır',
@@ -757,4 +746,107 @@ $LANG['tr'] = array(
 
     'Theme' => 'Görünüm',
     'Operating System' => 'İşletim Sistemi',
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+    
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 104 - 11
web/inc/i18n/tw.php

@@ -701,17 +701,6 @@ $LANG['tw'] = array(
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
         "快捷鍵的想法是由 magnificent GNU <a href='https://www.midnight-commander.org/'>Midnight Commander</a> 檔案管理員啟發的",
 
-    'Licence Key' => '授權金鑰',
-    'Enter License Key' => '輸入授權金鑰',
-    'Buy Licence' => '購買授權',
-    'Buy Lifetime License' => '購買永久授權',
-    'Disable and Cancel Licence' => '刪除並且取消授權',
-    'Licence Activated' => '授權已啟用',
-    'Licence Deactivated' => '授權已停用',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => '禁止使用者使用 SSH,並且只能存取他們自己的資料夾',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => '使用全能的檔案管理員瀏覽、複製、編輯、存取你所有的網站資料',
-    'This is a commercial module, you would need to purchace license key to enable it.' => '這是一個付費模組,您需要購買授權金鑰才能啟用它。',
-
     'Minutes' => '分鐘',
     'Hourly' => '小時',
     'Run Command' => '執行指令',
@@ -756,4 +745,108 @@ $LANG['tw'] = array(
     'Do not use encryption' => '不要使用加密',
 
     'maximum characters length, including prefix' => '最多 %s 字元 (包含前綴)',
+
+
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 103 - 12
web/inc/i18n/ua.php

@@ -670,17 +670,7 @@ $LANG['ua'] = array(
     'Add File to the Current Selection' => 'Додати файли до поточного виділення',
     'Select All Files' => 'Виділити всі файли',
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
-        'скорочення позичені у файлогово менеджера GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a>',
-    'Licence Key' => 'Ліцензійний ключ',
-    'Enter License Key' => 'Введіть ліцензійний ключ',
-    'Buy Licence' => 'Придбати ліцензію',
-    'Buy Lifetime License' => 'Придбати довічну ліцензію',
-    'Disable and Cancel Licence' => 'Відключити та скасувати всі ліцензії',
-    'Licence Activated' => 'Ліцензію активовано',
-    'Licence Deactivated' => 'Ліцензію деактивовано',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Обмежити користувачів, так що вони не можуть використовувати SSH і мають доступ тільки до домашньої теки.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Перегляд, копіювання, редагування, переглядання та використання всіх файлів веб-доменів за допомогою повнофункціонального Файлового менеджеру.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Це коммерційний модуль, ви повинні придбати ліцензіний ключ для увімкнення.',
+        'скорочення позичені у файловогово менеджера GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a>',
     'Minutes' => 'Щохвилини',
     'Hourly' => 'Щогодини',
     'Run Command' => 'Виконати команду',
@@ -729,5 +719,106 @@ $LANG['ua'] = array(
 	'Force SSL/HTTPS' => 'Примусовий редирект HTTP-на-HTTPS',
     'Theme' => 'Зовнішній вигляд',
     'Operating System' => 'Операційна система',
+    'Please wait while php is installed or removed' => 'Будь ласка, зачекайте поки PHP інсталюється чи видаляється.',
+    'Avoid adding web domains on admin account' => 'Переконливо рекомендується <a href="/add/user/">створити звичайний акаунт</a> перш ніж створювати веб домени з міркувань безпеки.',
     
-);
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Поле SSH Key не може бути пустим',
+    'SSH KEY is invalid' => 'Неправильний SSH key ',
+    'SSH KEY already exists' => 'SSH вже існує',
+    'SSH KEY Added' => 'SSH key додано',
+    'Add SSH Key' => 'Додати SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Ви впевнені, що хочете видалити SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Керування SSH keys',
+ 
+    //Header 
+    'Fm' => 'Файли',
+    //PHP Cli
+    'PHP CLI Version' => ' Версія PHP CLI ',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'Новий список IP ',
+    'Ip List Name' => 'Назва списку IP ',
+    'Data Source' => 'Джерело даних',
+    'Ip Version' => ' Версія IP',
+    'Autoupdate' => 'Автооновлення',
+    'Add IP list' => 'Додати список IP ',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'Список IP створено успішно',
+    'DELETE_IPSET_CONFIRMATION' => 'Ви впевнені, що хочете видалити список IP %s',
+    '1 Ipset list' => '1 список Ipset',
+    '%s Ipset lists' => '%s списків Ipset ',
+    'There are currently no IP lists defined.' => 'Не задано жодного списку IP.',
+    'list ipset' => 'Керування списками IP',
+    
+    //Backup
+    'File Name' => 'Ім`я файлу ',
+    'Size' => 'Розмір',
+    'Runtime' => 'Витрачено часу',
+    //Logs
+    'Refresh' => 'Оновити',
+    'Time' => 'Час',
+    'Value' => 'Значення',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 БД SQL ',
+    '%s SQL databases' => '%s БД SQL ',
+    //mail
+    '1 mail domain' => '1 поштовий домен',
+    '%s mail domains' => '%s поштових доменів',
+    //web
+    '1 web domain' => '1 веб домен',
+    '%s web domains' => '%s веб доменів',
+    
+    //rrd
+    'Bandwidth Usage' => 'Використання трафіку',
+    
+    //reset
+    'Forgot Password' => 'Забули пароль?',
+    //web
+    'Quick Install App' => 'Встановити додаток',
+    //webapp 
+    'version' => 'версія',
+    'Setup' => 'Установка',
+    //Server
+    'Restart' => 'Рестарт',
+    'Mail Server' => 'Поштовий сервер',
+    'Enabled multi PHP versions' => 'Кілька версій PHP',
+    'Service' => 'Сервіс',
+    'Description' => 'Опис',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Встановити мовою за замовчуванням для всіх користувачів',
+    
+    //2FA 
+    'Forgot token' => 'Забули токен?',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'ДФА успішно вимкнено.<br><br>Ви можете увійти в панель.',
+    'Reset 2FA' => 'Скинути ДФА',
+    '2FA Reset Code' => 'Код скидання ДФА',
+    'Invalid or missing token' => 'Неправильний або відсутній токен',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Ви впевнені, що хочете видалити логи?',
+
+    'Force SSL/HTTPS' => 'Включити редирект HTTP-на-HTTPS',
+    'Enable SSL HSTS' => 'Включити HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'ДФА',
+    'Enable 2FA' => 'Включити ДФА',
+    'Please scan the code below in your 2FA application:' => 'Щоб завершити налаштування ДФА, скануйте the QR код нижче<br />використовуючи відповідний додаток (наприклад <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Код скидання ДФА:',
+);

+ 102 - 10
web/inc/i18n/ur.php

@@ -679,16 +679,6 @@ $LANG['ur'] = array(
     'Select All Files' => 'تمام فائلوں کو منتخب',
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
     '.فائل مینیجر <a href="https://www.midnight-commander.org/">Midnight Commander</a> شارٹ کٹ شاندار GNU سے متاثر ہیں',
-    'Licence Key'  => 'لائسنس کلید',
-    'Enter License Key'  => 'لائسنس کلید درج کریں',
-    'Buy Licence'  => 'ابھی لائسنس',
-    'Buy Lifetime License'  => 'ابھی لائف ٹائم لائسنس',
-    'Disable and Cancel Licence'  => 'غیر فعال کریں اور لائسنس منسوخ',
-    'Licence Activated'  => 'لائسنس چالو',
-    'Licence Deactivated'  => 'لائسنس غیر فعال',
-    'Restrict users so that they cannot use SSH and access only their home directory.'  => 'وہ SSH اور رسائی صرف ان کے گھر کی ڈائریکٹری کا استعمال نہیں کر سکتے ہیں تاکہ صارفین کو محدود کریں.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.'  => 'براؤز کریں، کاپی، ترمیم، دیکھیں، اور مکمل طور پر نمایاں فائل مینیجر کا استعمال کرتے ہوئے آپ کی ویب ڈومین فائلوں کی تمام بازیافت.',
-    'This is a commercial module, you would need to purchace license key to enable it.'  => 'یہ ایک تجارتی ماڈیول ہے، آپ اسے چالو کرنے کے لئے لائسنس کی چابی purchace کرنے کی ضرورت گا.',
     'Minutes'  => 'منٹس',
     'Hourly'  => 'گھنٹہ وار',
     'Run Command'  => 'چلائیں کمان',
@@ -736,4 +726,106 @@ $LANG['ur'] = array(
     'Add Sub Domain' => 'ذیلی ڈومین کا اضافہ کریں',	
     'Theme' => 'ظہور',
     'Operating System' => 'اشتغالی نظام',
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 102 - 11
web/inc/i18n/vi.php

@@ -698,17 +698,6 @@ $LANG['vi'] = array(
     'Select All Files' => 'Chọn tất cả các tệp',
     'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' => 'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
 
-    'Licence Key' => 'Khóa bản quyền',
-    'Enter License Key' => 'Nhập Khóa bản quyền',
-    'Buy Licence' => 'Mua bản quyền',
-    'Buy Lifetime License' => 'Mua bản quyền trọn đời',
-    'Disable and Cancel Licence' => 'Vô hiệu hoá và Hủy bỏ Giấy phép Bản Quyền',
-    'Licence Activated' => 'Bản quyền đã được kích hoạt',
-    'Licence Deactivated' => 'Bản quyền đã bị hủy kích hoạt',
-    'Restrict users so that they cannot use SSH and access only their home directory.' => 'Hạn chế người dùng không thể dùng SSH và chỉ có thể truy cập thư mục home của họ.',
-    'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Duyệt tệp, sao chép, chỉnh sửa, xem, và lấy tất cả các tệp tin từ tất cả các tên miền của bạn bằng cách sử dụng trình quản lý tệp tin đầy đủ tính năng.',
-    'This is a commercial module, you would need to purchace license key to enable it.' => 'Đây là một module thương mại, bạn sẽ cần phải mua key bản quyền để kích hoạt nó.',
-
     'Minutes' => 'Phút',
     'Hourly' => 'Hàng giờ',
     'Run Command' => 'Chạy lệnh',
@@ -758,4 +747,106 @@ $LANG['vi'] = array(
     
     'Theme' => 'Xuất hiện',
     'Operating System' => 'Hệ điều hành',
+    'Please wait while php is installed or removed' => 'Please wait until the process has completed and do not refresh the page.',
+    'Avoid adding web domains on admin account' => 'It is strongly advised to <a href="/add/user/">create a standard user account</a> before adding web domains to the server due to the increased privileges the admin account possesses and potential security risks.',
+    
+    //SSH Key
+    'Field SSH_KEY can not be blank.' => 'Field SSH Key must not be blank',
+    'SSH KEY is invalid' => 'SSH key is invalid',
+    'SSH KEY already exists' => 'SSH key already exists',
+    'SSH KEY Added' => 'SSH key has been added',
+    'Add SSH Key' => 'Add SSH key',
+    'SSH KEY' => 'SSH Key',    
+    'DELETE_KEY_CONFIRM' => 'Are you sure you want to delete SSH key %s?',
+    'SSH_ID' => 'SSH ID',
+    'Manage SSH keys' => 'Manage SSH keys',
+ 
+    //Header 
+    'Fm' => 'Files',
+    //PHP Cli
+    'PHP CLI Version' => 'PHP CLI Version',
+
+    //Ipset Firewall rules
+    'Adding Firewall Ipset List' => 'New IP list',
+    'Ip List Name' => 'IP List Name',
+    'Data Source' => 'Data Source',
+    'Ip Version' => 'IP Version',
+    'Autoupdate' => 'Auto Update',
+    'Add IP list' => 'Add IP list',
+    'BLACKLIST' => 'BLACKLIST',
+    'IPVERSE' => 'IPVERSE',
+    'IPSET_CREATED_OK' => 'IP list created successfully',
+    'DELETE_IPSET_CONFIRMATION' => 'Are you sure you want to delete IP list %s',
+    '1 Ipset list' => '1 IP list',
+    '%s Ipset lists' => '%s IP lists',
+    'There are currently no IP lists defined.' => 'There are currently no IP lists defined.',
+    'list ipset' => 'Manage IP lists',
+    
+    //Backup
+    'File Name' => 'File Name',
+    'Size' => 'Size',
+    'Runtime' => 'Runtime',
+    //Logs
+    'Refresh' => 'Refresh',
+    'Time' => 'Time',
+    'Value' => 'Value',
+    
+    //DNS 
+    'default' => 'default',
+    '1 DNS zone' => '1 DNS zone',
+    '%s DNS zones' => '%s DNS zones',
+    'Add Record' => 'Add Record',
+    //user
+    '1 user account' => '1 user account',
+    '%s user accounts' => '%s user accounts',
+    //database
+    '1 SQL database' => '1 SQL database',
+    '%s SQL databases' => '%s SQL databases',
+    //mail
+    '1 mail domain' => '1 mail domain',
+    '%s mail domains' => '%s mail domains',
+    //web
+    '1 web domain' => '1 web domain',
+    '%s web domains' => '%s web domains',
+    
+    //rrd
+    'Bandwidth Usage' => 'Bandwidth Usage',
+    
+    //reset
+    'Forgot Password' => 'Forgot Password',
+    //web
+    'Quick Install App' => 'Quick Install App',
+    //webapp 
+    'version' => 'version',
+    'Setup' => 'Setup',
+    //Server
+    'Restart' => 'Restart',
+    'Mail Server' => 'Mail Server',
+    'Enabled multi PHP versions' => 'Enabled PHP versions',
+    'Service' => 'Service',
+    'Description' => 'Description',
+    
+    //header
+    'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Unlock Account',
+    '2FA Token' => 'OTP PIN',
+    '2FA Reset successfully' => 'Two-factor authentication is now turned off for your account.<br><br>You may now proceed to log in.',
+    'Reset 2FA' => 'Unlock Account',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
+
+    'DELETE_LOGS_CONFIRMATION'  => 'Are you sure you want to delete the logs?',
+
+    'Force SSL/HTTPS' => 'Enable automatic HTTP-to-HTTPS redirection',
+    'Enable SSL HSTS' => 'Enable HTTP Strict Transport Security (HSTS) <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fas fa-question-circle"></i></a>',
+
+    '2 Factor Authentication' => 'Two-factor Authentication',
+    'Enable 2FA' => 'Enable two-factor authentication',
+    'Please scan the code below in your 2FA application:' => 'To finish setting up two-factor authentication, scan the QR code below<br />using an authentication app (such as <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a>):',
+    '2FA Reset Code:' => 'Account Recovery Code:',
 );

+ 1 - 1
web/js/events.js

@@ -185,7 +185,7 @@ VE.helpers.initAdditionalPasswordFieldElements = function(ref) {
     $(ref).prop('autocomplete', 'off');
 
     var enabled_html = enabled ? '' : 'show-passwords-enabled-action';
-    var html = '<span class="hide-password"><img class="toggle-psw-visibility-icon ' + enabled_html + '" onClick="VE.helpers.toggleHiddenPasswordText(\'' + ref + '\', this)" src="/images/toggle_password.png" /></span>';
+    var html = '<span class="hide-password"><i class="toggle-psw-visibility-icon fas fa-eye-slash ' + enabled_html + '" onClick="VE.helpers.toggleHiddenPasswordText(\'' + ref + '\', this)"></i></span>';
     $(ref).after(html);
 }
 

+ 1 - 1
web/templates/admin/add_mail_acc.html

@@ -91,7 +91,7 @@
                                     <tr>
                                         <td>
                                             <input type="text" size="20" class="vst-input" name="v_quota" value="<?=htmlentities(trim($v_quota, "'"))?>">
-                                            <img class="unlim-trigger" id="unlim-quota" src="/images/unlim.png" />
+                                            <i class="unlim-trigger fas fa-infinity" id="unlim-quota" /</i>
                                         </td>
                                     </tr>
                                 <tr>

+ 10 - 10
web/templates/admin/add_package.html

@@ -189,7 +189,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_web_domains" value="<?=htmlentities(trim($v_web_domains, "'"))?>">
-                                    <img class="unlim-trigger" id="unlim-web-domains" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-web-domains"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -200,7 +200,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_web_aliases" value="<?=htmlentities(trim($v_web_aliases, "'"))?>">
-                                    <img id="unlim-web-aliases" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-web-aliases"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -211,7 +211,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_dns_domains" value="<?=htmlentities(trim($v_dns_domains, "'"))?>">
-                                    <img id="unlim-dns-domain" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-dns-domain"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -222,7 +222,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_dns_records" value="<?=htmlentities(trim($v_dns_records, "'"))?>">
-                                    <img id="unlim-dns-records" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-dns-records"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -233,7 +233,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_mail_domains" value="<?=htmlentities(trim($v_mail_domains, "'"))?>">
-                                    <img id="unlim-mail-domains" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-mail-domains"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -244,7 +244,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_mail_accounts" value="<?=htmlentities(trim($v_mail_accounts, "'"))?>">
-                                    <img id="unlim-mail-accounts" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-mail-accounts"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -255,7 +255,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_databases" value="<?=htmlentities(trim($v_databases, "'"))?>">
-                                    <img id="unlim-databases" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-databases"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -266,7 +266,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_cron_jobs" value="<?=htmlentities(trim($v_cron_jobs, "'"))?>">
-                                    <img id="unlim-cron-jobs" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-cron-jobs"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -287,7 +287,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_disk_quota" value="<?=htmlentities(trim($v_disk_quota, "'"))?>">
-                                    <img id="unlim-disk-quota" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-disk-quota"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -298,7 +298,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_bandwidth" value="<?=htmlentities(trim($v_bandwidth, "'"))?>">
-                                    <img name="unlim-bandwidth" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-bandwidth"></i>
                                 </td>
                             </tr>
                             <?php if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) {?>

+ 1 - 1
web/templates/admin/edit_mail_acc.html

@@ -84,7 +84,7 @@
                         <tr>
                           <td>
                                 <input type="text" size="20" class="vst-input" name="v_quota" value="<? if (!empty($v_quota)) {echo htmlentities(trim($v_quota, "'"));} else { echo "0"; } ?>">
-                                <img class="unlim-trigger" id="unlim-quota" src="/images/unlim.png" />
+                                <img class="fas fa-infinity unlim-trigger" id="unlim-quota"/>
                             </td>
                         </tr>
                         <tr>

+ 10 - 10
web/templates/admin/edit_package.html

@@ -186,7 +186,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_web_domains" value="<?=htmlentities(trim($v_web_domains, "'"))?>">
-                                    <img class="unlim-trigger" id="unlim-web-domains" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-web-domains"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -197,7 +197,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_web_aliases" value="<?=htmlentities(trim($v_web_aliases, "'"))?>">
-                                    <img id="unlim-web-aliases" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-web-aliases"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -208,7 +208,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_dns_domains" value="<?=htmlentities(trim($v_dns_domains, "'"))?>">
-                                    <img id="unlim-dns-domain" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-dns-domain"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -219,7 +219,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_dns_records" value="<?=htmlentities(trim($v_dns_records, "'"))?>">
-                                    <img id="unlim-dns-records" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-dns-records"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -230,7 +230,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_mail_domains" value="<?=htmlentities(trim($v_mail_domains, "'"))?>">
-                                    <img id="unlim-mail-domains" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-mail-domains"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -241,7 +241,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_mail_accounts" value="<?=htmlentities(trim($v_mail_accounts, "'"))?>">
-                                    <img id="unlim-mail-accounts" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-mail-accounts"></i>
                                 <td>
                             </tr>
                             <tr>
@@ -252,7 +252,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_databases" value="<?=htmlentities(trim($v_databases, "'"))?>">
-                                    <img id="unlim-databases" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-databases"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -263,7 +263,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_cron_jobs" value="<?=htmlentities(trim($v_cron_jobs, "'"))?>">
-                                    <img id="unlim-cron-jobs" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-cron-jobs"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -284,7 +284,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_disk_quota" value="<?=htmlentities(trim($v_disk_quota, "'"))?>">
-                                    <img id="unlim-disk-quota" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-disk-quota"></i>
                                 </td>
                             </tr>
                             <tr>
@@ -295,7 +295,7 @@
                             <tr>
                                 <td>
                                     <input type="text" size="20" class="vst-input" name="v_bandwidth" value="<?=htmlentities(trim($v_bandwidth, "'"))?>">
-                                    <img name="unlim-bandwidth" class="unlim-trigger" src="/images/unlim.png" />
+                                    <i class="unlim-trigger fas fa-infinity" id="unlim-bandwidth"></i>
                                 </td>
                             </tr>
                         <?php if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) {?>

+ 1 - 1
web/templates/admin/list_user.html

@@ -103,7 +103,7 @@ sort-bandwidth="<?=$data[$key]['U_BANDWIDTH']?>" sort-disk="<?=$data[$key]['U_DI
           </div>
               <div class="clearfix l-unit__stat-col--left wide-3 userlist-username"><b><a href="/login/?loginas=<?=$key?>&token=<?=$_SESSION['token']?>" title="<?=__('login as')?> <?=$key?>"><?=$key?> <span style="font-weight: normal !important;">(<?=$data[$key]['FNAME']?> <?=$data[$key]['LNAME']?>)</span></b></a>
                 <br />
-                <span class="userlist-email"><b><?=__('Email')?>:</b> <?=$data[$key]['CONTACT']?></span>
+                <div class="userlist-email"><b><?=__('Email')?>:</b> <?=$data[$key]['CONTACT']?></div>
               </div>
               <!-- START QUICK ACTION TOOLBAR AREA -->
               <div class="clearfix l-unit__stat-col--left text-right compact-3">

+ 3 - 1
web/templates/admin/panel.html

@@ -11,7 +11,9 @@
 		<a href="/list/user/" class="l-logo"></a>
 		<div class="l-menu clearfix noselect">
 			<div class="l-menu__item <?php if($TAB == 'WEB' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'DNS' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'MAIL' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'DB' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'BACKUP' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'CRON' ) echo 'l-menu__item--active' ?><?php if($TAB == 'PACKAGE' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'USER' ) echo 'l-menu__item--active' ?>"><a href="/list/user/"><i class="fas fa-tasks panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Records')?></a></div>
-			<div class="l-menu__item <?php if($TAB == 'FM' ) echo 'l-menu__item--active' ?>"><a href="/fm/"><i class="fas fa-folder-open panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Fm')?></a></div>
+			<?php if ((isset($_SESSION['FILE_MANAGER'])) && (!empty($_SESSION['FILE_MANAGER'])) && ($_SESSION['FILE_MANAGER'] == "true")) {?>
+				<div class="l-menu__item <?php if($TAB == 'FM' ) echo 'l-menu__item--active' ?>"><a href="/fm/"><i class="fas fa-folder-open panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Fm')?></a></div>
+			<?php } ?>
 			<div class="l-menu__item <?php if($TAB == 'LOG' ) echo 'l-menu__item--active' ?>"><a href="/list/log/"><i class="fas fa-history panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Log')?></a></div>
 			<div class="l-menu__item <?php if($TAB == 'STATS' ) echo 'l-menu__item--active' ?>"><a href="/list/stats/"><i class="fas fa-chart-line panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Statistics')?></a></div>
 		</div>

+ 1 - 1
web/templates/header.html

@@ -4,7 +4,7 @@
   <meta charset="utf-8">
   <link rel="icon" href="/images/favicon.ico" type="image/x-icon">
   <title><?php echo $_SERVER['HTTP_HOST']; ?> - <?=__($TAB)?> - <?=__('Hestia Control Panel');?></title>
-  <link type="text/css" rel="stylesheet" href="/css/styles.min.css?1446554105" />
+  <link type="text/css" rel="stylesheet" href="/css/styles.min.css?1446554106" />
   <link type="text/css" rel="stylesheet" href="/css/active-theme.css?<?php echo rand(); ?>" />
   <link type="text/css" href="/css/animate.min.css?1446554103" rel="stylesheet" />
   <link type="text/css" href="/css/jquery-custom-dialogs.css?1446554103" rel="stylesheet" />

+ 4 - 4
web/templates/login.html

@@ -29,11 +29,11 @@
                                         <tr>
                                             <td style="padding: 12px 0 0 2px;">
                                                 <?php print __('Password');?>
-                                                <span style="padding:0 0 0 14px;">
+                                                <div style="padding:0 6px 0px 14px; float:right;">
                                                     <a tabindex="5" class="vst-advanced" href="/reset/">
                                                         <?php print __('forgot password');?>
                                                     </a>
-                                                </span>
+                                                </div>
                                             </td>
                                         </tr>
                                         <tr>
@@ -44,11 +44,11 @@
                                         <tr class="twofa" style="display:none;">
                                             <td style="padding-top: 12px; padding-left:2px;">
                                                 <?php print __('2FA Token');?>
-                                                <span style="padding:0 0 0 10px;">
+                                                <div style="padding:0 6px 0px 14px; float:right;">
                                                     <a tabindex="5" class="vst-advanced" href="/reset2fa/">
                                                         <?php print __('Forgot token');?>
                                                     </a>
-                                                </span>
+                                                </div>
                                             </td>
                                         </tr>
                                         <tr class="twofa" style="display:none;">

+ 4 - 2
web/templates/user/panel.html

@@ -11,8 +11,10 @@
 		<a href="/list/web/" class="l-logo"></a>
 		<div class="l-menu clearfix noselect">
 			<div class="l-menu__item <?php if($TAB == 'WEB' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'DNS' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'MAIL' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'DB' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'BACKUP' ) echo 'l-menu__item--active' ?> <?php if($TAB == 'CRON' ) echo 'l-menu__item--active' ?>"><a href="/list/web/"><i class="fas fa-tasks panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Records')?></a></div>
-			<div class="l-menu__item <?php if($TAB == 'FM' ) echo 'l-menu__item--active' ?>"><a href="/fm/"><i class="fas fa-folder-open panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Fm')?></a></div>
-			<div class="l-menu__item <?php if($TAB == 'LOG' ) echo 'l-menu__item--active' ?>"><a href="/list/log/"><i class="fas fa-history panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Log')?></a></div>
+			<?php if ((isset($_SESSION['FILE_MANAGER'])) && (!empty($_SESSION['FILE_MANAGER'])) && ($_SESSION['FILE_MANAGER'] == "true")) {?>
+				<div class="l-menu__item <?php if($TAB == 'FM' ) echo 'l-menu__item--active' ?>"><a href="/fm/"><i class="fas fa-folder-open panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Fm')?></a></div>
+			<?php } ?>
+				<div class="l-menu__item <?php if($TAB == 'LOG' ) echo 'l-menu__item--active' ?>"><a href="/list/log/"><i class="fas fa-history panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Log')?></a></div>
 			<div class="l-menu__item <?php if($TAB == 'STATS' ) echo 'l-menu__item--active' ?>"><a href="/list/stats/"><i class="fas fa-chart-line panel-icon"></i>&nbsp;&nbsp;&nbsp;<?=__('Statistics')?></a></div>
 		</div>
 		<div class="l-profile noselect">

Some files were not shown because too many files changed in this diff