From 7357b75017c4def7e6ec900850e043faa804c514 Mon Sep 17 00:00:00 2001 From: Stefan Pejcic Date: Tue, 5 Nov 2024 17:49:07 +0100 Subject: [PATCH] cleanup --- configuration/.github/scripts/get_cf_ips.sh | 22 + .../.github/workflows/trigger-sync.yml | 21 + .../.github/workflows/update_cf_ips.yml | 36 + .../.github/workflows/update_dns_date.yml | 35 + configuration/.gitignore | 3 + configuration/bind9/zone_template.txt | 2 +- configuration/clamav/extensions.txt | 5 + .../docker/compose/new-docker-compose.yml | 5 +- .../data => configuration/ftp/users}/.gitkeep | 0 .../mysql/initialize/0.4/mariadb_plans.sql | 33 + .../mysql/initialize/0.4/mysql_plans.sql | 33 + configuration/nginx/default_page.html | 43 + .../nginx/vhosts/docker_apache_domain.conf | 24 +- .../nginx/vhosts/docker_nginx_domain.conf | 24 +- configuration/openadmin/config/admin.ini | 5 + configuration/openpanel/conf/openpanel.config | 6 +- configuration/varnish/default | 2 +- configuration/varnish/default.vcl | 4 +- docker/2083/Dockerfile | 59 - docker/2083/requirements.txt | 32 - docker/2087/Dockerfile | 73 - docker/2087/requirements.txt | 18 - docker/INSTALL.sh | 912 ----- docker/README.md | 2 + docker/alpine/apache/Dockerfile | 149 - docker/docker-compose.yml | 155 - integrations/cpanel-import/cp-import.sh | 2 +- integrations/digitalocean/.github/CODEOWNERS | 1 + .../digitalocean/.github/CONTRIBUTING.md | 27 + integrations/digitalocean/.gitignore | 43 + integrations/whmcs/README.md | 36 - integrations/whmcs/openpanel.php | 666 ---- integrations/whmcs/whmcs.json | 22 - modules/example/example.py | 33 + modules/example/my_template.html | 38 + modules/example/search.json | 6 + .../admini/apache_nginx_conf_editor.html | 122 - templates/admini/autoinstaller.html | 174 - templates/admini/base.html | 1248 ------- templates/admini/cronjobs.html | 1045 ------ templates/admini/custom_code/custom.css | 1 - templates/admini/custom_code/custom.js | 1 - templates/admini/custom_code/in_footer.html | 1 - templates/admini/custom_code/in_header.html | 1 - templates/admini/dashboard/dashboard.html | 1244 ------- .../dashboard/knowledge_base_articles.json | 1 - .../knowledge_base_articles_default.json | 11 - .../admini/databases/edit_mysql_config.html | 186 - templates/admini/databases/mysql.html | 743 ---- templates/admini/databases/processlist.html | 37 - templates/admini/databases/remote_mysql.html | 191 - templates/admini/domains/domains.html | 892 ----- templates/admini/domains/edit_dns_zone.html | 752 ---- templates/admini/domains/edit_vhost.html | 19 - templates/admini/domains/logs.html | 25 - templates/admini/domains/logs_single.html | 1 - templates/admini/elasticsearch.html | 280 -- templates/admini/emails/accounts.html | 395 -- templates/admini/emails/single_account.html | 511 --- templates/admini/error_pages/404.html | 1 - templates/admini/error_pages/500.html | 1 - templates/admini/files/backup.html | 540 --- templates/admini/files/disk_usage.html | 255 -- templates/admini/files/edit_file.html | 179 - templates/admini/files/filemanager.html | 2385 ------------- templates/admini/files/fix_permissions.html | 101 - templates/admini/files/ftp.html | 530 --- templates/admini/files/inodes.html | 228 -- templates/admini/flarum.html | 708 ---- templates/admini/ip_blocker.html | 153 - templates/admini/malware_scanner.html | 163 - templates/admini/manager/.gitkeep | 0 templates/admini/manager/flarum.html | 1017 ------ templates/admini/manager/nodejs.html | 865 ----- templates/admini/manager/python.html | 863 ----- templates/admini/manager/wordpress.html | 2229 ------------ templates/admini/mautic.html | 710 ---- templates/admini/memcached.html | 320 -- templates/admini/partials/_shortcuts.html | 259 -- templates/admini/partials/notifications.html | 42 - templates/admini/partials/pagespeed.html | 200 -- .../admini/partials/phpmyadmin_link.html | 89 - templates/admini/partials/screenshot.html | 18 - templates/admini/partials/sidebar.html | 936 ----- templates/admini/php/ini_editor.html | 71 - templates/admini/php/settings.html | 516 --- templates/admini/pm2.html | 535 --- templates/admini/process_manager.html | 114 - templates/admini/redis.html | 321 -- templates/admini/sites.html | 68 - templates/admini/ssh.html | 214 -- templates/admini/ssl.html | 384 -- templates/admini/system/general.html | 139 - templates/admini/system/modsecurity.html | 208 -- templates/admini/system/server_info.html | 129 - templates/admini/system/services_status.html | 311 -- templates/admini/system/timezone.html | 78 - templates/admini/terminal/landing.html | 15 - templates/admini/terminal/running.html | 55 - templates/admini/user/account.html | 279 -- templates/admini/user/activity.html | 372 -- .../admini/user/forgot_password.html_TODO | 101 - templates/admini/user/history_usage.html | 250 -- templates/admini/user/login.html | 189 - templates/admini/user/loginlog.html | 105 - templates/admini/user/notifications.html | 28 - templates/admini/user/stats.html | 184 - templates/admini/user/twofa_settings.html | 187 - templates/admini/websites.html | 3164 ----------------- templates/admini/wordpress.html | 984 ----- templates/tabler/backups.html | 2962 --------------- templates/tabler/base.html | 1123 ------ templates/tabler/cluster.html | 61 - .../tabler/dashboard/cpu_per_core_usage.html | 156 - templates/tabler/dashboard/dashboard.html | 687 ---- templates/tabler/dashboard/get_started.html | 70 - .../tabler/dashboard/openpanel_news.html | 131 - .../tabler/dashboard/try_enterprise.html | 92 - templates/tabler/dashboard/usage_graphs.html | 170 - templates/tabler/domains/domains.html | 271 -- templates/tabler/domains/logs.html | 25 - templates/tabler/domains/logs_single.html | 1 - templates/tabler/emails/accounts.html | 94 - .../emails/mailserver_is_not_installed.html | 13 - .../tabler/emails/mailserver_is_stopped.html | 43 - templates/tabler/emails/queue.html | 1 - templates/tabler/emails/reports.html | 4 - templates/tabler/emails/settings.html | 1176 ------ templates/tabler/emails/webmail.html | 31 - templates/tabler/license.html | 287 -- templates/tabler/license_error.html | 77 - templates/tabler/login.html | 216 -- templates/tabler/notifications.html | 674 ---- templates/tabler/plans.html | 1897 ---------- templates/tabler/security/csf.html | 17 - .../tabler/security/firewall_settings.html | 912 ----- .../tabler/security/modsecurity_settings.html | 839 ----- templates/tabler/server/crons.html | 104 - templates/tabler/server/root_password.html | 80 - templates/tabler/server/ssh.html | 170 - templates/tabler/server/timezone.html | 77 - .../tabler/services/docker_settings.html | 387 -- templates/tabler/services/ftp.html | 176 - templates/tabler/services/logs.html | 113 - templates/tabler/services/nginx.html | 348 -- templates/tabler/services/resources.html | 106 - templates/tabler/services/status.html | 277 -- templates/tabler/settings/admin.html | 472 --- templates/tabler/settings/api.html | 306 -- templates/tabler/settings/general.html | 585 --- templates/tabler/settings/settings.html | 153 - templates/tabler/settings/user.html | 331 -- templates/tabler/system/404.html | 62 - templates/tabler/system/cpu_mem.html | 129 - templates/tabler/system/custom.html | 1 - .../tabler/system/email_system_report.html | 327 -- templates/tabler/system/email_template.html | 355 -- templates/tabler/system/new_user_email.html | 162 - templates/tabler/terms.html | 152 - templates/tabler/users/add.html | 203 -- templates/tabler/users/all.html | 212 -- .../tabler/users/import/display_users.html | 38 - .../tabler/users/import/import_users.html | 19 - .../users/import/list_import_cp_logs.html | 162 - templates/tabler/users/single.html | 1492 -------- 165 files changed, 442 insertions(+), 50838 deletions(-) create mode 100644 configuration/.github/scripts/get_cf_ips.sh create mode 100644 configuration/.github/workflows/trigger-sync.yml create mode 100644 configuration/.github/workflows/update_cf_ips.yml create mode 100644 configuration/.github/workflows/update_dns_date.yml create mode 100644 configuration/.gitignore create mode 100644 configuration/clamav/extensions.txt rename {templates/tabler/emails/data => configuration/ftp/users}/.gitkeep (100%) create mode 100644 configuration/nginx/default_page.html delete mode 100644 docker/2083/Dockerfile delete mode 100644 docker/2083/requirements.txt delete mode 100644 docker/2087/Dockerfile delete mode 100644 docker/2087/requirements.txt delete mode 100644 docker/INSTALL.sh delete mode 100644 docker/alpine/apache/Dockerfile delete mode 100644 docker/docker-compose.yml create mode 100644 integrations/digitalocean/.github/CODEOWNERS create mode 100644 integrations/digitalocean/.github/CONTRIBUTING.md create mode 100644 integrations/digitalocean/.gitignore delete mode 100644 integrations/whmcs/README.md delete mode 100644 integrations/whmcs/openpanel.php delete mode 100644 integrations/whmcs/whmcs.json create mode 100644 modules/example/example.py create mode 100644 modules/example/my_template.html create mode 100644 modules/example/search.json delete mode 100644 templates/admini/apache_nginx_conf_editor.html delete mode 100644 templates/admini/autoinstaller.html delete mode 100644 templates/admini/base.html delete mode 100644 templates/admini/cronjobs.html delete mode 100644 templates/admini/custom_code/custom.css delete mode 100644 templates/admini/custom_code/custom.js delete mode 100644 templates/admini/custom_code/in_footer.html delete mode 100644 templates/admini/custom_code/in_header.html delete mode 100644 templates/admini/dashboard/dashboard.html delete mode 100644 templates/admini/dashboard/knowledge_base_articles.json delete mode 100644 templates/admini/dashboard/knowledge_base_articles_default.json delete mode 100644 templates/admini/databases/edit_mysql_config.html delete mode 100644 templates/admini/databases/mysql.html delete mode 100644 templates/admini/databases/processlist.html delete mode 100644 templates/admini/databases/remote_mysql.html delete mode 100644 templates/admini/domains/domains.html delete mode 100644 templates/admini/domains/edit_dns_zone.html delete mode 100644 templates/admini/domains/edit_vhost.html delete mode 100644 templates/admini/domains/logs.html delete mode 100644 templates/admini/domains/logs_single.html delete mode 100644 templates/admini/elasticsearch.html delete mode 100644 templates/admini/emails/accounts.html delete mode 100644 templates/admini/emails/single_account.html delete mode 100644 templates/admini/error_pages/404.html delete mode 100644 templates/admini/error_pages/500.html delete mode 100644 templates/admini/files/backup.html delete mode 100644 templates/admini/files/disk_usage.html delete mode 100644 templates/admini/files/edit_file.html delete mode 100644 templates/admini/files/filemanager.html delete mode 100644 templates/admini/files/fix_permissions.html delete mode 100644 templates/admini/files/ftp.html delete mode 100644 templates/admini/files/inodes.html delete mode 100644 templates/admini/flarum.html delete mode 100644 templates/admini/ip_blocker.html delete mode 100644 templates/admini/malware_scanner.html delete mode 100644 templates/admini/manager/.gitkeep delete mode 100644 templates/admini/manager/flarum.html delete mode 100644 templates/admini/manager/nodejs.html delete mode 100644 templates/admini/manager/python.html delete mode 100644 templates/admini/manager/wordpress.html delete mode 100644 templates/admini/mautic.html delete mode 100644 templates/admini/memcached.html delete mode 100644 templates/admini/partials/_shortcuts.html delete mode 100644 templates/admini/partials/notifications.html delete mode 100644 templates/admini/partials/pagespeed.html delete mode 100644 templates/admini/partials/phpmyadmin_link.html delete mode 100644 templates/admini/partials/screenshot.html delete mode 100644 templates/admini/partials/sidebar.html delete mode 100644 templates/admini/php/ini_editor.html delete mode 100644 templates/admini/php/settings.html delete mode 100644 templates/admini/pm2.html delete mode 100644 templates/admini/process_manager.html delete mode 100644 templates/admini/redis.html delete mode 100644 templates/admini/sites.html delete mode 100644 templates/admini/ssh.html delete mode 100644 templates/admini/ssl.html delete mode 100644 templates/admini/system/general.html delete mode 100644 templates/admini/system/modsecurity.html delete mode 100644 templates/admini/system/server_info.html delete mode 100644 templates/admini/system/services_status.html delete mode 100644 templates/admini/system/timezone.html delete mode 100644 templates/admini/terminal/landing.html delete mode 100644 templates/admini/terminal/running.html delete mode 100644 templates/admini/user/account.html delete mode 100644 templates/admini/user/activity.html delete mode 100644 templates/admini/user/forgot_password.html_TODO delete mode 100644 templates/admini/user/history_usage.html delete mode 100644 templates/admini/user/login.html delete mode 100644 templates/admini/user/loginlog.html delete mode 100644 templates/admini/user/notifications.html delete mode 100644 templates/admini/user/stats.html delete mode 100644 templates/admini/user/twofa_settings.html delete mode 100644 templates/admini/websites.html delete mode 100644 templates/admini/wordpress.html delete mode 100644 templates/tabler/backups.html delete mode 100644 templates/tabler/base.html delete mode 100644 templates/tabler/cluster.html delete mode 100644 templates/tabler/dashboard/cpu_per_core_usage.html delete mode 100644 templates/tabler/dashboard/dashboard.html delete mode 100644 templates/tabler/dashboard/get_started.html delete mode 100644 templates/tabler/dashboard/openpanel_news.html delete mode 100644 templates/tabler/dashboard/try_enterprise.html delete mode 100644 templates/tabler/dashboard/usage_graphs.html delete mode 100644 templates/tabler/domains/domains.html delete mode 100644 templates/tabler/domains/logs.html delete mode 100644 templates/tabler/domains/logs_single.html delete mode 100644 templates/tabler/emails/accounts.html delete mode 100644 templates/tabler/emails/mailserver_is_not_installed.html delete mode 100644 templates/tabler/emails/mailserver_is_stopped.html delete mode 100644 templates/tabler/emails/queue.html delete mode 100644 templates/tabler/emails/reports.html delete mode 100644 templates/tabler/emails/settings.html delete mode 100644 templates/tabler/emails/webmail.html delete mode 100644 templates/tabler/license.html delete mode 100644 templates/tabler/license_error.html delete mode 100644 templates/tabler/login.html delete mode 100644 templates/tabler/notifications.html delete mode 100644 templates/tabler/plans.html delete mode 100644 templates/tabler/security/csf.html delete mode 100644 templates/tabler/security/firewall_settings.html delete mode 100644 templates/tabler/security/modsecurity_settings.html delete mode 100644 templates/tabler/server/crons.html delete mode 100644 templates/tabler/server/root_password.html delete mode 100644 templates/tabler/server/ssh.html delete mode 100644 templates/tabler/server/timezone.html delete mode 100644 templates/tabler/services/docker_settings.html delete mode 100644 templates/tabler/services/ftp.html delete mode 100644 templates/tabler/services/logs.html delete mode 100644 templates/tabler/services/nginx.html delete mode 100644 templates/tabler/services/resources.html delete mode 100644 templates/tabler/services/status.html delete mode 100644 templates/tabler/settings/admin.html delete mode 100644 templates/tabler/settings/api.html delete mode 100644 templates/tabler/settings/general.html delete mode 100644 templates/tabler/settings/settings.html delete mode 100644 templates/tabler/settings/user.html delete mode 100644 templates/tabler/system/404.html delete mode 100644 templates/tabler/system/cpu_mem.html delete mode 100644 templates/tabler/system/custom.html delete mode 100644 templates/tabler/system/email_system_report.html delete mode 100644 templates/tabler/system/email_template.html delete mode 100644 templates/tabler/system/new_user_email.html delete mode 100644 templates/tabler/terms.html delete mode 100644 templates/tabler/users/add.html delete mode 100644 templates/tabler/users/all.html delete mode 100644 templates/tabler/users/import/display_users.html delete mode 100644 templates/tabler/users/import/import_users.html delete mode 100644 templates/tabler/users/import/list_import_cp_logs.html delete mode 100644 templates/tabler/users/single.html diff --git a/configuration/.github/scripts/get_cf_ips.sh b/configuration/.github/scripts/get_cf_ips.sh new file mode 100644 index 00000000..ef3c07c9 --- /dev/null +++ b/configuration/.github/scripts/get_cf_ips.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +cf_ips="$(curl -fsLm5 --retry 3 https://api.cloudflare.com/client/v4/ips)" + +if [ -n "$cf_ips" ] && [ "$(echo "$cf_ips" | jq -r '.success')" = "true" ]; then + cf_inc="nginx/cloudflare.inc" + + echo "[ * ] Updating Cloudflare IP Ranges for Nginx..." + echo "# Cloudflare IP Ranges" > $cf_inc + echo "" >> $cf_inc + echo "# IPv4" >> $cf_inc + for ipv4 in $(echo "$cf_ips" | jq -r '.result.ipv4_cidrs[]' | sort); do + echo "set_real_ip_from $ipv4;" >> $cf_inc + done + echo "" >> $cf_inc + echo "# IPv6" >> $cf_inc + for ipv6 in $(echo "$cf_ips" | jq -r '.result.ipv6_cidrs[]' | sort); do + echo "set_real_ip_from $ipv6;" >> $cf_inc + done + echo "" >> $cf_inc + echo "real_ip_header CF-Connecting-IP;" >> $cf_inc +fi diff --git a/configuration/.github/workflows/trigger-sync.yml b/configuration/.github/workflows/trigger-sync.yml new file mode 100644 index 00000000..93305770 --- /dev/null +++ b/configuration/.github/workflows/trigger-sync.yml @@ -0,0 +1,21 @@ +name: Trigger sync of conf + +on: + push: + branches: + - main #always + +jobs: + trigger: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + repository-projects: write + steps: + - name: Trigger Sync + run: | + curl -X POST -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/stefanpejcic/OpenPanel/dispatches \ + -d '{"event_type":"sync-configuration"}' diff --git a/configuration/.github/workflows/update_cf_ips.yml b/configuration/.github/workflows/update_cf_ips.yml new file mode 100644 index 00000000..7a2f6be4 --- /dev/null +++ b/configuration/.github/workflows/update_cf_ips.yml @@ -0,0 +1,36 @@ +name: Update Cloudflare IPs + +on: + schedule: + - cron: '0 10 * * *' + workflow_dispatch: # manual trigger + +permissions: + contents: write # to push + +jobs: + update_cf_ips: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Ensure get_cf_ips.sh is executable + run: chmod +x .github/scripts/get_cf_ips.sh + + - name: Install jq + run: sudo apt-get install -y jq + + - name: Run get_cf_ips.sh + run: .github/scripts/get_cf_ips.sh + + - name: Commit and push changes + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add nginx/cloudflare.inc + git commit -m "Update Cloudflare IPs" || echo "No changes to commit" + git push + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/configuration/.github/workflows/update_dns_date.yml b/configuration/.github/workflows/update_dns_date.yml new file mode 100644 index 00000000..f0f85cfa --- /dev/null +++ b/configuration/.github/workflows/update_dns_date.yml @@ -0,0 +1,35 @@ +name: Update Serial Number Daily + +on: + schedule: + - cron: '0 0 * * *' # Runs every day at midnight UTC + workflow_dispatch: # Allows manual triggering + +jobs: + update-serial: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + token: ${{ secrets.PAT_TOKEN }} + + - name: Update serial number + run: | + # Get today's date in YYYYMMDD format + DATE=$(date -u +"%Y%m%d") + + FILE="bind9/zone_template.txt" + + sed -i "s/[0-9]\{10\}/$(date +%Y%m%d)01/" $FILE + + - name: Commit changes + uses: EndBug/add-and-commit@v9 + with: + add: 'bind9/zone_template.txt' + message: 'Update serial number with current date' + author_name: 'GitHub Actions' + author_email: 'actions@github.com' + token: ${{ secrets.PAT_TOKEN }} + diff --git a/configuration/.gitignore b/configuration/.gitignore new file mode 100644 index 00000000..8e8f33d3 --- /dev/null +++ b/configuration/.gitignore @@ -0,0 +1,3 @@ +#.github/ +#.github/workflows/ +README.md diff --git a/configuration/bind9/zone_template.txt b/configuration/bind9/zone_template.txt index c91a647e..b4b88322 100644 --- a/configuration/bind9/zone_template.txt +++ b/configuration/bind9/zone_template.txt @@ -1,6 +1,6 @@ $TTL 1h @ IN SOA {ns1}. {ns2}. ( - 2024102501 ; Serial number + 2024110501 ; Serial number 1h ; Refresh interval 15m ; Retry interval 1w ; Expire interval diff --git a/configuration/clamav/extensions.txt b/configuration/clamav/extensions.txt new file mode 100644 index 00000000..feece644 --- /dev/null +++ b/configuration/clamav/extensions.txt @@ -0,0 +1,5 @@ +php +js +pdf +exe +py diff --git a/configuration/docker/compose/new-docker-compose.yml b/configuration/docker/compose/new-docker-compose.yml index 3cfad780..0e628251 100644 --- a/configuration/docker/compose/new-docker-compose.yml +++ b/configuration/docker/compose/new-docker-compose.yml @@ -29,8 +29,8 @@ services: restart: unless-stopped environment: - CLAMD_STARTUP_DELAY=30 - mem_limit: 0.25g - cpus: 0.25 + mem_limit: 1g + cpus: 1.0 # OpenPanel service running on port 2083 openpanel: @@ -55,6 +55,7 @@ services: - /usr/local/admin/scripts:/usr/local/admin/scripts - /var/log:/var/log - /etc/ufw:/etc/ufw + - /var/lib/csf/:/var/lib/csf/ - /etc/letsencrypt:/etc/letsencrypt - /etc/my.cnf:/etc/my.cnf - /etc/openpanel/:/etc/openpanel/ diff --git a/templates/tabler/emails/data/.gitkeep b/configuration/ftp/users/.gitkeep similarity index 100% rename from templates/tabler/emails/data/.gitkeep rename to configuration/ftp/users/.gitkeep diff --git a/configuration/mysql/initialize/0.4/mariadb_plans.sql b/configuration/mysql/initialize/0.4/mariadb_plans.sql index 819b2b5c..89cccd4b 100644 --- a/configuration/mysql/initialize/0.4/mariadb_plans.sql +++ b/configuration/mysql/initialize/0.4/mariadb_plans.sql @@ -108,6 +108,24 @@ CREATE TABLE `users` ( `plan_id` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + +-- +-- Table structure for table `active_sessions` +-- + +CREATE TABLE `active_sessions` ( + `id` int NOT NULL AUTO_INCREMENT, + `user_id` int NOT NULL, + `session_token` varchar(255) NOT NULL, + `ip_address` varchar(45) DEFAULT NULL, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, + `expires_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + -- -- Indexes for dumped tables -- @@ -143,6 +161,13 @@ ALTER TABLE `users` -- AUTO_INCREMENT for dumped tables -- + +-- +-- AUTO_INCREMENT for table `active_sessions` +-- +ALTER TABLE `active_sessions` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; + -- -- AUTO_INCREMENT for table `domains` -- @@ -171,6 +196,14 @@ ALTER TABLE `users` -- Constraints for dumped tables -- + +-- +-- Constraints for table `active_sessions` +-- +ALTER TABLE `active_sessions` + ADD CONSTRAINT `active_sessions_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`); + + -- -- Constraints for table `domains` -- diff --git a/configuration/mysql/initialize/0.4/mysql_plans.sql b/configuration/mysql/initialize/0.4/mysql_plans.sql index 8f87d303..69a41f00 100644 --- a/configuration/mysql/initialize/0.4/mysql_plans.sql +++ b/configuration/mysql/initialize/0.4/mysql_plans.sql @@ -108,6 +108,24 @@ CREATE TABLE `users` ( `plan_id` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + +-- +-- Table structure for table `active_sessions` +-- + +CREATE TABLE `active_sessions` ( + `id` int NOT NULL AUTO_INCREMENT, + `user_id` int NOT NULL, + `session_token` varchar(255) NOT NULL, + `ip_address` varchar(45) DEFAULT NULL, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, + `expires_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + -- -- Indexes for dumped tables -- @@ -143,6 +161,13 @@ ALTER TABLE `users` -- AUTO_INCREMENT for dumped tables -- + +-- +-- AUTO_INCREMENT for table `active_sessions` +-- +ALTER TABLE `active_sessions` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; + -- -- AUTO_INCREMENT for table `domains` -- @@ -171,6 +196,14 @@ ALTER TABLE `users` -- Constraints for dumped tables -- + +-- +-- Constraints for table `active_sessions` +-- +ALTER TABLE `active_sessions` + ADD CONSTRAINT `active_sessions_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`); + + -- -- Constraints for table `domains` -- diff --git a/configuration/nginx/default_page.html b/configuration/nginx/default_page.html new file mode 100644 index 00000000..d4bcc880 --- /dev/null +++ b/configuration/nginx/default_page.html @@ -0,0 +1,43 @@ + + + + + + + No website yet + + + +
+

Ready, set, internet 🎉

+

This domain currently has no website. Please check back later.

+
+ + diff --git a/configuration/nginx/vhosts/docker_apache_domain.conf b/configuration/nginx/vhosts/docker_apache_domain.conf index 9e10ed32..b84852ef 100644 --- a/configuration/nginx/vhosts/docker_apache_domain.conf +++ b/configuration/nginx/vhosts/docker_apache_domain.conf @@ -18,7 +18,17 @@ Require all granted - DirectoryIndex index.php index.html + DirectoryIndex index.php index.html default_page.html + + # Alias for default_page.html + Alias /default_page.html /etc/apache2/default_page.html + + + Require all granted + Options -Indexes + SetEnvIf Request_URI ^/default_page.html allow_default_page + + SetHandler "proxy:unix:/run/php/-fpm.sock|fcgi://localhost" @@ -52,7 +62,17 @@ Require all granted - DirectoryIndex index.php index.html + DirectoryIndex index.php index.html default_page.html + + # Alias for default_page.html + Alias /default_page.html /etc/apache2/default_page.html + + + Require all granted + Options -Indexes + SetEnvIf Request_URI ^/default_page.html allow_default_page + + SetHandler "proxy:unix:/run/php/-fpm.sock|fcgi://localhost" diff --git a/configuration/nginx/vhosts/docker_nginx_domain.conf b/configuration/nginx/vhosts/docker_nginx_domain.conf index 31d013d0..6ea00500 100644 --- a/configuration/nginx/vhosts/docker_nginx_domain.conf +++ b/configuration/nginx/vhosts/docker_nginx_domain.conf @@ -16,11 +16,18 @@ server { location / { real_ip_header X-Forwarded-For; set_real_ip_from 172.17.0.1; - try_files $uri $uri/ /index.php$is_args$args; - index index.php index.html; + try_files $uri $uri/ /index.php$is_args$args /default_page.html =404; + index index.php index.html default_page.html; autoindex on; } + location = /default_page.html { + alias /etc/nginx/default_page.html; + default_type text/html; + access_log off; + log_not_found off; + } + location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/-fpm.sock; @@ -62,11 +69,20 @@ server { location / { real_ip_header X-Forwarded-For; set_real_ip_from 172.17.0.1; - try_files $uri $uri/ /index.php$is_args$args; - index index.php index.html; + try_files $uri $uri/ /index.php$is_args$args /default_page.html =404; + index index.php index.html default_page.html; autoindex on; } + + location = /default_page.html { + alias /etc/nginx/default_page.html; + default_type text/html; + access_log off; + log_not_found off; + } + + location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/-fpm.sock; diff --git a/configuration/openadmin/config/admin.ini b/configuration/openadmin/config/admin.ini index ac77017f..5795bf62 100644 --- a/configuration/openadmin/config/admin.ini +++ b/configuration/openadmin/config/admin.ini @@ -1,2 +1,7 @@ [USERS] impersonate=no + + +[PANEL] +login_ratelimit=5 +login_blocklimit=20 diff --git a/configuration/openpanel/conf/openpanel.config b/configuration/openpanel/conf/openpanel.config index e209878a..1678bc77 100644 --- a/configuration/openpanel/conf/openpanel.config +++ b/configuration/openpanel/conf/openpanel.config @@ -23,9 +23,13 @@ ns3= ns4= email= logout_url= -enabled_modules=dns,favorites,phpmyadmin,temporary_links,ssh,crons,backups,wordpress,flarum,pm2,disk_usage,inodes,usage,terminal,services,webserver,fix_permissions,process_manager,ip_blocker,redis,memcached,login_history,activity,twofa,domains_visitors +enabled_modules=dns,notifications,favorites,phpmyadmin,temporary_links,ssh,crons,backups,wordpress,flarum,pm2,disk_usage,inodes,usage,terminal,services,webserver,fix_permissions,process_manager,ip_blocker,redis,memcached,login_history,activity,twofa,domains_visitors [USERS] +login_ratelimit=5 +login_blocklimit=20 +session_duration=30 +session_lifetime=300 password_reset=no twofa_nag=yes how_to_guides=yes diff --git a/configuration/varnish/default b/configuration/varnish/default index 51f4c7f9..8a599365 100644 --- a/configuration/varnish/default +++ b/configuration/varnish/default @@ -3,7 +3,7 @@ # Listen on port 6081, administration on localhost:6082, and forward to # one nginx server selected by the vcl file, based on the request. # -DAEMON_OPTS="-a 0.0.0.0:6081 \ +DAEMON_OPTS="-a 0.0.0.0:80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ diff --git a/configuration/varnish/default.vcl b/configuration/varnish/default.vcl index e5014a56..18e2d722 100644 --- a/configuration/varnish/default.vcl +++ b/configuration/varnish/default.vcl @@ -2,12 +2,14 @@ vcl 4.1; backend default { .host = "127.0.0.1"; - .port = "80"; + .port = "8080"; } sub vcl_recv { if (req.http.X-Forwarded-Proto == "https") { set req.http.X-Forwarded-Proto = "https"; + } else { + set req.http.X-Forwarded-Proto = "http"; } set req.backend_hint = default; } diff --git a/docker/2083/Dockerfile b/docker/2083/Dockerfile deleted file mode 100644 index d543b937..00000000 --- a/docker/2083/Dockerfile +++ /dev/null @@ -1,59 +0,0 @@ -# Use the official Python image as a base -FROM python:3.10-slim - -# Set the working directory -WORKDIR /usr/local/panel - -# Expose the port -EXPOSE 2083 - -# Install necessary packages -RUN apt-get update && apt-get install -y \ - procps \ - coreutils \ - sudo \ - wget \ - curl \ - default-mysql-client \ - zip \ - unzip \ - geoip-bin \ - && rm -rf /var/lib/apt/lists/* - -# Create the openpanel user and add to sudoers -RUN useradd -ms /bin/bash openpanel \ - && adduser openpanel sudo \ - && echo 'openpanel ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers - -# Copy the project files -COPY . . -COPY scripts/ /usr/local/admin/scripts/ - -# Make all bash scripts in this directory executable for root only -RUN chown root:root /usr/local/admin/scripts/* -RUN chmod +x -R /usr/local/admin/scripts/* - - -# Add opencli binary to the PATH -RUN cp /usr/local/admin/scripts/opencli /usr/local/bin/opencli -RUN chmod +x /usr/local/bin/opencli - -# Generate a list of commands for opencli -RUN opencli commands - -# Set autocomplete for all available opencli commands -RUN echo "# opencli aliases\n\ -ALIASES_FILE=\"/usr/local/admin/scripts/aliases.txt\"\n\ -generate_autocomplete() {\n\ - awk '{print \$NF}' \"\$ALIASES_FILE\"\n\ -}\n\ -complete -W \"\$(generate_autocomplete)\" opencli" >> /root/.bashrc - - -# Install Python dependencies -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt - - -# Set the CMD to run gunicorn and redirect stderr to stdout -CMD ["gunicorn", "-c", "/etc/openpanel/openpanel/service/service.config.py", "app:app", "--log-file", "-"] diff --git a/docker/2083/requirements.txt b/docker/2083/requirements.txt deleted file mode 100644 index 1267aa3e..00000000 --- a/docker/2083/requirements.txt +++ /dev/null @@ -1,32 +0,0 @@ -flask -gevent -gunicorn -psutil==5.9.8 -mysql-connector-python==8.3.0 -urllib3==1.26.5 -pyotp==2.9.0 -pyclamd==0.4.0 -bcrypt==3.2.0 -docker -flask_caching==2.1.0 -tldextract==5.1.1 -schedule==1.2.1 -flask_login==0.6.3 -markupsafe==2.1.5 -playwright==1.42.0 -gevent==24.2.1 -flask_mail==0.9.1 -flask_babel -flask_sslify==0.1.5 -flask_minify==0.42 -flask_limiter==3.5.1 -flask-talisman==1.1.0 -apscheduler==3.10.4 -setproctitle==1.3.3 -distro -requests -pyyaml -psutil -flask_sqlalchemy -Flask-JWT-Extended==4.6.0 -Flask-BasicAuth diff --git a/docker/2087/Dockerfile b/docker/2087/Dockerfile deleted file mode 100644 index 9e8970db..00000000 --- a/docker/2087/Dockerfile +++ /dev/null @@ -1,73 +0,0 @@ -# Use the official Python image as a base -FROM python:3.10-slim - -# Set the working directory -WORKDIR /usr/local/admin - -# need this fixed since WHMCS does not allow custom port to be defined.. -EXPOSE 2087 - -RUN apt-get update && apt-get install -y \ - procps \ - coreutils \ - sudo \ - wget \ - curl \ - default-mysql-client \ - sqlite3 \ - zip \ - unzip \ - geoip-bin \ - && rm -rf /var/lib/apt/lists/* - -RUN useradd -ms /bin/bash openadmin \ - && adduser openadmin sudo \ - && echo 'openadmin ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers - -# here will do wget or git clone - to avoid rebuilding image -COPY . . - -# Download and untar opencli -RUN mkdir -p scripts && \ - cd scripts && \ - wget -O compressed.tar.gz https://storage.googleapis.com/openpanel/0.1.6/get.openpanel.co/downloads/0.1.6/opencli/compressed.tar.gz && \ - tar -xzf compressed.tar.gz && \ - rm compressed.tar.gz && \ - cd .. - - -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt - - -# Make all bash scripts in this directory executable for root only -RUN chown root:root /usr/local/admin/scripts/* -RUN chmod +x -R /usr/local/admin/scripts/* - -# Add opencli binary to the PATH -RUN cp /usr/local/admin/scripts/opencli /usr/local/bin/opencli -RUN chmod +x /usr/local/bin/opencli - -# Generate a list of commands for opencli -RUN opencli commands - -# Set autocomplete for all available opencli commands -RUN echo "# opencli aliases\n\ -ALIASES_FILE=\"/usr/local/admin/scripts/aliases.txt\"\n\ -generate_autocomplete() {\n\ - awk '{print \$NF}' \"\$ALIASES_FILE\"\n\ -}\n\ -complete -W \"\$(generate_autocomplete)\" opencli" >> /root/.bashrc - - -# Create admin user and output credentials to Docker logs -RUN admin_password=$(openssl rand -base64 12 | tr -d '=+/') && \ - password_hash=$(python3 /usr/local/admin/core/users/hash $admin_password) && \ - sqlite3 /ets/openpanel/openadmin/users.db "CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, role TEXT NOT NULL DEFAULT 'user', is_active BOOLEAN DEFAULT 1 NOT NULL);" && \ - sqlite3 /ets/openpanel/openadmin/users.db "INSERT INTO user (username, password_hash, role) VALUES ('admin', \"$password_hash\", 'admin');" && \ - echo "Admin username: admin" && \ - echo "Admin password: $admin_password" - - -# Gunicorn + redirect stderr to stdout -CMD ["gunicorn", "-c", "/etc/openpanel/openadmin/service/service.config.py", "app:app", "--log-file", "-"] diff --git a/docker/2087/requirements.txt b/docker/2087/requirements.txt deleted file mode 100644 index d6ee8d99..00000000 --- a/docker/2087/requirements.txt +++ /dev/null @@ -1,18 +0,0 @@ -flask -gevent -gunicorn -paramiko==3.4.0 -flask_sqlalchemy -Flask-JWT-Extended==4.6.0 -setproctitle==1.3.3 -Flask-BasicAuth -flask_babel -flask_login -psutil -mysql-connector-python==8.3.0 -docker -apscheduler==3.10.4 -flask_minify==0.42 -distro -requests -flask_mail==0.9.1 diff --git a/docker/INSTALL.sh b/docker/INSTALL.sh deleted file mode 100644 index 5ee88f07..00000000 --- a/docker/INSTALL.sh +++ /dev/null @@ -1,912 +0,0 @@ -#!/bin/bash -################################################################################ -# Script Name: INSTALL.sh -# Description: Install the latest version of OpenPanel -# Usage: bash <(curl -sSL https://raw.githubusercontent.com/stefanpejcic/OpenPanel/main/docker/INSTALL.sh) -# Author: Stefan Pejcic -# Created: 11.07.2023 -# Last Modified: 13.06.2024 -# Company: openpanel.co -# Copyright (c) OPENPANEL -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -################################################################################ - -# Colors for output -GREEN='\033[0;32m' -RED='\033[0;31m' -RESET='\033[0m' - -# Defaults -CUSTOM_VERSION=false -INSTALL_TIMEOUT=1800 # 30 min -DEBUG=false -SKIP_APT_UPDATE=false -SKIP_IMAGES=false -REPAIR=false -LOCALES=true -NO_SSH=false -OVERLAY=false -IPSETS=true -SET_HOSTNAME_NOW=false -SETUP_SWAP_ANYWAY=false -SWAP_FILE="1" -SELFHOSTED_SCREENSHOTS=false -SEND_EMAIL_AFTER_INSTALL=false -SET_PREMIUM=false - -# Paths -LOG_FILE="openpanel_install.log" -LOCK_FILE="/root/openpanel.lock" -OPENPANEL_DIR="/usr/local/panel/" -OPENPADMIN_DIR="/usr/local/admin/" -ETC_DIR="/etc/openpanel/" -OPENCLI_DIR="/usr/local/admin/scripts/" -OPENPANEL_ERR_DIR="/var/log/openpanel/" -TEMP_DIR="/tmp/" - -# Redirect output to the log file -exec > >(tee -a "$LOG_FILE") 2>&1 - - - -##################################################################### -# # -# START helper functions # -# # -##################################################################### - -# logo -print_header() { - printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - - echo -e " ____ _____ _ " - echo -e " / __ \ | __ \ | | " - echo -e " | | | | _ __ ___ _ __ | |__) | __ _ _ __ ___ | | " - echo -e " | | | || '_ \ / _ \| '_ \ | ___/ / _\" || '_ \ / _ \| | " - echo -e " | |__| || |_) || __/| | | | | | | (_| || | | || __/| | " - echo -e " \____/ | .__/ \___||_| |_| |_| \__,_||_| |_| \___||_| " - echo -e " | | " - echo -e " |_| version: $version " - - printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - -} - - -install_started_message(){ - echo -e "" - echo -e "\nStarting the installation of OpenPanel. This process will take approximately 5-10 minutes." - echo -e "During this time, we will:" - echo -e "- Install necessary services and tools." - echo -e "- Create an admin account for you." - echo -e "- Set up the firewall for enhanced security." - echo -e "- Install needed Docker images." - echo -e "- Set up basic hosting plans so you can start right away." - echo -e "\nThank you for your patience. We're setting everything up for your seamless OpenPanel experience!\n" - printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - - echo -e "" -} - - - -# Display error and exit -radovan() { - echo -e "${RED}Error: $2${RESET}" >&2 - exit $1 -} - - -# print the command and its output if debug, else run and echo to /dev/null -debug_log() { - if [ "$DEBUG" = true ]; then - echo "Running: $@" - "$@" - else - "$@" > /dev/null 2>&1 - fi -} - - -# Get server ipv4 from ip.openpanel.co -current_ip=$(curl -s https://ip.openpanel.co || wget -qO- https://ip.openpanel.co) - -# If site is not available, get the ipv4 from the hostname -I -if [ -z "$current_ip" ]; then - # current_ip=$(hostname -I | awk '{print $1}') - # ip addr command is more reliable then hostname - to avoid getting private ip - current_ip=$(ip addr|grep 'inet '|grep global|head -n1|awk '{print $2}'|cut -f1 -d/) -fi - - - - -if [ "$CUSTOM_VERSION" = false ]; then - # Fetch the latest version - version=$(curl -s https://get.openpanel.co/version) - if [[ $version =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then - version=$version - else - version="0.2.1" - fi -fi - -# print fullwidth line -print_space_and_line() { - echo " " - printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - - echo " " -} - - -# Progress bar script - -PROGRESS_BAR_URL="https://raw.githubusercontent.com/pollev/bash_progress_bar/master/progress_bar.sh" -PROGRESS_BAR_FILE="progress_bar.sh" - -wget "$PROGRESS_BAR_URL" -O "$PROGRESS_BAR_FILE" > /dev/null 2>&1 - -if [ ! -f "$PROGRESS_BAR_FILE" ]; then - echo "Failed to download progress_bar.sh" - exit 1 -fi - -# Source the progress bar script -source "$PROGRESS_BAR_FILE" - -# Dsiplay progress bar -FUNCTIONS=( - detect_os_and_package_manager - update_package_manager - install_packages - download_skeleton_directory_from_github - setup_openpanel - setup_openadmin - configure_docker - - setup_swap - set_premium_features - cleanup - set_custom_hostname - generate_and_set_ssl_for_panels - verify_license - set_system_cronjob - setup_csf -) - -TOTAL_STEPS=${#FUNCTIONS[@]} -CURRENT_STEP=0 - -update_progress() { - CURRENT_STEP=$((CURRENT_STEP + 1)) - PERCENTAGE=$(($CURRENT_STEP * 100 / $TOTAL_STEPS)) - draw_progress_bar $PERCENTAGE -} - -main() { - # Make sure that the progress bar is cleaned up when user presses ctrl+c - enable_trapping - - # Create progress bar - setup_scroll_area - for func in "${FUNCTIONS[@]}" - do - # Execute each function - $func - update_progress - done - destroy_scroll_area -} - - - - -# END helper functions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -##################################################################### -# # -# START main functions # -# # -##################################################################### - - - -check_requirements() { - if [ -z "$SKIP_REQUIREMENTS" ]; then - - # https://github.com/stefanpejcic/openpanel/issues/63 - - architecture=$(lscpu | grep Architecture | awk '{print $2}') - - if [ "$architecture" == "aarch64" ]; then - echo -e "${RED}Error: ARM CPU is not supported!${RESET}" >&2 - exit 1 - fi - - # check if the current user is not root - if [ "$(id -u)" != "0" ]; then - echo -e "${RED}Error: you must be root to execute this script.${RESET}" >&2 - exit 1 - # check if OS is MacOS - elif [ "$(uname)" = "Darwin" ]; then - echo -e "${RED}Error: MacOS is not currently supported.${RESET}" >&2 - exit 1 - # check if running inside a container - elif [[ -f /.dockerenv || $(grep -sq 'docker\|lxc' /proc/1/cgroup) ]]; then - echo -e "${RED}Error: running openpanel inside a container is not supported.${RESET}" >&2 - exit 1 - fi - # check if python version is supported - current_python_version=$(python3 --version 2>&1 | cut -d " " -f 2 | cut -d "." -f 1,2 | tr -d '.') - allowed_versions=("39" "310" "311" "312" "38") - if [[ ! " ${allowed_versions[@]} " =~ " ${current_python_version} " ]]; then - echo -e "${RED}Error: Unsupported Python version $current_python_version. No corresponding branch available.${RESET}" >&2 - exit 1 - fi - fi -} - - - -parse_args() { - show_help() { - echo "Available options:" - echo " --key= Set the license key for OpenPanel Enterprise edition." - echo " --hostname= Set the hostname." - echo " --version= Set a custom OpenPanel version to be installed." - echo " --email= Set email address to receive email with admin credentials and future notifications." - echo " --skip-requirements Skip the requirements check." - echo " --skip-panel-check Skip checking if existing panels are installed." - echo " --skip-apt-update Skip the APT update." - echo " --overlay2 Enable overlay2 storage driver instead of device-mapper." - echo " --skip-firewall Skip UFW setup UFW - Only do this if you will set another Firewall manually!" - echo " --skip-images Skip installing openpanel/nginx and openpanel/apache docker images." - echo " --skip-blacklists Do not set up IP sets and blacklists." - echo " --skip-ssl Skip SSL setup." - echo " --with_modsec Enable ModSecurity for Nginx." - echo " --ips Whiteliste IP addresses of OpenPanel Support Team." - echo " --no-ssh Disable port 22 and whitelist the IP address of user installing the panel." - echo " --enable-ftp Install FTP (experimental)." - echo " --enable-mail Install Mail (experimental)." - echo " --post_install= Specify the post install script path." - echo " --screenshots= Set the screenshots API URL." - echo " --swap=<2> Set space in GB to be allocated for SWAP." - echo " --debug Display debug information during installation." - echo " --repair Retry and overwrite everything." - echo " -h, --help Show this help message and exit." - } - - - - - -while [[ $# -gt 0 ]]; do - case $1 in - --key=*) - SET_PREMIUM=true - license_key="${1#*=}" - ;; - --hostname=*) - SET_HOSTNAME_NOW=true - new_hostname="${1#*=}" - ;; - --skip-requirements) - SKIP_REQUIREMENTS=true - ;; - --skip-panel-check) - SKIP_PANEL_CHECK=true - ;; - --skip-apt-update) - SKIP_APT_UPDATE=true - ;; - --repair) - REPAIR=true - SKIP_PANEL_CHECK=true - SKIP_REQUIREMENTS=true - ;; - --overlay2) - OVERLAY=true - ;; - --skip-firewall) - SKIP_FIREWALL=true - ;; - --skip-images) - SKIP_IMAGES=true - ;; - --skip-blacklists) - IPSETS=false - ;; - --skip-ssl) - SKIP_SSL=true - ;; - --with_modsec) - MODSEC=true - ;; - --debug) - DEBUG=true - ;; - --ips) - SUPPORT_IPS=true - ;; - --no-ssh) - NO_SSH=true - ;; - --enable-ftp) - INSTALL_FTP=true - ;; - --enable-mail) - INSTALL_MAIL=true - ;; - --post_install=*) - post_install_path="${1#*=}" - ;; - --version=*) - CUSTOM_VERSION=true - version="${1#*=}" - ;; - --swap=*) - SETUP_SWAP_ANYWAY=true - SWAP="${1#*=}" - ;; - --email=*) - SEND_EMAIL_AFTER_INSTALL=true - EMAIL="${1#*=}" - ;; - -h|--help) - show_help - exit 0 - ;; - *) - echo "Unknown option: $1" - show_help - exit 1 - ;; - esac - shift -done - -} - - - - - - -detect_installed_panels() { - if [ -z "$SKIP_PANEL_CHECK" ]; then - declare -A paths=( - ["/usr/local/panel"]="You already have OpenPanel installed. ${RESET}\nInstead, did you want to update? Run ${GREEN}'opencli update --force' to update OpenPanel." - ["/usr/local/cpanel/whostmgr"]="cPanel WHM is installed. OpenPanel only supports servers without any hosting control panel installed." - ["/opt/psa/version"]="Plesk is installed. OpenPanel only supports servers without any hosting control panel installed." - ["/usr/local/psa/version"]="Plesk is installed. OpenPanel only supports servers without any hosting control panel installed." - ["/usr/local/CyberPanel"]="CyberPanel is installed. OpenPanel only supports servers without any hosting control panel installed." - ["/usr/local/directadmin"]="DirectAdmin is installed. OpenPanel only supports servers without any hosting control panel installed." - ["/usr/local/cwpsrv"]="CentOS Web Panel (CWP) is installed. OpenPanel only supports servers without any hosting control panel installed." - ["/usr/local/httpd"]="Apache WebServer is already installed. OpenPanel only supports servers without any webservers installed." - ["/usr/local/apache2"]="Apache WebServer is already installed. OpenPanel only supports servers without any webservers installed." - ["/usr/sbin/httpd"]="Apache WebServer is already installed. OpenPanel only supports servers without any webservers installed." - ["/usr/lib/nginx"]="Nginx WebServer is already installed. OpenPanel only supports servers without any webservers installed." - ) - - for path in "${!paths[@]}"; do - if [ -d "$path" ] || [ -e "$path" ]; then - radovan 1 "${paths[$path]}" - fi - done - - echo -e "${GREEN}No currently installed hosting control panels or webservers found. Proceeding with the installation process.${RESET}" - fi -} - - - -check_lock_file_age() { - # Use flock to create a lock or exit if the lock is already held - exec 200>"$LOCK_FILE" - if flock -n 200; then - # Inside the lock - echo "OpenPanel installation started at: $(date)" - else - echo -e "${RED}Another instance is running. Exiting.${RESET}" - exit 1 - fi -} - - - -setup_csf() { - if [ -z "$SKIP_FIREWALL" ]; then - echo "Setting up the firewall.." - - - read_email_address() { - email=$(grep -E "^e-mail=" /etc/openpanel/openpanel/conf/openpanel.config | cut -d "=" -f2) - echo "$email" - } - - - install_csf() { - wget https://download.configserver.com/csf.tgz - tar -xzf csf.tgz - rm csf.tgz - cd csf - sh install.sh - } - - edit_csf_conf() { - sed -i 's/TESTING = "1"/TESTING = "0"/' /etc/csf/csf.conf - sed -i 's/ETH_DEVICE_SKIP = ""/ETH_DEVICE_SKIP = "docker0"/' /etc/csf/csf.conf - sed -i 's/DOCKER = "0"/DOCKER = "1"/' /etc/csf/csf.conf - } - - set_csf_email_address() { - email_address=$(read_email_address) - if [[ -n "$email_address" ]]; then - sed -i "s/LF_ALERT_TO = \"\"/LF_ALERT_TO = \"$email_address\"/" /etc/csf/csf.conf - fi - } - - - read_email_address - install_csf - edit_csf_conf - set_csf_email_address - csf -r - systemctl enable csf - - -} - - - - -set_premium_features(){ - if [ "$SET_HOSTNAME_NOW" = true ]; then - echo "Setting OpenPanel enterprise version license key $license_key" - opencli config update key "$license_key" - fi -} - - - -install_packages(){ - -debug_log sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/g' /etc/needrestart/needrestart.conf - -packages=("docker.io" "default-mysql-client" "bind9" "jc" "certbot" "python3-certbot-nginx") - -update-ca-certificates > /dev/null 2>&1 - - for package in "${packages[@]}"; do - echo -e "Installing ${GREEN}$package${RESET}" - debug_log apt-get -qq install "$package" -y - done - -} - - - - - - -download_skeleton_directory_from_github(){ - echo "Downloading configuration files to ${ETC_DIR}" - debug_log git clone https://github.com/stefanpejcic/openpanel-configuration /etc/openpanel > /dev/null 2>&1 -} - - - -set_custom_hostname(){ - if [ "$SET_HOSTNAME_NOW" = true ]; then - # Check if the provided hostname is a valid FQDN - if [[ $new_hostname =~ ^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then - # Check if PTR record is set to the provided hostname - ptr=$(dig +short -x $current_ip) - if [ "$ptr" != "$new_hostname." ]; then - echo "Warning: PTR record is not set to $new_hostname" - fi - - # Check if A record for provided hostname points to server IP - a_record_ip=$(dig +short $new_hostname) - if [ "$a_record_ip" != "$current_ip" ]; then - echo "WARNING: A record for $new_hostname does not point to server IP: $current_ip" - echo "After pointing the domain run this command to set domain for panel: opencli config update force_domain $new_hostname" - else - opencli config update force_domain "$new_hostname" - fi - - else - echo "Hostname provided: $new_hostname is not a valid FQDN, OpenPanel will use IP address $current_ip for access." - fi - - # Set the provided hostname as the system hostname - hostnamectl set-hostname $new_hostname - fi -} - - - - -set_email_address_and_email_admin_logins(){ - if [ "$SEND_EMAIL_AFTER_INSTALL" = true ]; then - # Check if the provided email is valid - if [[ $EMAIL =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then - echo "Setting email address $EMAIL for notifications" - opencli config update email "$EMAIL" - # Send an email alert - - generate_random_token_one_time_only() { - local config_file="${OPENPANEL_DIR}conf/panel.config" - TOKEN_ONE_TIME="$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 64)" - local new_value="mail_security_token=$TOKEN_ONE_TIME" - sed -i "s|^mail_security_token=.*$|$new_value|" "${OPENPANEL_DIR}conf/panel.config" - } - - - email_notification() { - local title="$1" - local message="$2" - generate_random_token_one_time_only - TRANSIENT=$(awk -F'=' '/^mail_security_token/ {print $2}' "${OPENPANEL_DIR}conf/panel.config") - - SSL=$(awk -F'=' '/^ssl/ {print $2}' "${OPENPANEL_DIR}conf/panel.config") - - # Determine protocol based on SSL configuration - if [ "$SSL" = "yes" ]; then - PROTOCOL="https" - else - PROTOCOL="http" - fi - - # Send email using appropriate protocol - curl -k -X POST "$PROTOCOL://127.0.0.1:2087/send_email" -F "transient=$TRANSIENT" -F "recipient=$EMAIL" -F "subject=$title" -F "body=$message" - - } - - server_hostname=$(hostname) - email_notification "OpenPanel successfully installed" "OpenAdmin URL: http://$server_hostname:2087/ | username: admin | password: $admin_password" - else - echo "Address provided: $EMAIL is not a valid email address. Admin login credentials and future notifications will not be sent." - fi - fi -} - - - - - -configure_docker() { - - apt-get install docker.io docker -y - - docker_daemon_json_path="/etc/docker/daemon.json" - debug_log mkdir -p $(dirname "$docker_daemon_json_path") - - if [ "$OVERLAY" = true ]; then - debug_log "Setting 'overlay2' as the default storage driver for Docker.." - cp ${ETC_DIR}docker/overlay2/daemon.json > "$docker_daemon_json_path" - else - debug_log "Setting 'devicemapper' as the default storage driver for Docker.." - cp ${ETC_DIR}docker/devicemapper/daemon.json > "$docker_daemon_json_path" - fi - - echo -e "${GREEN}Docker is configured.${RESET}" - debug_log systemctl daemon-reload - systemctl restart docker -} - - - -docker_compose_up(){ - - - - -# install docker and docker compose -DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} -mkdir -p $DOCKER_CONFIG/cli-plugins -curl -SL https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose -chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose -chmod +x /usr/local/lib/docker/cli-plugins/docker-compose - -# CHECK WITH -#docker compose version - - - -# download conf files first -git clone https://github.com/stefanpejcic/openpanel-configuration /etc/openpanel > /dev/null 2>&1 - -# generate random password for mysql -MYSQL_ROOT_PASSWORD=$(openssl rand -base64 -hex 9) -echo "MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD" >> .env - -# save it to /etc/my.cnf -ln -s /etc/openpanel/mysql/db.cnf /etc/my.cnf -sed -i 's/password = .*/password = '"${MYSQL_ROOT_PASSWORD}"'/g' ${ETC_DIR}mysql/db.cnf - - -# start the stack -docker compose up -d - -} - - - - - -set_system_cronjob(){ - echo "Setting cronjobs.." - mv ${ETC_DIR}cron /etc/cron.d/openpanel - chown root:root /etc/cron.d/openpanel - chmod 0600 /etc/cron.d/openpanel -} - - -cleanup() { - echo "Cleaning up.." - # https://www.faqforge.com/linux/fixed-ubuntu-apt-get-upgrade-auto-restart-services/ - sed -i 's/$nrconf{restart} = '"'"'a'"'"';/#$nrconf{restart} = '"'"'i'"'"';/g' /etc/needrestart/needrestart.conf -} - - - - -generate_and_set_ssl_for_panels() { - if [ -z "$SKIP_SSL" ]; then - echo "Checking if SSL can be generated for the server hostname.." - debug_log opencli ssl-hostname - fi -} - - - -run_custom_postinstall_script() { - if [ -n "$post_install_path" ]; then - # run the custom script - echo " " - echo "Running post install script.." - debug_log "https://dev.openpanel.co/customize.html#After-installation" - debug_log bash $post_install_path - fi -} - - - -verify_license() { - # LEGACY, WILL BE REMOVED - debug_log "echo Current time: $(date +%T)" - server_hostname=$(hostname) - license_data='{"hostname": "'"$server_hostname"'", "public_ip": "'"$current_ip"'"}' - response=$(curl -s -X POST -H "Content-Type: application/json" -d "$license_data" https://api.openpanel.co/license-check) - debug_log "echo Checking OpenPanel license for IP address: $current_ip" - debug_log "echo Response: $response" -} - -send_install_log(){ - # Restore normal output to the terminal, so we dont save generated admin password in log file! - exec > /dev/tty - exec 2>&1 - opencli report --public >> "$LOG_FILE" - curl -F "file=@/root/$LOG_FILE" http://support.openpanel.co/install_logs.php - # Redirect again stdout and stderr to the log file - exec > >(tee -a "$LOG_FILE") - exec 2>&1 -} - - -rm_helpers(){ - rm -rf $PROGRESS_BAR_FILE -} - - - -setup_swap(){ - # Function to create swap file - create_swap() { - fallocate -l ${SWAP_FILE}G /swapfile - chmod 600 /swapfile - mkswap /swapfile - swapon /swapfile - echo "/swapfile none swap sw 0 0" >> /etc/fstab - } - - # Check if swap space already exists - if [ -n "$(swapon -s)" ]; then - echo "ERROR: Skipping creating swap space as there already exists a swap partition." - return - fi - - # Check if we should set up swap anyway - if [ "$SETUP_SWAP_ANYWAY" = true ]; then - create_swap - else - # Only create swap if RAM is less than 8GB - memory_kb=$(grep 'MemTotal' /proc/meminfo | awk '{print $2}') - memory_gb=$(awk "BEGIN {print $memory_kb/1024/1024}") - - if [ $(awk "BEGIN {print ($memory_gb < 8)}") -eq 1 ]; then - create_swap - else - echo "Total available memory is ${memory_gb}GB, skipping creating swap file." - fi - fi -} - - - - - - - - -support_message() { - echo "" - echo "🎉 Welcome aboard and thank you for choosing OpenPanel! 🎉" - echo "" - echo "Your journey with OpenPanel has just begun, and we're here to help every step of the way." - echo "" - echo "To get started, check out our Getting Started guide:" - echo "👉 https://openpanel.co/docs/admin/intro/#post-install-steps" - echo "" - echo "Need assistance or looking to learn more? We've got you covered:" - echo "" - echo "📚 Admin Docs: Dive into our comprehensive documentation for all things OpenPanel:" - echo "👉 https://openpanel.co/docs/admin/intro/" - echo "" - echo "💬 Forums: Join our community forum to ask questions, share tips, and connect with fellow admins:" - echo "👉 https://community.openpanel.co/" - echo "" - echo "🎮 Discord: For real-time chat and support, hop into our Discord server:" - echo "👉 https://discord.openpanel.co/" - echo "" - echo "We're thrilled to have you with us. Let's make something amazing together! 🚀" - echo "" -} - - - -success_message() { - - echo -e "${GREEN}OpenPanel installation complete.${RESET}" - echo "" - - # Restore normal output to the terminal, so we dont save generated admin password in log file! - exec > /dev/tty - exec 2>&1 - - # for 0.1.9 - echo "$version" > $OPENPANEL_DIR/version - - opencli admin - echo "Username: admin" - echo "Password: $admin_password" - echo " " - print_space_and_line - - # added in 0.2.0 - # email to user the new logins - set_email_address_and_email_admin_logins - - # Redirect again stdout and stderr to the log file - exec > >(tee -a "$LOG_FILE") - exec 2>&1 - -} - -# END main functions - - - - - - - -##################################################################### -# # -# START main script execution # -# # -##################################################################### - -print_header - -parse_args "$@" - -check_requirements - -detect_installed_panels - -check_lock_file_age - -install_started_message - -main - -send_install_log - -rm_helpers - -print_space_and_line - -support_message - -print_space_and_line - -success_message - -run_custom_postinstall_script - - -# END main script execution - - - -# added in 0.1.9 -cp ${ETC_DIR}ssh/admin_welcome.sh /etc/profile.d/welcome.sh -chmod +x /etc/profile.d/welcome.sh - - - - - - diff --git a/docker/README.md b/docker/README.md index 28aca2a5..b5f34217 100644 --- a/docker/README.md +++ b/docker/README.md @@ -2,3 +2,5 @@ This directory holds Dockerfiles for images: - https://dev.openpanel.co/images/browse.html#openpanel-apache - https://dev.openpanel.co/images/browse.html#openpanel-nginx +- https://dev.openpanel.com/images/browse.html#openpanel-apache-mariadb +- https://dev.openpanel.com/images/browse.html#openpanel-nginx-mariadb diff --git a/docker/alpine/apache/Dockerfile b/docker/alpine/apache/Dockerfile deleted file mode 100644 index 6fb5a604..00000000 --- a/docker/alpine/apache/Dockerfile +++ /dev/null @@ -1,149 +0,0 @@ -FROM alpine:latest - -LABEL maintainer="stefan@pejcic.rs" -LABEL author="Stefan Pejcic" - -ENV TZ=UTC - -# Install required packages -RUN apk update && \ - apk add --no-cache \ - bash \ - msmtp \ - ttyd \ - screen \ - apache2 \ - mariadb \ - php82 \ - php82-fpm \ - php82-mysqli \ - php82-curl \ - php82-gd \ - php82-mbstring \ - php82-xml \ - php82-soap \ - php82-intl \ - php82-zip \ - php82-bcmath \ - php82-calendar \ - php82-exif \ - php82-ftp \ - php82-ldap \ - php82-sockets \ - php82-sysvmsg \ - php82-sysvsem \ - php82-sysvshm \ - php82-tidy \ - php82-uuid \ - php82-opcache \ - php82-redis \ - curl \ - cron \ - pwgen \ - zip \ - unzip \ - wget \ - nano \ - phpmyadmin \ - openssh-server \ - php82-mbstring \ - openrc \ - tzdata && \ - rm -rf /var/cache/apk/* - -# Create alias for service -RUN echo "alias service='rc-service'" >> /etc/profile - -########## PHP Composer ########## -COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer - -########## MySQL ########## -COPY mysql/mysqld.cnf /etc/mysql/my.cnf -RUN chown mysql:mysql -R /var/lib/mysql - -# Configure MariaDB (MySQL) root user and start the service -RUN rc-update add mariadb default && \ - /etc/init.d/mariadb setup && \ - /etc/init.d/mariadb start && \ - MYSQL_PASSWORD=$(awk -F "=" '/password/ {gsub(/[ \t]+/, "", $2); print $2; exit}' /etc/mysql/debian.cnf) && \ - mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" - -########## EXPOSED PORTS ########## -EXPOSE 22 3306 7681 8080 - -########## APACHE ########## -RUN rc-update add apache2 default -COPY apache/apache2.conf /etc/apache2/ - -# Enable necessary Apache modules -RUN sed -i 's/#LoadModule rewrite_module/LoadModule rewrite_module/' /etc/apache2/httpd.conf && \ - sed -i 's/#LoadModule proxy_module/LoadModule proxy_module/' /etc/apache2/httpd.conf && \ - sed -i 's/#LoadModule proxy_http_module/LoadModule proxy_http_module/' /etc/apache2/httpd.conf && \ - sed -i 's/#LoadModule remoteip_module/LoadModule remoteip_module/' /etc/apache2/httpd.conf && \ - sed -i 's/#LoadModule headers_module/LoadModule headers_module/' /etc/apache2/httpd.conf - -RUN mkdir -p /var/log/apache2/domlogs/ - -########## PHPMYADMIN ########## -COPY phpmyadmin/config.inc.php /etc/phpmyadmin/ -COPY phpmyadmin/pma.php /usr/share/phpmyadmin/pma.php - -RUN new_password=$(openssl rand -base64 12 | tr -d '/+' | head -c 16) && \ - sed -i "s/\(\$dbpass='.*'\)/\$dbpass='$new_password';/" "/etc/phpmyadmin/config-db.php" && \ - sed -i "s/\(\$_SESSION\['PMA_single_signon_user'] = '\).*\(';.*\)/\1phpmyadmin\2/" /usr/share/phpmyadmin/pma.php && \ - sed -i "s/\(\$_SESSION\['PMA_single_signon_password'] = '\).*\(';.*\)/\1$new_password\2/" /usr/share/phpmyadmin/pma.php && \ - sed -i "s/\(\$_SESSION\['PMA_single_signon_host'] = '\).*\(';.*\)/\1localhost\2/" /usr/share/phpmyadmin/pma.php && \ - /etc/init.d/mariadb start && \ - mysql -u root -e "CREATE DATABASE IF NOT EXISTS phpmyadmin;" && \ - mysql -u root -e "CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY '$new_password';" && \ - mysql -u root -e "GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'phpmyadmin'@'localhost';" && \ - mysql -u root -e "GRANT ALL ON *.* TO 'phpmyadmin'@'localhost';" && \ - mysql -u root -e "REVOKE CREATE USER ON *.* FROM 'phpmyadmin'@'localhost';" && \ - mysql -u root -e "REVOKE CREATE ON *.* FROM 'phpmyadmin'@'localhost';" && \ - mysql -u root -e "FLUSH PRIVILEGES;" && \ - mysql -u root < /usr/share/doc/phpmyadmin/examples/create_tables.sql && \ - /etc/init.d/mariadb stop - -########## PHP-FPM ########## -RUN update-alternatives --set php /usr/bin/php8.2 && \ - sed -i \ - -e 's/^upload_max_filesize = .*/upload_max_filesize = 1024M/' \ - -e 's/^max_input_time = .*/max_input_time = 600/' \ - -e 's/^memory_limit = .*/memory_limit = -1/' \ - -e 's/^post_max_size = .*/post_max_size = 1024M/' \ - -e 's/^max_execution_time = .*/max_execution_time = 600/' \ - -e 's/^opcache.enable= .*/opcache.enable=1/' \ - -e 's|^;sendmail_path = .*|sendmail_path = "/usr/bin/msmtp -t"|' \ - /etc/php82/php.ini && \ - sed -i 's|;sendmail_path = *|sendmail_path = "/usr/bin/msmtp -t"|g' /etc/php82/php.ini - -########## EMAIL ########## -COPY email/msmtprc /etc/msmtprc - -########## SSH ########## -ENV NOTVISIBLE "in users profile" -RUN echo "export VISIBLE=now" >> /etc/profile - -########## SSL ############# -RUN mkdir -p /etc/apache2/ssl/ && \ - cd /etc/apache2/ssl/ && \ - openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \ - -subj "/C=GB/ST=London/L=London/O=Global Security/OU=R&D Department/CN=openpanel.co" \ - -keyout cert.key -out cert.crt - -########## TERMINAL ############# -# Fix for webterminal: bash: permission denied: /home/user/.bashrc -RUN chmod 755 /root - -########## WP-CLI ########## -RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \ - chmod +x wp-cli.phar && \ - mv wp-cli.phar /usr/local/bin/wp - -########## Cleanup ########## -RUN rm -rf /var/cache/apk/* /tmp/* /var/tmp/* - -########## Docker run entrypoint ########## -COPY entrypoint.sh /etc/entrypoint.sh -RUN chmod +x /etc/entrypoint.sh -CMD ["/bin/sh", "-c", "/etc/entrypoint.sh"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml deleted file mode 100644 index 59dd8e99..00000000 --- a/docker/docker-compose.yml +++ /dev/null @@ -1,155 +0,0 @@ -services: - # Database for OpenPanel users, plans, websites and domains - openpanel_mysql: - image: mysql/mysql-server - container_name: openpanel_mysql - restart: always - environment: - MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} - MYSQL_DATABASE: panel - MYSQL_USER: panel - MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD} - ports: - - "3306:3306" - volumes: - - openadmin_mysql:/var/lib/mysql - - /etc/openpanel/:/etc/openpanel/ - - /root/initialize.sql:/docker-entrypoint-initdb.d/initialize.sql - mem_limit: 1g - cpus: 1 - oom_kill_disable: true - healthcheck: - test: ["CMD-SHELL", "mysql --user=panel --password=$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\" || exit 1"] - interval: 10s - timeout: 10s - retries: 5 - start_period: 10s - - # OpenAdmin service running on port 2087 - openadmin: - image: openpanel/openadmin - container_name: openadmin - depends_on: - - openpanel_mysql - #condition: service_healthy - cap_add: - - NET_ADMIN - - SYS_MODULE - healthcheck: - test: ["CMD-SHELL", "curl --fail http://localhost:2087/ || curl --fail https://localhost:2087/ || exit 1"] - interval: 30s - timeout: 10s - retries: 3 - volumes: - - /lib/modules:/lib/modules:ro - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /:/hostfs:ro - - /home:/home - - /etc/ufw:/etc/ufw - - /usr/local/panel:/usr/local/panel - - /var/log:/var/log - - /etc/letsencrypt:/etc/letsencrypt - - /etc/my.cnf:/etc/my.cnf - - /etc/openpanel/:/etc/openpanel/ - - /var/run/docker.sock:/var/run/docker.sock - - openadmin_mysql:/var/lib/mysql - - /usr/bin/docker:/usr/bin/docker - - /usr/local/admin/scripts:/usr/local/admin/scripts - network_mode: host - deploy: - resources: - limits: - memory: 1g - cpus: '1.0' - restart: always - privileged: true - - # OpenPanel service running on port 2083 - openpanel: - image: openpanel/openpanel - container_name: openpanel - depends_on: - - openpanel_mysql - cap_add: - - NET_ADMIN - - SYS_MODULE - healthcheck: - test: ["CMD-SHELL", "curl --fail http://localhost:2083/ || curl --fail https://localhost:2083/ || exit 1"] - interval: 30s - timeout: 10s - retries: 3 - volumes: - - /lib/modules:/lib/modules:ro - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /:/hostfs:ro - - /home:/home - - /etc/ufw:/etc/ufw - - /usr/local/admin:/usr/local/admin - - /var/log:/var/log - - /etc/letsencrypt:/etc/letsencrypt - - /etc/my.cnf:/etc/my.cnf - - /etc/openpanel/:/etc/openpanel/ - - /var/run/docker.sock:/var/run/docker.sock - - openadmin_mysql:/var/lib/mysql - - /usr/bin/docker:/usr/bin/docker - - /usr/local/admin/scripts:/usr/local/admin/scripts - network_mode: host - deploy: - resources: - limits: - memory: 1g - cpus: '2.0' - restart: always - privileged: true - - # Nginx Reverse Proxy and WAF - nginx: - image: nginx - container_name: openpanel_nginx - cap_add: - - NET_ADMIN - - SYS_MODULE - ports: - - "80:80" - - "443:443" - healthcheck: - test: ["CMD-SHELL", "curl --fail http://localhost/b|| exit 1"] - interval: 30s - timeout: 10s - retries: 3 - volumes: - - /etc/openpanel/nginx/nginx.conf:/etc/nginx/nginx.conf - - /etc/openpanel/nginx/vhosts/default.conf:/etc/nginx/sites-available/default - - /etc/openpanel/nginx/vhosts/default.conf:/etc/nginx/sites-enabled/default - - /etc/openpanel/nginx/vhosts/openpanel_proxy.conf:/etc/openpanel/nginx/vhosts/openpanel_proxy.conf - - /etc/nginx/sites-available/:/etc/nginx/sites-available/ - - /etc/nginx/sites-enabled/:/etc/nginx/sites-enabled/ - - /etc/openpanel/nginx/error_pages/snippets/:/etc/nginx/snippets/ - - /etc/openpanel/nginx/error_pages/:/srv/http/default/ - - /var/log/nginx/stats/:/var/log/nginx/stats/ - - /var/log/nginx/domlogs/:/var/log/nginx/domlogs/ - - /etc/letsencrypt:/etc/letsencrypt - - /etc/openpanel/openpanel/core/users/:/etc/openpanel/openpanel/core/users/ - deploy: - resources: - limits: - memory: 1g - cpus: '1.0' - restart: always - privileged: true - oom_kill_disable: true - - # User images - #openpanel_apache: - #image: openpanel/apache:latest - #entrypoint: /bin/true - - #openpanel_nginx: - #image: openpanel/nginx:latest - #entrypoint: /bin/true - -# make the data persistent -volumes: - openadmin_mysql: diff --git a/integrations/cpanel-import/cp-import.sh b/integrations/cpanel-import/cp-import.sh index 6ed9acb1..3e491e46 100644 --- a/integrations/cpanel-import/cp-import.sh +++ b/integrations/cpanel-import/cp-import.sh @@ -1236,7 +1236,7 @@ import_domlogs() { import_domlogs_for_domain() { local ssl_log_file="$1" local domain="$2" - local destination_file="/etc/nginx/domlogs/${domain}.log" + local destination_file="/var/log/nginx/domlogs/${domain}.log" # Check if the source file exists if [[ -e "$ssl_log_file" ]]; then diff --git a/integrations/digitalocean/.github/CODEOWNERS b/integrations/digitalocean/.github/CODEOWNERS new file mode 100644 index 00000000..c226b66c --- /dev/null +++ b/integrations/digitalocean/.github/CODEOWNERS @@ -0,0 +1 @@ +@marketplace-eng diff --git a/integrations/digitalocean/.github/CONTRIBUTING.md b/integrations/digitalocean/.github/CONTRIBUTING.md new file mode 100644 index 00000000..1962a365 --- /dev/null +++ b/integrations/digitalocean/.github/CONTRIBUTING.md @@ -0,0 +1,27 @@ +# Contributing + +We enthusiastically encourage contributions of all sorts to our repository, from correcting typos, to improving checks or adding new ones. + +### Reporting Issues + +This section guides you through submitting an issue for the Marketplace Partners. Following these guidelines helps maintainers and the community understand your report :pencil:, reproduce the behavior :computer: :computer:, and find related reports :mag_right:. + +When you are reporting an issue, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). + +> **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one. + +#### Before Submitting An Issue +* **Check the [current issues](https://github.com/digitalocean/marketplace-partners/issues)**. + +#### How Do I Submit A (Good) Issue? + +Issues are tracked as [GitHub issues](https://guides.github.com/features/issues/). Create an issue and provide the following information listed below. + +Explain the problem and include additional details to help maintainers reproduce the problem: + +* **Use a clear and descriptive title** for the issue to identify the problem. +* **Describe the exact steps which reproduce the problem** in as many details as possible. When listing steps, **don't just say what you did, but explain how you did it**. +* **Provide specific examples to demonstrate the steps**. Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). +* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior. +* **Explain which behavior you expected to see instead and why.** +* **Include screenshots and animated GIFs** which show you following the described steps and clearly demonstrate the problem. diff --git a/integrations/digitalocean/.gitignore b/integrations/digitalocean/.gitignore new file mode 100644 index 00000000..6a557f52 --- /dev/null +++ b/integrations/digitalocean/.gitignore @@ -0,0 +1,43 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# App generated files # +###################### +.vscode + +.Rproj.user diff --git a/integrations/whmcs/README.md b/integrations/whmcs/README.md deleted file mode 100644 index 9cc49b08..00000000 --- a/integrations/whmcs/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# OpenPanel WHMCS Module 😎 -WHMCS module for [OpenPanel](https://openpanel.com) - - -## Requirements - -- Server with OpenPanel Enterprise license -- WHMCS - -## Installation - -1. Login to SSH for WHMCS server -2. Navigate to `path_to_whmcs/modules/servers` -3. Run this command to create a new folder and in it download the module: - ```bash - git clone https://github.com/stefanpejcic/openpanel-whmcs-module.git openpanel - ``` - -## Configuration - -How to setup WHMCS and OpenPanel: https://openpanel.com/docs/articles/extensions/openpanel-and-whmcs/ - - -## Update - -1. Login to SSH for WHMCS server -2. Navigate to `path_to_whmcs/modules/servers/openpanel` -3. Run this command to download newer files: - ```bash - git pull - ``` - -## Bug Reports - -Report [new issue on github](https://github.com/stefanpejcic/openpanel-whmcs-module/issues/new/choose) - diff --git a/integrations/whmcs/openpanel.php b/integrations/whmcs/openpanel.php deleted file mode 100644 index d98f3e2d..00000000 --- a/integrations/whmcs/openpanel.php +++ /dev/null @@ -1,666 +0,0 @@ - $authEndpoint, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_POST => true, - CURLOPT_POSTFIELDS => json_encode(array( - 'username' => $params["serverusername"], - 'password' => $params["serverpassword"] - )), - CURLOPT_HTTPHEADER => array( - "Content-Type: application/json" - ), - )); - - // Execute cURL request to authenticate - $response = curl_exec($curl); - - // Check for errors - if (curl_errno($curl)) { - $token = false; - $error = "cURL Error: " . curl_error($curl); - } else { - // Decode the response JSON to get the token - $responseData = json_decode($response, true); - $token = isset($responseData['access_token']) ? $responseData['access_token'] : false; - $error = $token ? null : "Token not found in response"; - } - - // Close cURL session - curl_close($curl); - - return array($token, $error); -} - - -function apiRequest($endpoint, $token, $data = null, $method = 'POST') { - // Prepare cURL request - $curl = curl_init(); - - // Set default cURL options - $options = array( - CURLOPT_URL => $endpoint, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_HTTPHEADER => array( - "Authorization: Bearer " . $token, - "Content-Type: application/json" - ), - ); - - // Handle different HTTP methods - switch ($method) { - case 'POST': - if ($data !== null) { - $options[CURLOPT_POST] = true; - $options[CURLOPT_POSTFIELDS] = json_encode($data); - } - break; - - case 'GET': - $options[CURLOPT_CUSTOMREQUEST] = 'GET'; - break; - - case 'PUT': - $options[CURLOPT_CUSTOMREQUEST] = 'PUT'; - if ($data !== null) { - $options[CURLOPT_POSTFIELDS] = json_encode($data); - } - break; - - case 'CONNECT': - $options[CURLOPT_CUSTOMREQUEST] = 'CONNECT'; - if ($data !== null) { - $options[CURLOPT_POSTFIELDS] = json_encode($data); - } - break; - - case 'PATCH': - $options[CURLOPT_CUSTOMREQUEST] = 'PATCH'; - if ($data !== null) { - $options[CURLOPT_POSTFIELDS] = json_encode($data); - } - break; - - case 'DELETE': - $options[CURLOPT_CUSTOMREQUEST] = 'DELETE'; - if ($data !== null) { - $options[CURLOPT_POSTFIELDS] = json_encode($data); - } - break; - - default: - // Handle unsupported methods - throw new InvalidArgumentException("Unsupported method: $method"); - } - - // Set the options for the cURL request - curl_setopt_array($curl, $options); - - // Execute cURL request - $response = curl_exec($curl); - - // Decode the response JSON - $responseData = json_decode($response, true); - - // Close cURL session - curl_close($curl); - - return $responseData; -} - - - - - - - -############### USER ACTIONS ################ -# CREATE ACCOUNT -function openpanel_CreateAccount($params) { - list($jwtToken, $error) = getAuthToken($params); - - if (!$jwtToken) { - return $error; // Return the error message as a plain string - } - - try { - $apiProtocol = getApiProtocol($params["serverhostname"]); - $createUserEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/users'; - $packageId = $params['pid']; // Get the Product ID (Package ID) - - // Query the database to get the package name - $result = select_query("tblproducts", "name", array("id" => $packageId)); - $data = mysql_fetch_array($result); - $packageName = $data['name']; // This is the package name - - // Prepare data for user creation - $userData = array( - 'username' => $params["username"], - 'password' => $params["password"], - 'email' => $params["clientsdetails"]["email"], - 'plan_name' => $packageName - ); - - // Make API request to create user - $response = apiRequest($createUserEndpoint, $jwtToken, $userData); - - if (isset($response['success']) && $response['success'] === true) { - return 'success'; - } else { - return isset($response['error']) ? $response['error'] : 'An unknown error occurred.'; - } - - } catch (Exception $e) { - logModuleCall( - 'openpanel', - __FUNCTION__, - $params, - $e->getMessage(), - $e->getTraceAsString() - ); - - return $e->getMessage(); - } -} - - -# TERMINATE ACCOUNT -function openpanel_TerminateAccount($params) { - list($jwtToken, $error) = getAuthToken($params); - - if (!$jwtToken) { - return $error; // Return the error message as a plain string - } - - try { - $apiProtocol = getApiProtocol($params["serverhostname"]); - $userEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/users/' . $params["username"]; - - // Step 1: Unsuspend the account if it's suspended - try { - $unsuspendData = array('action' => 'unsuspend'); - $unsuspendResponse = apiRequest($userEndpoint, $jwtToken, $unsuspendData, 'PATCH'); - - - } catch (Exception $e) { - // If unsuspend fails, check if the account doesn't exist - $errorMessage = $e->getMessage(); - if (strpos($errorMessage, 'not found') !== false || strpos($errorMessage, 'User') !== false) { - // Account does not exist, return an error message - return 'Error: Account "' . $params["username"] . '" does not exist and could not be deleted.'; - } else { - return 'Failed to unsuspend account before termination: ' . $errorMessage; - } - } - - // Step 2: Now attempt to delete the account - try { - $response = apiRequest($userEndpoint, $jwtToken, null, 'DELETE'); - - - if (isset($response['success']) && $response['success'] === true) { - return 'success'; - } else { - return isset($response['error']) ? $response['error'] : 'An unknown error occurred during termination.'; - } - - } catch (Exception $e) { - // Log the exception for the delete action - logModuleCall( - 'openpanel', - 'TerminateAccount - Delete Exception', - $params, - $e->getMessage(), - $e->getTraceAsString() - ); - - // Handle exception during the delete action - return 'Error during account termination: ' . $e->getMessage(); - } - - } catch (Exception $e) { - logModuleCall( - 'openpanel', - __FUNCTION__, - $params, - $e->getMessage(), - $e->getTraceAsString() - ); - - return $e->getMessage(); - } -} - - - -# CHANGE PASSWORD FOR ACCOUNT -function openpanel_ChangePassword($params) { - list($jwtToken, $error) = getAuthToken($params); - - if (!$jwtToken) { - return $error; // Return the error message as a plain string - } - - try { - $apiProtocol = getApiProtocol($params["serverhostname"]); - $changePasswordEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/users/' . $params["username"]; - - // Prepare data for password change - $passwordData = array('password' => $params["password"]); - - // Make API request to change password for user - $response = apiRequest($changePasswordEndpoint, $jwtToken, $passwordData, 'PATCH'); - - // Log the API request and response - logModuleCall( - 'openpanel', - 'ChangePassword', - $passwordData, - $response - ); - - // Check for success in the response - if (isset($response['success']) && $response['success'] === true) { - return 'success'; - } else { - // Return the error message from the response or a default message - return isset($response['error']) ? $response['error'] : 'An unknown error occurred during password change.'; - } - - } catch (Exception $e) { - // Log the exception - logModuleCall( - 'openpanel', - 'ChangePassword Exception', - $params, - $e->getMessage(), - $e->getTraceAsString() - ); - - // Return the exception message - return 'Error: ' . $e->getMessage(); - } -} - - - -# SUSPEND ACCOUNT -function openpanel_SuspendAccount($params) { - list($jwtToken, $error) = getAuthToken($params); - - // If JWT token is not received, return error message - if (!$jwtToken) { - return json_encode(array("success" => false, "message" => $error)); - } - - try { - // Prepare the API endpoint for suspending the account - $apiProtocol = getApiProtocol($params["serverhostname"]); - $suspendAccountEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/users/' . $params["username"]; - - // Prepare data for account suspension - $suspendData = array('action' => 'suspend'); - - // Make the API request to suspend the account - $response = apiRequest($suspendAccountEndpoint, $jwtToken, $suspendData, 'PATCH'); - - // Check the API response for success or failure - if (isset($response['success']) && $response['success'] === true) { - return 'success'; - } else { - // Return the error message from the API response - return isset($response['error']) ? $response['error'] : 'An unknown error occurred.'; - } - - } catch (Exception $e) { - // Log the exception details - logModuleCall( - 'openpanel', - 'SuspendAccount Exception', - $params, - $e->getMessage(), - $e->getTraceAsString() - ); - - // Return the exception message - return 'Error: ' . $e->getMessage(); - } -} - - - - - - -# UNSUSPEND ACCOUNT -function openpanel_UnsuspendAccount($params) { - list($jwtToken, $error) = getAuthToken($params); - - // If JWT token is not received, return error message - if (!$jwtToken) { - return json_encode(array("success" => false, "message" => $error)); - } - - try { - // Prepare the API endpoint to unsuspend the account - $apiProtocol = getApiProtocol($params["serverhostname"]); - $unsuspendAccountEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/users/' . $params["username"]; - - // Prepare data for account unsuspension (if any) - $unsuspendData = array('action' => 'unsuspend'); - - // Make the API request to unsuspend the account - $response = apiRequest($unsuspendAccountEndpoint, $jwtToken, $unsuspendData, 'PATCH'); - - - // Check the API response for success or failure - if (isset($response['success']) && $response['success'] === true) { - return 'success'; - } else { - // Return the error message from the API response - return isset($response['error']) ? $response['error'] : 'An unknown error occurred.'; - } - - } catch (Exception $e) { - // Log the exception details - logModuleCall( - 'openpanel', - 'UnsuspendAccount Exception', - $params, - $e->getMessage(), - $e->getTraceAsString() - ); - - // Return the exception message - return 'Error: ' . $e->getMessage(); - } -} - - - - - - -# CHANGE PACKAGE (PLAN) -function openpanel_ChangePackage($params) { - list($jwtToken, $error) = getAuthToken($params); - - if (!$jwtToken) { - return $error; // Return the error message as a plain string - } - - try { - $apiProtocol = getApiProtocol($params["serverhostname"]); - $changePlanEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/users/' . $params["username"]; - - $packageId = $params['pid']; // Get the Product ID (Package ID) - - // Query the database to get the package name - $result = select_query("tblproducts", "name", array("id" => $packageId)); - $data = mysql_fetch_array($result); - $packageName = $data['name']; // This is the package name - - // Prepare data for changing plan - $planData = array('plan_name' => $packageName); - - // Make API request to change plan - $response = apiRequest($changePlanEndpoint, $jwtToken, $planData, 'PUT'); - - // Log the API request and response - logModuleCall( - 'openpanel', - 'ChangePackage', - $planData, - $response - ); - - if (isset($response['success']) && $response['success'] === true) { - return 'success'; - } else { - // Return the error message from the response or a default message - return isset($response['error']) ? $response['error'] : 'An unknown error occurred during package change.'; - } - - } catch (Exception $e) { - // Log the exception - logModuleCall( - 'openpanel', - 'ChangePackage Exception', - $params, - $e->getMessage(), - $e->getTraceAsString() - ); - - // Return the exception message - return 'Error: ' . $e->getMessage(); - } -} - - - - -############### AUTOLOGIN LINKS ############## - -# LOGIN FOR USERS ON FRONT -function openpanel_ClientArea($params) { - list($jwtToken, $error) = getAuthToken($params); - - if (!$jwtToken) { - return '

Error: ' . $error . '

'; - } - - $apiProtocol = getApiProtocol($params["serverhostname"]); - $getLoginLinkEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/users/' . $params["username"]; - - // Prepare data for login link generation - $loginData = array(); - - // Make API request to get login link - $response = apiRequest($getLoginLinkEndpoint, $jwtToken, $loginData, 'CONNECT'); - - if (isset($response["link"])) { - $code = ''; - $code .= ' -   Login to OpenPanel - '; - $code .= ''; - } else { - $code = '

Error: Unable to generate login link for OpenPanel. Please try again later.

'; - if (isset($response["message"])) { - $code .= '

Server Response: ' . htmlentities($response["message"]) . '

'; - } - } - - return $code; -} - - - -# LOGIN FROM admin/configservers.php -function openpanel_AdminLink($params) { - $apiProtocol = getApiProtocol($params["serverhostname"]); - $adminLoginEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/login'; - - $code = '
- - - -
'; - return $code; -} - - -# LOGIN FOR ADMINS FROM BACKEND -function openpanel_LoginLink($params) { - list($jwtToken, $error) = getAuthToken($params); - - if (!$jwtToken) { - return '

Error: ' . $error . '

'; - } - - $apiProtocol = getApiProtocol($params["serverhostname"]); - $getLoginLinkEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/users/' . $params["username"]; - - // Prepare data for login link generation - $loginData = array(); - - // Make API request to get login link - $response = apiRequest($getLoginLinkEndpoint, $jwtToken, $loginData, 'CONNECT'); - - if (isset($response["link"])) { - $code = ''; - $code .= ' -   Login to OpenPanel - '; - $code .= ''; - } else { - // Log or print the response in case of error - $code = '

Error: Unable to generate the login link. Please try again later.

'; - if (isset($response["message"])) { - $code .= '

Server Response: ' . htmlentities($response["message"]) . '

'; - } - } - - return $code; -} - - - - -############### MAINTENANCE ################ - - -# TODO: GET USAGE FOR USERS!!!!!!!! -function openpanel_UsageUpdate($params) { - - # resposne should be formated like this: - #{ - # "disk_usage": "1024 MB", - # "disk_limit": "2048 MB", - # "bandwidth_usage": "512 MB", - # "bandwidth_limit": "1024 MB" - #} - - $apiProtocol = getApiProtocol($params["serverhostname"]); - $authEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/'; - - // Authenticate and get JWT token - list($jwtToken, $error) = getAuthToken($params); - - if (!$jwtToken) { - return json_encode(array( - "success" => false, - "message" => $error - )); - } - - // Prepare API endpoint for getting usage - $getUsageEndpoint = $apiProtocol . $params["serverhostname"] . ':2087/api/usage/'; - - // Prepare cURL request for getting usage - $curl = curl_init(); - curl_setopt_array($curl, array( - CURLOPT_URL => $getUsageEndpoint, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_CUSTOMREQUEST => 'PATCH', - CURLOPT_HTTPHEADER => array( - "Authorization: Bearer " . $jwtToken, - "Content-Type: application/json" - ), - )); - - // Execute cURL request for getting usage - $response = curl_exec($curl); - - // Check for errors - if (curl_errno($curl)) { - $result = json_encode(array( - "success" => false, - "message" => "cURL Error: " . curl_error($curl) - )); - } else { - // Decode the response JSON - $usageData = json_decode($response, true); - - // Loop through results and update database - foreach ($usageData as $user => $values) { - update_query("tblhosting", array( - "diskusage" => $values['disk_usage'], - "disklimit" => $values['disk_limit'], - "lastupdate" => "now()" - ), array("server" => $params['serverid'], "username" => $user)); - } - - $result = json_encode(array( - "success" => true, - "message" => "Usage updated successfully" - )); - } - - // Close cURL session - curl_close($curl); - - return $result; -} - - -?> \ No newline at end of file diff --git a/integrations/whmcs/whmcs.json b/integrations/whmcs/whmcs.json deleted file mode 100644 index e5c388b5..00000000 --- a/integrations/whmcs/whmcs.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "schema": "1.0", - "type": "whmcs-servers", - "name": "OpenPanel", - "license": "proprietary", - "category": "provisioning", - "description": { - "name": "OpenPanel", - "tagline": "A Linux hosting control panel based on Docker.", - "long": "" - }, - "support": { - "homepage": "https://openpanel.co/", - "docs_url": "https://dev.openpanel.co/api" - }, - "authors": [ - { - "name": "OPENPANEL", - "homepage": "https:\/\/openpanel.co\/" - } - ] -} diff --git a/modules/example/example.py b/modules/example/example.py new file mode 100644 index 00000000..c5913b2d --- /dev/null +++ b/modules/example/example.py @@ -0,0 +1,33 @@ +# example.py +################################### + +# for localization +from flask_babel import Babel, _ + +# from flask only what we need for module +from flask import Flask, Response, render_template + +# from openpanel app only what we need for templates +from app import login_required_route, query_email_by_id, log_user_action, query_username_by_id, get_user_services_and_domains, gravatar_url, avatar_type + +# from available python modules +import os +import string +import requests +import random + + + +# example route +@app.route('/settings/something', methods=['GET', 'POST']) +@login_required_route +def account_notifications(): + user_id = session['user_id'] + title=_('My OpenPanel Module') # used for page titles in template + current_route = "/settings/notifications" # used for page breadcrumbs in template + services, domains = get_user_services_and_domains(user_id) # only if we need user domains on this route + current_username = query_username_by_id(user_id) # for template + current_email = query_email_by_id(user_id) # for template + gravatar_image_url = gravatar_url(current_email) # for template + + return render_template('my_template.html', title=title, username=current_username, email=current_email, gravatar_image_url=gravatar_image_url, avatar_type=avatar_type, domains=domains, current_route=current_route, current_username=current_username) diff --git a/modules/example/my_template.html b/modules/example/my_template.html new file mode 100644 index 00000000..96ebd625 --- /dev/null +++ b/modules/example/my_template.html @@ -0,0 +1,38 @@ +{% extends 'base.html' %} +{% block content %} + + + + + + +

{{ _('Localized text.') }}

+ +
+ + + + + + + + +
+ +
+ +
+ +
+ +
+
+ + + +{% endblock %} + + + diff --git a/modules/example/search.json b/modules/example/search.json new file mode 100644 index 00000000..744b95e9 --- /dev/null +++ b/modules/example/search.json @@ -0,0 +1,6 @@ + { + "description": "This is my awesome module.", + "link": "/settings/something", + "module": "example", + "name": "My Example Module" + }, diff --git a/templates/admini/apache_nginx_conf_editor.html b/templates/admini/apache_nginx_conf_editor.html deleted file mode 100644 index 8f99a4d6..00000000 --- a/templates/admini/apache_nginx_conf_editor.html +++ /dev/null @@ -1,122 +0,0 @@ -{% extends 'base.html' %} -{% block content %} - - - - - - - - -

{{ _('Here you can edit the main configuration file for your webserver.') }}

- -
-
- -
- - - - - - -
- -
- -
- -
- -
-
- - - - - - - - - -{% endblock %} - diff --git a/templates/admini/autoinstaller.html b/templates/admini/autoinstaller.html deleted file mode 100644 index 77c90a00..00000000 --- a/templates/admini/autoinstaller.html +++ /dev/null @@ -1,174 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - -
-{% if 'wordpress' in enabled_modules %} -
-
- -
-
-
- -
-
-
WordPress
-
-
-

Versatile and user-friendly platform for creating and managing websites and blogs.

-
- -
-
-{% endif %} - -{% if 'pm2' in enabled_modules %} -
-
- -
-
-
- PM2 -
-
-
NodeJS & Python
-
-
-

Simplify app setup for scalable NodeJS and Python versatile web development.

-
- -
-
-{% endif %} - - - -{% if 'mautic' in enabled_modules %} -
-
- -
- -
-
- - -
-
-
Mautic
-
-
-

Powerful and flexible marketing automation software for managing campaigns and customer interactions.

-
- -
-
-{% endif %} - -{% if 'flarum' in enabled_modules %} -
-
- -
-
-
- image/svg+xml -
-
-
Flarum
-
-
-

Fast, lightweight, and customizable forum software for building engaging online communities.

-
- -
-
-{% endif %} - - - - - - -{% if 'fossbilling' in enabled_modules %} -
-
- -
-
-
- - - - - - - -
-
-
FossBilling
-
-
-

The free and open-source solution for efficient billing and client management.

-
- -
-
-{% endif %} - - - - - - - - - -
- - -{% endblock %} - diff --git a/templates/admini/base.html b/templates/admini/base.html deleted file mode 100644 index 39b7ace9..00000000 --- a/templates/admini/base.html +++ /dev/null @@ -1,1248 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - {{ title }} - {% if brand_name %}{{brand_name}}{% else %}{{brand}}{% endif %} - - - - - - - - - - -{% if current_route == "/server/webserver_conf" or title == "PHP.INI Editor" %} - - - - - - - - - - - -{% endif %} - - - - - - - - - - -{% if current_route.startswith('/usage') %} - - - - - -{% endif %} - - - - - - -{% block custom_header %} - - {% include 'custom_code/in_header.html' %} -{% endblock %} - - - - - - - - - -
- {% include 'partials/sidebar.html' %} - - - - {% set applications_available_for_install = 0 %} - {% if 'wordpress' in enabled_modules %} - {% set applications_available_for_install = applications_available_for_install + 1 %} - {% endif %} - {% if 'pm2' in enabled_modules %} - {% set applications_available_for_install = applications_available_for_install + 1 %} - {% endif %} - {% if 'mautic' in enabled_modules %} - {% set applications_available_for_install = applications_available_for_install + 1 %} - {% endif %} - {% if 'flarum' in enabled_modules %} - {% set applications_available_for_install = applications_available_for_install + 1 %} - {% endif %} - - - - - - - - - - -
- - - -{% if current_route.startswith('/website') %} - - - - {% if user_websites %} - - - {% if 'wordpress' in enabled_modules or 'pm2' in enabled_modules or 'mautic' in enabled_modules or 'flarum' in enabled_modules %} - - - - {% endif %} - - - - - - {% endif %} - - -{% endif %} - - - - -
-{% if current_route.startswith('/website') %} - -{% endif %} - - -{% if session.get('impersonate') %} -
-
-

{{ _("You are currently impersonating user") }} '{{current_username}}'

-Return to admin -
-
- - - - -{% endif %} - -{% if current_route.startswith('/files') %} - - - -
-
- -
-
- - -
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
-
-{% else %} -
-
- -
-
- -
- -
- - -{% if current_route.startswith('/files') or title == "j" %} - -{% else %} - - -{% endif %} - - - - - - - - - - -
- -{% if 'favorites' in enabled_modules %} - - - -
- -
- - - - - - - - - - - - - - - - -{% endif %} - - - - - - - - - - - - - - - - - - -
- - - -
-
- - -{% endif %} - - - -
-
-{% block content %}{% endblock %} -
-
-
-
-
-
- - - - - - -{% include 'partials/notifications.html' %} - - - -{% include 'partials/_shortcuts.html' %} - - - - - - - - - - - -{% block custom_footer %} - - {% include 'custom_code/in_footer.html' %} -{% endblock %} - -{% if url_for('static', filename='js/custom.js') %} - - -{% endif %} - - diff --git a/templates/admini/cronjobs.html b/templates/admini/cronjobs.html deleted file mode 100644 index e32cc303..00000000 --- a/templates/admini/cronjobs.html +++ /dev/null @@ -1,1045 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - -{% if view_mode == 'table' %} - - - - - -

{{ _('A cron job is a Linux command used to schedule tasks for future execution. It allows you to automate repetitive tasks, such as sending notifications or running scripts at specific intervals.') }}

- -
-
-
- - -
-
-

{{ _('Add New Cron Job') }}

- -
-
-
- - -
-
- - -
-
-
-
- - -
-
- - -
- - -
-
-
- - -
-
- - - -
-
-
-
- -
-
- - - -
-
-
-
- - -
-
- - -
-
-
-
- -
-
-
- - -
-
- - -
-
-
-
- -
-
- - - - - - - - -{% if cronjobs_with_line_numbers %} - -
- - - - - - - - - - - - - - {% for item in cronjobs_with_line_numbers %} -{% if item.line.startswith('# ') or item.line.strip() == '' %} - - - -{% else %} - - - - - {% set cron_components = item.line.split(' ') %} - - - - - - - - - - {% endif %} - {% endfor %} - -
{{ _('Minute') }}{{ _('Hour') }}{{ _('Day') }}{{ _('Month') }}{{ _('Weekday') }}{{ _('Command') }}{{ _('Actions') }}
{{item.line}}
- {% if cron_components[0].startswith('#') %} - {{ cron_components[0][1:] }} - {% else %} - {{ cron_components[0] }} - {% endif %} - {{ cron_components[1] }}{{ cron_components[2] }}{{ cron_components[3] }}{{ cron_components[4] }} -
{{ item.line.split(' ', 5)[5] }}
-
- - -
- - - - - {% if item.line.startswith('#') %} - - {% else %} - - {% endif %} - - - - -
-  - - -
- - - -
- - - - - - - - - - - -{% else %} -

{{ _('No cronjobs.') }}

-{% endif %} - - - - - - - -{% elif view_mode == 'code' %} - -
- {{ _('Attention:') }} {{ _('Editing crontab file is intended for advanced users only. If you mistyped the cron entry in the file, you will not be warned as opposed to when saving cronjobs in basic editor.') }} -

- {{ _("Prepend # before the line to pause cronjob. To create a comment, prepend # followed by space: '# '.") }} -
- -
- - - -
- - - - -{% endif %} - - - - -{% endblock %} diff --git a/templates/admini/custom_code/custom.css b/templates/admini/custom_code/custom.css deleted file mode 100644 index 8b137891..00000000 --- a/templates/admini/custom_code/custom.css +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/admini/custom_code/custom.js b/templates/admini/custom_code/custom.js deleted file mode 100644 index 8b137891..00000000 --- a/templates/admini/custom_code/custom.js +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/admini/custom_code/in_footer.html b/templates/admini/custom_code/in_footer.html deleted file mode 100644 index 8b137891..00000000 --- a/templates/admini/custom_code/in_footer.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/admini/custom_code/in_header.html b/templates/admini/custom_code/in_header.html deleted file mode 100644 index 8b137891..00000000 --- a/templates/admini/custom_code/in_header.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/admini/dashboard/dashboard.html b/templates/admini/dashboard/dashboard.html deleted file mode 100644 index d23383c4..00000000 --- a/templates/admini/dashboard/dashboard.html +++ /dev/null @@ -1,1244 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - - - - -
- -
- - -
- - -{% if custom_message %} -
-
-
- {{ custom_message|safe }} -
-
-
-{% endif %} - - -{% set domain_count = maindomains|length %} -{% if total_domains_count == 0 or domain_count == 0 %} - -
- -
-
-

{{ _('👋 Welcome to your new hosting account. OpenPanel is here to help!') }}

-

{{ _('To get started, add a domain name to create a new site and unlock a world of possibilities for your online presence.') }}

- -{% if dedicated_ip != _("Unknown") %} -

{{ _("To secure your website with a free Let's Encrypt SSL, make sure your domain's A record is pointed to your dedicated IP address:") }} {{ dedicated_ip }} {{ _('Ready to start?') }}

-{% else %} -

{{ _("To secure your website with a free Let's Encrypt SSL, make sure your domain's A record is pointed to the server IP address:") }} {{ server_ip }} {{ _('Ready to start?') }}

-{% endif %} - {{ _('Add a new domain') }} -
-
-
- -{% endif %} - - - - -
-
{{ _('Files') }}
-
-
-
- - -{% if 'ftp' in enabled_modules %} - -{% endif %} - -{% if 'disk_usage' in enabled_modules %} - -{% endif %} -{% if 'backups' in enabled_modules %} - -{% endif %} -{% if 'ftp' in enabled_modules %} - -{% endif %} - - -{% if 'inodes' in enabled_modules %} - -{% endif %} -{% if 'malware_scan' in enabled_modules %} - -{% endif %} -{% if 'fix_permissions' in enabled_modules %} - -{% endif %} - - -
-
-
-
-
-
{{ _('Domains') }}
-
- -
- - -
-
-
{{ _('Databases') }}
-
-
-
- -
- -{% if 'phpmyadmin' in enabled_modules %} - -{% endif %} - - - - -
-
-
- - - -{% if 'wordpress' in enabled_modules or 'pm2' in enabled_modules or 'mautic' in enabled_modules or 'flarum' in enabled_modules %} - -
-
{{ _('Applications') }}
-
-
- -
-{% if 'wordpress' in enabled_modules %} - -{% endif %} -{% if 'pm2' in enabled_modules %} - -{% endif %} - -{% if 'mautic' in enabled_modules %} - -{% endif %} - - - -{% if 'flarum' in enabled_modules %} - -{% endif %} - -
-
-
-{% endif %} - - - - - - -{% if 'emails' in enabled_modules %} - -
-
{{ _('Emails') }}
-
-
- - -
-
-{% endif %} - - - - - - - - - - - - - -{% if 'redis' in enabled_modules or 'memcached' in enabled_modules or 'elasticsearch' in enabled_modules %} - -
-
-
{{ _('Search & Caching') }}
-
-
-
- -
-{% if 'redis' in enabled_modules %} - -{% endif %} -{% if 'memcached' in enabled_modules %} - -{% endif %} -{% if 'elasticsearch' in enabled_modules %} - -{% endif %} -
-
-
-{% endif %} - - - - - -{% if 'crons' in enabled_modules or 'ssh' in enabled_modules or 'terminal' in enabled_modules or 'usage' in enabled_modules or 'process_manager' in enabled_modules or 'webserver' in enabled_modules%} -
-
-
{{ _('Advanced') }}
-
-
-
- -
- -{% if 'crons' in enabled_modules %} - -{% endif %} -{% if 'ssh' in enabled_modules %} - -{% endif %} - - - - -{% if 'terminal' in enabled_modules %} - -{% endif %} -{% if 'usage' in enabled_modules %} - -{% endif %} -{% if 'process_manager' in enabled_modules %} - - -{% endif %} -{% if 'webserver' in enabled_modules %} - - -{% endif %} - - -{% if 'webserver' in enabled_modules %} - -{% endif %} -{% if 'webserver' in enabled_modules %} - -{% endif %} -{% if 'webserver' in enabled_modules %} - -{% endif %} -{% if 'webserver' in enabled_modules %} - -{% endif %} -
-
-
- - -
-{% endif %} - -
-
-
{{ _('Account') }}
-
-
-
- -
- - -{% if 'twofa' in enabled_modules %} - -{% endif %} -{% if 'activity' in enabled_modules %} - -{% endif %} -{% if 'login_history' in enabled_modules %} - -{% endif %} - -
-
-
-
- - -
- -
- -
- -
-{% if 'twofa' in enabled_modules %} - {% if twofa_nag == "yes" %} - -
-
-
{{ _('Two-Factor Authentication') }}
- -
-
- -
-

{{ _('2FA is an added layer of security that significantly reduces the risk of unauthorized access to your account by requiring an additional verification step beyond just a password') }}

-
- - {% if twofa_enabled %} -

{{ _('2FA is enabled for your account.') }}

-
- -
- {% else %} -

{{ _('2FA is disabled for your account.') }}

-
- - -
- {% endif %} - - - -
-
- {% endif %} -{% endif %} -
-
-
-
{{ _('Server Information & Statistics') }}
- -
-
- -{% if ns1 and ns2 %} -
- - -{% endif %} -
- - - -
- - - - - - - - - - -
- -
- - - - - - - - -{% if 'emails' in enabled_modules %} - -
-{% endif %} - - - - - - - - - - -{% if 'ftp' in enabled_modules %} - -
-{% endif %} - - - - - - - - - - - - - - - - -{% if 'disk_usage' in enabled_modules %} - -{% endif %} - -{% if 'disk_usage' in enabled_modules %} - -{% endif %} -
- -{% if 'inodes' in enabled_modules %} - -{% endif %} - -{% if 'inodes' in enabled_modules %} - -{% endif %} - - - - - - - - - - - - - - - -
-{% if 'usage' in enabled_modules %} - -{% endif %} - -{% if 'usage' in enabled_modules %} - -{% endif %} - -
-{% if 'usage' in enabled_modules %} - -{% endif %} - -{% if 'usage' in enabled_modules %} - -{% endif %} - - - - - - - - -
- - - - - -
-
- - -{% if how_to_guides == "yes" %} -
-
-
-
{{ _('General How-to') }}
- -
-
- -
- -
-
-{% endif %} - -
- - - - - - - -
- - - - -
- - - - - - -{% endblock %} diff --git a/templates/admini/dashboard/knowledge_base_articles.json b/templates/admini/dashboard/knowledge_base_articles.json deleted file mode 100644 index 8b137891..00000000 --- a/templates/admini/dashboard/knowledge_base_articles.json +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/admini/dashboard/knowledge_base_articles_default.json b/templates/admini/dashboard/knowledge_base_articles_default.json deleted file mode 100644 index bba6f997..00000000 --- a/templates/admini/dashboard/knowledge_base_articles_default.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "how_to_topics": [ - {"title": "How to install WordPress", "link": "https://openpanel.com/docs/panel/applications/wordpress#install-wordpress"}, - {"title": "Publishing a Python Application", "link": "https://openpanel.com/docs/panel/applications/pm2#python-applications"}, - {"title": "How to edit Nginx / Apache configuration", "link": "https://openpanel.com/docs/panel/advanced/server_settings#nginx--apache-settings"}, - {"title": "How to create a new MySQL database", "link": "https://openpanel.com/docs/panel/databases/#create-a-mysql-database"}, - {"title": "How to add a Cronjob", "link": "https://openpanel.com/docs/panel/advanced/cronjobs#add-a-cronjob"}, - {"title": "How to change server TimeZone", "link": "https://openpanel.com/docs/panel/advanced/server_settings#server-time"} - ], - "knowledge_base_link": "https://openpanel.com/docs/panel/intro/?source=openpanel_server" -} diff --git a/templates/admini/databases/edit_mysql_config.html b/templates/admini/databases/edit_mysql_config.html deleted file mode 100644 index 040e73a5..00000000 --- a/templates/admini/databases/edit_mysql_config.html +++ /dev/null @@ -1,186 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - - -
- - - -

{{_('This tool allows you to make changes to your MySQL configuration. Modifications made here will prompt a MySQL service restart.')}}

- - -
-
-
-
{{_('MySQL Configuration Settings')}}
- - -
-
-
- -
-
-
- {% for key in default_keys %} -
- - -
- -
-
- -
-
-
- {% endfor %} - -
-
- - -
-
- - - - -
- -
-
-
-
{{_('Recommended values:')}}
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
- - -
- - - - - -
- -
- {% if mysql_status_display == 'ON' %} {{ _('Enabled') }}{% elif mysql_status_display == 'OFF' %} {{ _('Disabled') }}{% else %} {{ _('Unknown') }}{% endif %} -
- -
- -
-
- - - - - - - - - - - - - -{% endblock %} diff --git a/templates/admini/databases/mysql.html b/templates/admini/databases/mysql.html deleted file mode 100644 index 32db386e..00000000 --- a/templates/admini/databases/mysql.html +++ /dev/null @@ -1,743 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}Databases{% endblock %} - -{% block content %} - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
{{_('Databases')}} ()
-
- - - - - - -
- -

{{_("MySQL databases are used to store and manage your website's data, such as content, user information, and product details, making it accessible and organized for your web applications. On this page, you can easily create new databases and efficiently manage existing ones to organize and store your website's data effectively.")}}

- - - - - - - - - - - - - -
{{_('Database Name')}}{{_('Size')}}{{_('Assigned Users')}}{{_('Action')}}
- - - -
- -
-
{{_('Users')}} ()
-
- - - -
- - - - - -

{{_("MySQL users are essential for controlling who can access and interact with your databases, ensuring data security and controlled access to your website's information. Here you can create and manage MySQL user accounts with specific permissions, ensuring secure access to your databases.")}}

- - - - - - - - - -
{{_('User')}}{{_('Action')}}
- - - - -{% endblock %} - diff --git a/templates/admini/databases/processlist.html b/templates/admini/databases/processlist.html deleted file mode 100644 index 340d6246..00000000 --- a/templates/admini/databases/processlist.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -
- -

{{ _('This interface lists all of the processes that currently run on any database on your server.') }}

- - - - - - - - - - - - - - - - - - {% for row in processlist_output.split('\n')[2:] %} - {% if row %} - - {% for column in row.split('\t') %} - - {% endfor %} - - {% endif %} - {% endfor %} - -
Id{{ _('User') }}{{ _('Host') }}DB{{ _('Command') }}{{ _('Time') }}{{ _('State') }}{{ _('Info') }}
{{ column }}
- -
-{% endblock %} diff --git a/templates/admini/databases/remote_mysql.html b/templates/admini/databases/remote_mysql.html deleted file mode 100644 index b407a646..00000000 --- a/templates/admini/databases/remote_mysql.html +++ /dev/null @@ -1,191 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - - -
- -

{{ _('Remote MySQL access gives you the ability to connect to a MySQL database on this server from a another (remote) device or location over the internet.') }}

- -
-
- -
-
-
- {% if remote_mysql_display == 'ON' %} -

{{ _('Enabled<') }}/h3> - {% elif remote_mysql_display == 'OFF' %} -

{{ _('Disabled') }}

- {% else %} -

{{ _(' Unknown. Contact Administrator.') }}

- {% endif %} -
-
- - {% if remote_mysql_display == 'ON' %} -
-
-
-

{{server_ip}}

-
-
-
-
-
- - -

{{container_port}}

{{ _('*Port is random generated and unique to your account.') }} -
-
- {% elif remote_mysql_display == 'OFF' %} - {% else %} - {% endif %} -
-
-
- - -{% if remote_mysql_display == 'OFF' %} - -
-
-
-
{{ _('Important Security Notice') }}
- -
-
-
-

{{ _('Allowing remote MySQL access opens your database to connections from the entire internet, which may pose a security risk. Please consider the following:') }}

-
    -
  • {{ _('Security Vulnerabilities') }}: {{ _('Allowing access from the web can expose your database to potential security vulnerabilities, increasing the risk of unauthorized access, data breaches, and data loss.') }}
  • -
  • {{ _('Data Privacy') }}: {{ _('Your sensitive data may be at risk if not properly secured. Make sure to use strong passwords and encryption to protect your information.') }} -
  • {{ _('Firewall and Access Control') }}: {{ _('It is crucial to set up robust firewall rules and access control to restrict connections only to trusted IP addresses.') }} -
  • {{ _('Regular Backups') }}: {{ _('Ensure that you have regular database backups in place to recover data in case of any security incidents.') }} -
-

{{ _("Before enabling remote MySQL access, please review your security settings, and consider the potential risks carefully. If you're unsure about the security implications or need assistance, consult with your system administrator or a security expert.") }}

- -

{{ _('Your data security is important to us, and we recommend taking the necessary precautions to protect it.') }}

-
- - -
-
-
-
-{% endif %} - - -
- -
- {% if remote_mysql_display == 'ON' %} {{ _('Enabled') }}{% elif remote_mysql_display == 'OFF' %} {{ _('Disabled') }}{% else %} {{ _('Unknown') }}{% endif %} -
- -
-{% if remote_mysql_display == 'ON' %} -
- - -
-{% elif remote_mysql_display == 'OFF' %} -
- - -
-{% else %} -
- - -
-
- - -
-{% endif %} -
-
- - -{% endblock %} - diff --git a/templates/admini/domains/domains.html b/templates/admini/domains/domains.html deleted file mode 100644 index f96c9d71..00000000 --- a/templates/admini/domains/domains.html +++ /dev/null @@ -1,892 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - - -
-
- - -
- -
- - - - - -{% if total_pages > 1 %} -
-
-
-

- {{ _('Showing domains') }} {{ start_line_number }} {{ _('to') }} {{ end_line_number }}, {{ _('from a total of') }} {{ total_domains }}. -

-
-
- - - -
-
-
-
-{% endif %} - - - - - - - - - - - - - - - - {% for domain in domains %} - - - - - - - -{% else %} - -{% endif %} - - - - - {% endfor %} - -
{{ _('Domain Name') }}{{ _('Document Root') }}{{ _('DNS') }}{{ _(' Zone') }}{{ _('Redirect') }}{{ _('Force ') }}{{ _('HTTPS') }}
- - {{ domain.domain_url }} - - -
- /home/{{ current_username }}/{{ domain.domain_url }} -
-
/home/{{ current_username }}/{{ domain.domain_url }} -{{ _('Edit DNS') }} - - {% if domain.redirect_url %} - - -
- {{ domain.redirect_url }} - - -
- - - -
- -
- {% else %} - - - {% endif %} - - -{% if domain.https != "Unknown" %} -
- - - -
- - -
- -
- - - - - -
-{% if total_pages > 1 %} -
-
-
-

- {{ _('Showing domains') }} {{ start_line_number }} {{ _('to') }} {{ end_line_number }}, {{ _('from a total of') }} {{ total_domains }}. -

-
-
- - - -
-
-
-{% endif %} -
- - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -{% endblock %} diff --git a/templates/admini/domains/edit_dns_zone.html b/templates/admini/domains/edit_dns_zone.html deleted file mode 100644 index 1f9e030b..00000000 --- a/templates/admini/domains/edit_dns_zone.html +++ /dev/null @@ -1,752 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -
- {% if domain %} - - - -

{{ _('The DNS Zone Editor feature allows you to create, edit, and delete Domain Name System (DNS) zone records.') }}

- - - - - -{% if view_mode == 'table' %} - - - - - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - -{% for item in dnszone_with_line_numbers %} - {% if item.line %} - - - - {% set values = item.line.split(maxsplit=4) %} - - - {% if 'SOA' not in values[3] %} - - - - - - {% endif %} - - {% endif %} -{% endfor %} - - - -
{{ _('Name') }}{{ _('TTL') }}{{ _('Type') }}{{ _('Record') }}{{ _('Actions') }}
-
- {{ values[0] if values|length > 0 else '' }} - {% if item.comment %} - - - - - - - - - {% endif %} -
-
{{ values[1] if values|length > 1 else '' }}{{ values[3] if values|length > 3 else '' }} - {% if values|length > 4 %} - {% set last_value = values[4] %} - {{ last_value.strip('"') if last_value.startswith('"') and last_value.endswith('"') else values[4:]|join(' ') }} - {% else %} - {{ values[4] if values|length > 4 else '' }} - {% endif %} - - -   - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - -{% elif view_mode == 'code' %} - -
- Attention: Editing DNS file is intended for advanced users only. - This action can potentially lead to server misconfiguration or downtime if not done correctly. -

- Please be cautious and make sure you understand the changes you are making. -
- -
- - - -
- - - - - - - - -{% endif %} - {% else %} - - -

{{ _('DNS Zone Editor allows you to manage and edit Domain Name System (DNS) zone files, which contain critical information for mapping domain names to IP addresses and managing various DNS records, such as A, CNAME, MX, and TXT records.') }}

- - -
-
- - -
-
- - - {% endif %} - - - - - - -
- - - - - {% endblock %} - diff --git a/templates/admini/domains/edit_vhost.html b/templates/admini/domains/edit_vhost.html deleted file mode 100644 index 3b45c130..00000000 --- a/templates/admini/domains/edit_vhost.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends 'base.html' %} -{% block content %} -
-
- Attention: Editing domain file is intended for advanced users only. This action can potentially lead to server misconfiguration or downtime if not done correctly. -

- Please be cautious and make sure you understand the changes you are making. We use a rollback mechanism to check for errors, and if any issues are detected, we will revert the changes. However, it's important to have a backup of your configurations before proceeding. -
-
- - -
- - -
- -
-
-{% endblock %} diff --git a/templates/admini/domains/logs.html b/templates/admini/domains/logs.html deleted file mode 100644 index dd6d2137..00000000 --- a/templates/admini/domains/logs.html +++ /dev/null @@ -1,25 +0,0 @@ -{% extends 'base.html' %} -{% block content %} -
-
-
- - -
-
- -
-{% endblock %} diff --git a/templates/admini/domains/logs_single.html b/templates/admini/domains/logs_single.html deleted file mode 100644 index 3f478831..00000000 --- a/templates/admini/domains/logs_single.html +++ /dev/null @@ -1 +0,0 @@ -{{ html_content|safe }} diff --git a/templates/admini/elasticsearch.html b/templates/admini/elasticsearch.html deleted file mode 100644 index 7607f154..00000000 --- a/templates/admini/elasticsearch.html +++ /dev/null @@ -1,280 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - -
- -{% if elastic_status_display == 'ON' %} - -
-
-
-
{{_('Connection Info')}}
-
- - -
-
-
-

{{_('Active')}}

- - -
-
-
-
-
-

127.0.0.1

- - {{_('*or localhost')}} -
-
-
-
-
- - -

9200

{{_('*Access to the service is NOT available from other servers.')}} -
-
-
- -
-
-
-
-
-
{{_('Elasticsearch Settings')}}
- -
-
-
-
-
- - -
- - -
- - - -
- -{% elif elastic_status_display == 'NOT INSTALLED' %} -
-

{{_('Elasticsearch is not currently installed.')}}

-

{{_('To install Elasticsearch click on the button bellow.')}}

-
- - -
-
- - {% elif elastic_status_display == 'OFF' %} -
-

{{_('Elasticsearch is currently disabled.')}}

-

{{_('To enable Elasticsearch click on the button bellow.')}}

-
- - -
- - -
- {% else %} -
-

{{_('Elasticsearch service status is unknown.')}}

-

{{_('Unable to determinate current elasticsearch service status, try Start&Stop actions.')}}
{{_('If the issue persists please contact support.')}}

-
- - -
-
- - -
-
- {% endif %} -
- - - - - - - - - - - - - - - - -
- -
- {% if elastic_status_display == 'ON' %} Enabled{% elif elastic_status_display == 'OFF' %} Disabled{% elif elastic_status_display == 'NOT INSTALLED' %} Not Installed{% else %} Unknown{% endif %} -
- -
-{% if elastic_status_display == 'ON' %} -
- - -
-{% elif elastic_status_display == 'OFF' %} -
- - -
-{% elif elastic_status_display == 'NOT INSTALLED' %} -
- - -
-{% else %} -
- - -
-
- - -
-{% endif %} -
-
- - - - -{% endblock %} - diff --git a/templates/admini/emails/accounts.html b/templates/admini/emails/accounts.html deleted file mode 100644 index 59230a94..00000000 --- a/templates/admini/emails/accounts.html +++ /dev/null @@ -1,395 +0,0 @@ -{% extends 'base.html' %} -{% block content %} - - - - - -
- - - - - - - - - - - - - - - - - - {% for email_entry in current_emails_list %} - {% set parts = email_entry.split(' ') %} - {% set status = parts[0] %} - {% set address = parts[1] %} - {% set quota = ' '.join(parts[2:]) %} - {% set quota_parts = quota.split('[') %} - {% if quota_parts|length > 1 %} - {% set percentage_str = quota_parts[1].split(']')[0] %} - {% else %} - {% set percentage_str = '0' %} - {% endif %} - - - - - - - - {% endfor %} - -
{{ _('Account @ Domain') }}{{ _('Storage') }}{{ _(' Used') }}{{ _('Options') }}
{{ address }} - {{ quota }} -
-
-
-
-
- -
- - - - - - - - - - - -
- -
- -
- -
- - -
-
- - - - -{% endblock %} - - diff --git a/templates/admini/emails/single_account.html b/templates/admini/emails/single_account.html deleted file mode 100644 index 1ad51ef6..00000000 --- a/templates/admini/emails/single_account.html +++ /dev/null @@ -1,511 +0,0 @@ -{% extends 'base.html' %} -{% block content %} - - - {% set parts = current_emails_list.split(' ') %} - {% set status = parts[0] %} - {% set address = parts[1] %} - {% set quota = ' '.join(parts[2:]) %} - {% set quota_parts = quota.split('[') %} - {% if quota_parts|length > 1 %} - {% set percentage_str = quota_parts[1].split(']')[0] %} - {% else %} - {% set percentage_str = '0' %} - {% endif %} - - - -
- - -
- -
-
-
-

{{ _("Manage an Email Account") }}

-

{{ _("Use this page to manage your email account.") }}

-
-
- -
- - - - -
- -
- -
- - - -
-{{ quota }} -
-
-
-
-
- - -
-
- - - - - - -
- -
-
- - - - -
- -
-
- - -
-
- - -
-
-
- -
- -
-
- - -
-
- - -
-
-
- - - - - - - -
- -
- -
- - -
-
-
- - - - - - -
- -
- -
-
-
-
- - -
-
-

- - -

-
-
-
-

Sieve {{ _("allows to specify filtering rules for incoming emails that allow for example sorting mails into different folders depending on the title of an email.") }}

-
-
{{ _("Current Filters") }}
- -{% set domain = address.split('@')[-1] if '@' in address else 'DOMAIN_NAME' %} -{% set user = address.split('@')[0] if '@' in address else 'USERNAME' %} - -/home/{{current_username}}/mail/{{ domain }}/{{user}}/home/.dovecot.sieve -
- -
- - - - - -
- - - -
- -
{{ _("Examples") }}
-
-
- - -
-

{{ _("An example of a sieve filter that moves mails to a folder ") }}INBOX/spam {{ _("depending on the sender address:") }}

- -
-require ["fileinto", "reject"];
-
-if address :contains ["From"] "spam@spam.com" {
-  fileinto "INBOX.spam";
-} else {
-  keep;
-}
-
-
-
- -
- -
-

{{ _("Another example of a sieve filter that forward mails to a different address:") }}

- -
-require ["copy"];
-
-redirect :copy "user2@not-example.com";
-
- -
-
- - -
- -
-

{{ _("Just forward all incoming emails and do not save them locally:") }}

- -
-redirect "user2@not-example.com";
-
-
-
- -
-
-

{{ _("It is possible to sort subaddresses such as") }} user+mailing-lists@example.com {{ _("into a corresponding folder") }} (here: INBOX/Mailing-lists) {{ _("automatically.") }}

- -
-require ["envelope", "fileinto", "mailbox", "subaddress", "variables"];
-
-if envelope :detail :matches "to" "*" {
-  set :lower :upperfirst "tag" "${1}";
-  if mailboxexists "INBOX.${1}" {
-    fileinto "INBOX.${1}";
-  } else {
-    fileinto :create "INBOX.${tag}";
-  }
-}
-
-
-
- -
-
- - -
-
-
-
-
- - - - - - - - - - - - -
-

- - -

-
-
-
-

{{ _("You can manually configure your mail client using the settings below. We recommend that you use IMAP and SMTP for your email account rather than ActiveSync unless you are on Android and need contacts support or push updates.") }}

-
-
{{ _("Secure SSL/TLS Settings (Recommended)") }}
-
-
- -
- -
-
- -
- -
- Use the email account’s password. -
-
- - -
- -
- -
IMAP Port: 993
- -
- - -
- - -
- -
- -
SMTP Port: 465
- -
-
- - -IMAP and SMTP require authentication. -
-
- -
{{ _("Non-SSL Settings (NOT Recommended) -") }}
-
-
- -
- -
-
- -
- -
- Use the email account’s password. -
-
- - -
- -
- -
IMAP Port: 143
- -
- - -
- - -
- -
- -
SMTP Port: 587
- -
-
- - -IMAP and SMTP require authentication. -
-
- - -
-
-
-
-
- - - - - - - - - - - - - - - - - - -
- - - - - - - -
- - - - - -
- - - - -
- - -
- -{% endblock %} - - diff --git a/templates/admini/error_pages/404.html b/templates/admini/error_pages/404.html deleted file mode 100644 index f5e9c541..00000000 --- a/templates/admini/error_pages/404.html +++ /dev/null @@ -1 +0,0 @@ -OpenPanel

404

{{ _('That page does not exist') }}

diff --git a/templates/admini/error_pages/500.html b/templates/admini/error_pages/500.html deleted file mode 100644 index 6dee91f6..00000000 --- a/templates/admini/error_pages/500.html +++ /dev/null @@ -1 +0,0 @@ -{{ _('500 Error Page') }}

500

{{ _('Server') }}{{ _('Error') }}

{{ _('Click on the button bellow to reload. If the issue persists please contact support.') }}

{{ _('Refresh page') }}
diff --git a/templates/admini/files/backup.html b/templates/admini/files/backup.html deleted file mode 100644 index ae69480b..00000000 --- a/templates/admini/files/backup.html +++ /dev/null @@ -1,540 +0,0 @@ -{% extends 'base.html' %} -{% block content %} - - - - -
- - - -
-
-
-
{{ _('Backup Storage') }}
- -
-
-
- -
- -
-
- -
-
-
{{ _('Queue') }}
-
-
0
-
-
-
-
- -
- -
-
- -
-
-
{{ _('Total Backups') }}
-
-
{{ num_backups if num_backups else '0' }}
-
-
-
-
- - -
- -
-
- -
-
-
{{ _('Total Account usage (GB)') }}
-
-
14 GB
-
-
-
-
- -
-
-
-
- - - - - - - - - -
-
-
-
{{ _('Backups') }}
- -
-
-
- - - - - - - - - - - - - - -
CreatedEnd TimeDurationStatusContainsActions
-
-
-
- - - - - -
- - - - - - - - - - -
-
-
-
{{ _('Backup Logs') }}
- -
-
-
    - -
-
- -
-
- - -
-
-
-
{{ _('Restore History') }}
- -
-
-
    - -
-
- -
-
- - -
- - - - - - - - -{% endblock %} diff --git a/templates/admini/files/disk_usage.html b/templates/admini/files/disk_usage.html deleted file mode 100644 index 8aa013a3..00000000 --- a/templates/admini/files/disk_usage.html +++ /dev/null @@ -1,255 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - -
- -

{{_('Disk usage is the amount of space that is used by the content of your sites, this includes databases, files, videos, images, emails and pages.')}}

- -
-
-
-
{{_('Disk usage per directory')}}
- -
-
- - - - -
-
-
-
-
-
-
{{_('Browse Directories')}}
- -
-
- - - - - - - - - - {% if request.path != '/disk-usage/' %} - - - - - {% endif %} - {% for line in total_du_output.split('\n') %} - {% if line.strip() %} - - {% set parts = line.split() %} - {% set count = parts[0] %} - {% set directory = parts[1:]|join(' ') %} - - - - {% endif %} - {% endfor %} - -
DirectorySize
{{_('Up One Level')}}
{{ directory }} -{{ count }}
-
-
-
-
- - - - - - - - - - - -{% endblock %} diff --git a/templates/admini/files/edit_file.html b/templates/admini/files/edit_file.html deleted file mode 100644 index 53f4124d..00000000 --- a/templates/admini/files/edit_file.html +++ /dev/null @@ -1,179 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - -{% if file_content == '404_file_not_exsist_error' %} - -
- -
- {{_('The specified file does not exist.')}} -
-
/home/{{ current_username }}/{{ file_path }}
-
- -{% else %} - - - - - - - -
- - -
-
-
/home/{{ current_username }}/{{ file_path }}
-
- - -
-
- -
-
-
- - - -{% endif %} - -{% endblock %} diff --git a/templates/admini/files/filemanager.html b/templates/admini/files/filemanager.html deleted file mode 100644 index 52943b45..00000000 --- a/templates/admini/files/filemanager.html +++ /dev/null @@ -1,2385 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - - - - - -{% set directories = [] %} -{% set files = [] %} - -{% for info in files_info %} -{% if info['type'] == 'Directory' %} {% set _ = directories.append(info) %} -{% else %}{% set _ = files.append(info) %} -{% endif %} -{% endfor %} - - - - -{% if directories|length + files|length == 0 %} -
- - - {% with messages = get_flashed_messages(with_categories=true) %} - {% for category, message in messages %} - {% if category == 'error' %} -
- {{ message }} -
-
/home/{{ current_username }}/{{path_param}}
- {% endif %} - {% endfor %} - - {% if not messages %} -
{{ _('No items found.') }}
-
{{ _('Start creating new folders or uploading a new file!') }}
- {% endif %} - {% endwith %} -
- -{% else %} - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- - - - - - - - - - -{% for info in directories + files %} - - - - - - - - {% if info['type'] == 'Directory' %} - - - {% else %} - - - - - - - - - - - - - - - - - - - - - -{% endfor %} - -
{{ _('Name') }}{{ _('Size') }}{{ _('Last Modified') }}{{ _('Date') }}{{ _('Permissions') }}
{% if path_param %}
{{ info['file'] }}
- {% else %} -
{{ info['file'] }}
- {% endif %}
{{ info['file'] }}
- {% endif %} -
- {% if info['type'] == 'Directory' %} - {{ _('Calculate') }} - {% else %} - {{ info['size'] }} - {% endif %} - {{ info['date'] }}{{ info['permissions'] }} -
-{% endif %} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{% endblock %} diff --git a/templates/admini/files/fix_permissions.html b/templates/admini/files/fix_permissions.html deleted file mode 100644 index 2c7f33b6..00000000 --- a/templates/admini/files/fix_permissions.html +++ /dev/null @@ -1,101 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -

{{ _('Fix and reset permissions for files and folders.') }}

- -
-
-
-
- - - {% for directory in directories %} - - - - - - - -
-
- - - - -
- - - -{% endblock %} diff --git a/templates/admini/files/ftp.html b/templates/admini/files/ftp.html deleted file mode 100644 index e54b8c80..00000000 --- a/templates/admini/files/ftp.html +++ /dev/null @@ -1,530 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - - -

{{ _('Use your FTP account with an FTP client such as ') }}FileZilla {{ _('to transfer files to and from your website.') }}

- -
- - - - - - - - - - - - -
{{ _('Username (Login)') }}{{ _('Path') }}{{ _('Actions') }}
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
- - -{{ _('FTP server') }}:  {% if dedicated_ip != _("Unknown") %}{{ dedicated_ip }}{% else %}{{ server_ip }}{% endif %} -
-
-{{ _('FTP port') }}: 21 - -
- -
- - - - -
-
- - - - - - - -{% endblock %} diff --git a/templates/admini/files/inodes.html b/templates/admini/files/inodes.html deleted file mode 100644 index ebe17ee8..00000000 --- a/templates/admini/files/inodes.html +++ /dev/null @@ -1,228 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - -
- -

{{_('An inode is a data structure that keeps the information about a file on your hosting account. The number of inodes indicates the number of files and folders you have. This includes everything on your account, emails, files, folders, and anything you store on the server.')}}

- - -
-
-
-
{{_('Inodes usage per directory')}}
- -
-
- - - - -
-
-
-
-
-
-
{{_('Browse Directories')}}
- -
-
- - - - - - - - - - {% if request.path != '/inodes-explorer/' %} - - - - - {% endif %} - {% for line in total_inodes_output.split('\n') %} - {% if line.strip() %} - - {% set parts = line.split() %} - {% set count = parts[0] %} - {% set directory = parts[1:]|join(' ') %} - - - - {% endif %} - {% endfor %} - -
{{_('Directory')}}{{_('Inodes')}}
{{_('Up One Level')}}
{{ directory }} -{{ count }}
-
-
-
-
- - - - - - - - - - - - -{% endblock %} diff --git a/templates/admini/flarum.html b/templates/admini/flarum.html deleted file mode 100644 index cbbbc600..00000000 --- a/templates/admini/flarum.html +++ /dev/null @@ -1,708 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - -{% if domains %} - - - -{% with messages = get_flashed_messages() %} -{% if messages %} -{% for message in messages %} -{% if "Error" in message %} - -{% else %} - -{% endif %} -{% endfor %} -{% endif %} -{% endwith %} - - -
- -
-
- -
- - -
-
-

{{ _("Install Flarum") }}

-

{{ _("Install Flarum on an existing domain.") }}

-
-
-
- - -
-
-
- -
- - -
- -
-
- - -
-
- - -
- - - - - -
-
- - -
-
- -
- -
- - -
-
-
-
- - - - - - -
- -
- -
-
- - - - - - - -
- -
- - - - -
-
-
- -
-
-{% if data %} -{% if view_mode == 'table' %} - - - - - - - - - - - - {% for row in data %} - - - - -{% set domain_url = row[0] %} - - - - - - - - {% endfor %} - - -
{{ _("Domain") }}{{ _("Flarum Version") }}{{ _("Admin Email") }}{{ _("Created on") }}{{ _("Actions") }}
{{ row[0] }} Favicon - {{ row[0] }} {{ row[3] }}{{ row[2] }}{{ row[4] }} -{{ _("Manage") }} - - -
-{% endif %} -{% if view_mode == 'cards' %} - - - -
-
- {% for row in data %} - - -
-
- - -
-
-
image/svg+xml
-
-
{{ row[0] }}
{{ _("Flarum") }} {{ row[3] }} -
-
-
-
- -
- -
- -
- {% endfor %} - -
-
- - - - -{% endif %} - - - - - - - -
- - -{% else %} - - -
-

{{ _("No Flarum Installations") }}

-

{{ _("There are no existing Flarum installations. You can install a new instance below.") }}

- - -
-{% endif %} - - - - - - -{% else %} - -
-

{{ _("No Domains") }}

-

{{ _("Add a domain name first in order to install Flarum.") }}

- - {{ _("Add a Domain Name") }} - -
-{% endif %} - - - - - - - - -
- -
-
- -
- - - - - - -{% if view_mode == 'cards' %} - -{% endif %} -{% if view_mode == 'table' %} - -{% endif %} - - - -
-
- - - -{% endblock %} diff --git a/templates/admini/ip_blocker.html b/templates/admini/ip_blocker.html deleted file mode 100644 index 42afb799..00000000 --- a/templates/admini/ip_blocker.html +++ /dev/null @@ -1,153 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - -{% if domains %} - - - - -
- -
- -
- - - - - - - - - - - - - - -{% for domain in domains %} - - - - -{% endfor %} - - -
{{ _('Domain') }}{{ _('Blocked IPs') }}
{{ domain.domain_url }} -
- -
-
- -
- - -
-
-
-
- - - - -{% else %} - - -
-

{{ _('No Domains') }}

- - {{ _('Add a Domain Name') }} - -
- - -{% endif %} - - - - - - - -{% endblock %} diff --git a/templates/admini/malware_scanner.html b/templates/admini/malware_scanner.html deleted file mode 100644 index 7560036c..00000000 --- a/templates/admini/malware_scanner.html +++ /dev/null @@ -1,163 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - -

{{ _('The Clam AntiVirus Scanner (ClamAV) antivirus software searches your files for malicious programs. If the scanner identifies a potential security threat, it flags the file to allow you to take the appropriate action.') }}

- -
- - -
-
-
- - - {% for directory in directories %} - - - - - - - - - -
-
- - - - - - - - -
- - - - - - - - - - -{% endblock %} diff --git a/templates/admini/manager/.gitkeep b/templates/admini/manager/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/templates/admini/manager/flarum.html b/templates/admini/manager/flarum.html deleted file mode 100644 index 7c8f76c9..00000000 --- a/templates/admini/manager/flarum.html +++ /dev/null @@ -1,1017 +0,0 @@ - -{% extends 'base.html' %} - - -{% block content %} - - - - - - -{% if current_domain %} - - -
-
- -
- {% include 'partials/screenshot.html' %} -
- -
- - - - - -
-
-
-   -

- - - {{ _('Purge Cache') }} - - - - - - - - - - -

- - -
-
-
-
- {{ _('Type') }} -

- -

- - -
-
-
- - - -
-
-
- {{ _('Files') }} ({{ _('Calculating size...') }}) -

{{ domain_directory }}

-
-
-
- -
- {{ _('Domain:') }} -

- - {{ current_domain }} - -

- -
-
-
- - - -
- - -
-
- - - -

-

-
    -
  • {{ _('Database:') }}
  • -
  • {{ _('Table prefix:') }}
  • -
  • {{ _('Username:') }}
  • - -
  • {{ _('Password:') }} - -
  • -
-
- -

-
-
- - - - -
-
- {{ _('Created') }} - -

- {{ container.created_date }} -

- - -
-
-
- - - - -
-
-
- {{ _('Flarum version:') }} -

-
-
- - -
- {{ _('PHP version:') }} -

-
-
-
-
- {{ _('MySQL version:') }} -

-
-
-
-
-
-
- - - -
-
-{% if 'temporary_links' in enabled_modules %} - - - -{% endif %} - - - -{% if backup_files_available %} -{% endif %} - - - - - - -
- -
- -

{{ _("Preview website with a temporary domain,") }} {{ _("valid for 15 minutes only!") }} {{ _("Helpful if your domain hasn't been pointed to the server's IP address yet and lacks an SSL certificate.") }}

-

{{ _("Create a manual backup of the ") }} {{container.type}} {{ _("website's files and database for data protection.") }}

-

{{ _('Restore the website to a previous state using a previously created backup.') }}

-

{{ _('Remove the {{container.type}} website from this manager without actually deleting any files or database.') }}

-

{{ _('Completely remove the {{container.type}} website, including its files, database, and records from this manager.') }}

-
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{% endif %} - - - -{% endblock %} - - - diff --git a/templates/admini/manager/nodejs.html b/templates/admini/manager/nodejs.html deleted file mode 100644 index a35f694a..00000000 --- a/templates/admini/manager/nodejs.html +++ /dev/null @@ -1,865 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - - - - - - - -{% if current_domain %} - - - - -
-
- -
- {% include 'partials/screenshot.html' %} -
- -
- - - - - -
-
-
- Status - -

● {{ pm2_data[8] }}

- - -
-
-
-
- {{ _('Type') }} -

{{ container.type }}

-
-
- -
- - - - -
-
-
- {{ _('Files') }} ({{ _('Calculating size...') }}) -

{{ domain_directory }}

- -
-
-
- -
- {{ _('Domain:') }} -

- - {{ current_domain }} - -

- -
-
-
- - - -
- - -
-
- - - -

-

-
    -
  • {{ _('Uptime:') }} {{ pm2_data[6] }}
  • -
  • {{ _('Restarts:') }} {{ pm2_data[7] }}
  • -
  • {{ _('Watching:') }} {{ pm2_data[12] }}
  • -
-
-
-
- - -
-
- {{ _('Created') }} - -

- {{ container.created_date }} -

- - - - - - -
-
-
- - - - - - - -
-
-
- {{ _('NodeJS version:') }} -

-
-
-
- {{ _('CPU usage:') }} -

{{ pm2_data[9] }}

-
-
-
-
- {{ _('Memory usage:') }} -

{{ pm2_data[10] }}

-
-
-
- - - -
-
-
- - -
-
-{% if 'temporary_links' in enabled_modules %} - - - -{% endif %} - - - - -{% if pm2_data[8] == 'stopped' %} - - - - -{% else %} - - - - - - -{% endif %} - - - - - - - - - - - - - -
- - -
- -

 

-

{{ _("Preview website with a temporary domain,") }} {{ _("valid for 15 minutes only!") }} {{ _("Helpful if your domain hasn't been pointed to the server's IP address yet and lacks an SSL certificate.") }}

-

{{ _("View application error log file.") }}

-

{{ _("Start the application process and make app available again on the domain.") }}

-

{{ _('Stop the application process and make app temporary unavailable.') }}

-

{{ _('Restart the nodejs application (executes pm2 stop and pm2 start commands).') }}

-

{{ _('Completely remove the nodejs application, including the domain proxy, and records from this manager.') }}

-
-
- - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -{% endif %} - - - -{% endblock %} - diff --git a/templates/admini/manager/python.html b/templates/admini/manager/python.html deleted file mode 100644 index b621732c..00000000 --- a/templates/admini/manager/python.html +++ /dev/null @@ -1,863 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - - - - - - - -{% if current_domain %} - - - - -
-
- -
- {% include 'partials/screenshot.html' %} -
- -
- - - - - -
-
-
- Status - -

● {{ pm2_data[8] }}

- - -
-
-
-
- {{ _('Type') }} -

{{ container.type }}

-
-
- -
- - - - -
-
-
- {{ _('Files') }} ({{ _('Calculating size...') }}) -

{{ domain_directory }}

- -
-
-
- -
- {{ _('Domain:') }} -

- - {{ current_domain }} - -

- -
-
-
- - - -
- - -
-
- - - -

-

-
    -
  • {{ _('Uptime:') }} {{ pm2_data[6] }}
  • -
  • {{ _('Restarts:') }} {{ pm2_data[7] }}
  • -
  • {{ _('Watching:') }} {{ pm2_data[12] }}
  • -
-
-
-
- - -
-
- {{ _('Created') }} - -

- {{ container.created_date }} -

- - - - - - -
-
-
- - - - - - - -
-
-
- {{ _('Python version:') }} -

-
-
-
- {{ _('CPU usage:') }} -

{{ pm2_data[9] }}

-
-
-
-
- {{ _('Memory usage:') }} -

{{ pm2_data[10] }}

-
-
-
- - - -
-
-
- - -
-
-{% if 'temporary_links' in enabled_modules %} - - - -{% endif %} - - - - -{% if pm2_data[8] == 'stopped' %} - - - - -{% else %} - - - - - - -{% endif %} - - - - - - - - - - - - - -
- - -
- -

 

-

{{ _("Preview website with a temporary domain,") }} {{ _("valid for 15 minutes only!") }} {{ _("Helpful if your domain hasn't been pointed to the server's IP address yet and lacks an SSL certificate.") }}

-

{{ _("View application error log file.") }}

-

{{ _("Start the application process and make app available again on the domain.") }}

-

{{ _('Stop the application process and make app temporary unavailable.') }}

-

{{ _('Restart the python application (executes pm2 stop and pm2 start commands).') }}

-

{{ _('Completely remove the python application, including the domain proxy, and records from this manager.') }}

-
-
- - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -{% endif %} - - - -{% endblock %} - diff --git a/templates/admini/manager/wordpress.html b/templates/admini/manager/wordpress.html deleted file mode 100644 index 96822c69..00000000 --- a/templates/admini/manager/wordpress.html +++ /dev/null @@ -1,2229 +0,0 @@ - -{% extends 'base.html' %} - - -{% block content %} - - - - - - -{% if current_domain %} - - - -
-
-

{{ current_domain }}

-

- -
-
- - - - - - - -
-
- -
- - -
-
-
- - -
-
- - -
-
-
-
-
- - -
-
- - -
-
-
- -
- -
- -
-
-
-
- - -
-
- -
- -
- -
-
-
- -
- -
- -
-
- -
- -
- -
- -
- -
- -
{{ _('WordPress version:') }}
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- - -
- - -
- - -
-
- - {{ _('Recommended') }} - -
-
- - -
-
-
- -
- -
- - -
-
- - -
-
-
- -
- -
- - -
-
- - -
-
-
- -
- - - - - - - - - -
- -
- - - - -

{{ _('The options below allow you to manage the native WordPress debugging tools, enabling and disabling these tools in the wp-config.php file. It is not recommended to use these options on production websites since they are meant for development and test installations. Refer to') }} {{ _('Debugging in WordPress') }} {{ _('article for more information on these options.') }}

-
-
- - - -
- - - - -
-
- - -
-
-
- -
- -
-
- - -
-
-
- -
- -
-
- - -
-
-
- -
- -
-
- - -
-
-
- -
- -
-
- - -
-
-
- - - -
- - - - - - - - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
{{ _('Security Measures') }} -
{{ _('Status') }}
-
-
- -
-
- {{ _('Restrict access to files and directories') }} - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Configure security keys') }} - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to') }} xmlrpc.php - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block directory browsing') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Forbid execution of PHP scripts in the wp-includes directory') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Forbid execution of PHP scripts in the wp-content/uploads directory') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to wp-config.php') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Disable scripts concatenation for WordPress admin panel') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Turn off pingbacks') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Disable PHP execution in cache directories') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Disable file editing in WordPress Dashboard') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Change default database table prefix') }} - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Enable bot protection') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to sensitive files') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to potentially sensitive files') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to .htaccess and .htpasswd') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block author scans') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _("Change default administrator's username") }} - - - - - {{ _('STATUS') }} - - - -
- -
-
-
-
- - - -
-
- - - -
- {% include 'partials/screenshot.html' %} -
- -
- - - - - -
-
-
-   - - - - -

- - - {{ _('Login as Admin') }} - - - - - - - -

- - -
-
-
-
- {{ _('Type') }} -

- {{ container.type }} -

- - -
-
-
- - - -
-
-
- {{ _('Files') }} ({{ _('Calculating size...') }}) -

{{ domain_directory }}

-
-
-
- -
- {{ _('Domain:') }} -

- - {{ current_domain }} - -

- -
-
-
- - - -
- - -
-
- - - -

-

-
    -
  • {{ _('Database:') }}
  • -
  • {{ _('Table prefix:') }}
  • -
  • {{ _('Username:') }}
  • - -
  • {{ _('Password:') }} - -
  • -
-
- -

-
-
- - - - -
-
- {{ _('Created') }} - -

- {{ container.created_date }} -

- - - - - -
-
-
- - - - -
-
-
- {{ _('WP version:') }} -

-
-
- - -
- {{ _('PHP version:') }} -

-
-
-
-
- {{ _('MySQL version:') }} -

-
-
-
-
-
-
- - - - - -
-
-{% if 'temporary_links' in enabled_modules %} - - - -{% endif %} - - - -{% if backup_files_available %} -{% endif %} - - - - - -
- -
- -

{{ _("Preview website with a temporary domain,") }} {{ _("valid for 15 minutes only!") }} {{ _("Helpful if your domain hasn't been pointed to the server's IP address yet and lacks an SSL certificate.") }}

-

{{ _("Create a manual backup of the ") }} {{container.type}} {{ _("website's files and database for data protection.") }}

-

{{ _('Restore the website to a previous state using a previously created backup.') }}

-

{{ _('Remove the {{container.type}} website from this manager without actually deleting any files or database.') }}

-

{{ _('Completely remove the {{container.type}} website, including its files, database, and records from this manager.') }}

-
-
- - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{% endif %} - - - -{% endblock %} - - - diff --git a/templates/admini/mautic.html b/templates/admini/mautic.html deleted file mode 100644 index 11988285..00000000 --- a/templates/admini/mautic.html +++ /dev/null @@ -1,710 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - -{% if domains %} - - - -{% with messages = get_flashed_messages() %} -{% if messages %} -{% for message in messages %} -{% if "Error" in message %} - -{% else %} - -{% endif %} -{% endfor %} -{% endif %} -{% endwith %} - - -
- -
-
- -
- - -
-
-

{{ _("Install Mautic") }}

-

{{ _("Install Mautic on an existing domain.") }}

-
-
-
- - -
-
-
- -
- - -
- - -
-
- - -
- - - - - -
-
- - -
-
- -
- -
- - -
-
-
-
- - - - - - -
- -
- -
-
- - - - - - - -
- -
- - - - -
-
-
- -
-
-{% if data %} -{% if view_mode == 'table' %} - - - - - - - - - - - - {% for row in data %} - - - - -{% set domain_url = row[0] %} - - - - - - - - {% endfor %} - - -
{{ _("Domain") }}{{ _("Mautic Version") }}{{ _("Admin Email") }}{{ _("Created on") }}{{ _("Actions") }}
{{ row[0] }} Favicon - {{ row[0] }} {{ row[3] }}{{ row[2] }}{{ row[4] }} -{{ _("Manage") }} - - -
-{% endif %} -{% if view_mode == 'cards' %} - - - -
-
- {% for row in data %} - - -
-
- - -
-
-
-
-
{{ row[0] }}
{{ _("Mautic") }} {{ row[3] }} -
-
-
-
- -
- -
- -
- {% endfor %} - -
-
- - - - -{% endif %} - - - - - - - -
- - -{% else %} - - -
-

{{ _("No Mautic Installations") }}

-

{{ _("There are no existing Mautic installations. You can install a new instance below.") }}

- - -
-{% endif %} - - - - - - -{% else %} - -
-

{{ _("No Domains") }}

-

{{ _("Add a domain name first in order to install Mautic.") }}

- - {{ _("Add a Domain Name") }} - -
-{% endif %} - - - - - - - - -
- -
-
- -
- - - - - - -{% if view_mode == 'cards' %} - -{% endif %} -{% if view_mode == 'table' %} - -{% endif %} - - - -
-
- - - -{% endblock %} diff --git a/templates/admini/memcached.html b/templates/admini/memcached.html deleted file mode 100644 index 5a171f27..00000000 --- a/templates/admini/memcached.html +++ /dev/null @@ -1,320 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - -
- -{% if memcached_status_display == 'NOT INSTALLED' %} -
-

{{_('Memcached is not currently installed.')}}

-

{{_('To install Memcached click on the button bellow.')}}

-
- - -
-
- - -{% elif memcached_status_display == 'ON' %} - - - - - - -
-
-
-
{{ _('Connection Info') }}
-
- - -
-
-
-

{{ _('Active') }}

- - -
-
-
-
-
-

127.0.0.1

- - {{ _('*or localhost') }} -
-
-
-
-
- - -

11211

{{ _('*Access to the service is NOT available from other servers.') }} -
-
-
- -
-
-
-
-
-
{{ _('Memcached Memory Allocation') }}
- -
-
- -

{{ _('You can allocate RAM to Memcached service.') }}

-
-
-
-
-

{{ _('Current Memory limit for Memcached service') }}

-

- {% if maxmemory_value == 0 %} - - {% else %} - {{ maxmemory_value | int }} MB - {% endif %} -

- - -
-
- - {{ maxmemory_value | int }} MB
- -
-
- -
-
-
- - -
- -
-
- - - -
- -{% endif %} - - - - {% if memcached_status_display == 'ON' %} - {% elif memcached_status_display == 'NOT INSTALLED' %} - {% elif memcached_status_display == 'OFF' %} -
-

{{ _('Memcached is currently disabled.') }}

-

{{ _('To enable Memcached SERVER click on the button bellow.') }}

-
- - -
-
- {% else %} -
-

{{ _('Memcached service status is unknown.') }}

-

{{ _('Unable to determinate current Memcached service status, try Start&Stop actions.') }}
{{ _('If the issue persists please contact support.') }}

-
- - -
-
- - -
-
- {% endif %} -
- - - - - - - - - - - - - - -
- -
- {% if memcached_status_display == 'ON' %} Enabled{% elif memcached_status_display == 'OFF' %} Disabled{% elif memcached_status_display == 'NOT INSTALLED' %} Not Installed{% else %} Unknown{% endif %} -
- -
-{% if memcached_status_display == 'ON' %} -
- - -
-{% elif memcached_status_display == 'OFF' %} -
- - -
-{% elif memcached_status_display == 'NOT INSTALLED' %} -
- - -
- -{% else %} -
- - -
-
- - -
-{% endif %} -
-
- - -{% endblock %} - diff --git a/templates/admini/partials/_shortcuts.html b/templates/admini/partials/_shortcuts.html deleted file mode 100644 index ff7b6881..00000000 --- a/templates/admini/partials/_shortcuts.html +++ /dev/null @@ -1,259 +0,0 @@ - - diff --git a/templates/admini/partials/notifications.html b/templates/admini/partials/notifications.html deleted file mode 100644 index fe7af7e6..00000000 --- a/templates/admini/partials/notifications.html +++ /dev/null @@ -1,42 +0,0 @@ - -{% with messages = get_flashed_messages() %} -{% if messages %} -
-
- {% for message in messages %} - {% if 'success' in message.lower() %} - {% set toast_class = 'bg-success text-white' %} - {% set toast_icon = 'success' %} - {% set title = 'success' %} - {% elif 'error' in message.lower() %} - {% set toast_class = 'bg-danger text-white' %} - {% set toast_icon = 'error' %} - {% set title = 'Error' %} - {% elif 'warning' in message.lower() %} - {% set toast_class = 'bg-warning text-white' %} - {% set toast_icon = 'warning' %} - {% set title = 'Warning' %} - {% else %} - {% set toast_class = 'bg-primary text-white' %} - {% set toast_icon = 'info' %} - {% set title = 'Notification' %} - {% endif %} - - - {% endfor %} -
-
-{% endif %} -{% endwith %} - diff --git a/templates/admini/partials/pagespeed.html b/templates/admini/partials/pagespeed.html deleted file mode 100644 index 0cd10a53..00000000 --- a/templates/admini/partials/pagespeed.html +++ /dev/null @@ -1,200 +0,0 @@ -
-
- -
- - Loading data... -
-
- - -
- - - - -
-
- - -
-
Desktop
- - - - -
-
- - -
-
Mobile
- - - - -
-
-
-
- -
-
- First Contentful Paint -
-   /   -
-
-
- Speed Index -
-  /  -
-
-
- Time to Interactive -
-  /  -
-
-
- Measured at Loading... -
-
- View complete results on Google PageSpeed Insights. -
-
- - - -
-
-
diff --git a/templates/admini/partials/phpmyadmin_link.html b/templates/admini/partials/phpmyadmin_link.html deleted file mode 100644 index b743e955..00000000 --- a/templates/admini/partials/phpmyadmin_link.html +++ /dev/null @@ -1,89 +0,0 @@ -{% if 'phpmyadmin' in enabled_modules %} - - - -{% endif %} diff --git a/templates/admini/partials/screenshot.html b/templates/admini/partials/screenshot.html deleted file mode 100644 index ef1b3a62..00000000 --- a/templates/admini/partials/screenshot.html +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/templates/admini/partials/sidebar.html b/templates/admini/partials/sidebar.html deleted file mode 100644 index c97bcc1c..00000000 --- a/templates/admini/partials/sidebar.html +++ /dev/null @@ -1,936 +0,0 @@ - - - - - diff --git a/templates/admini/php/ini_editor.html b/templates/admini/php/ini_editor.html deleted file mode 100644 index 71909858..00000000 --- a/templates/admini/php/ini_editor.html +++ /dev/null @@ -1,71 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - {% if version %} -
-
- -
- - - - -
- -
-
- -
- -
-
-
- - - - - - - - {% else %} - -

{{ _('PHP.INI Editor allows you to modify PHP settings stored in the php.ini configuration file, such as memory limits, error reporting, and extension settings.') }}

- -
-
- - -
-
- - - - {% endif %} - - -{% endblock %} - diff --git a/templates/admini/php/settings.html b/templates/admini/php/settings.html deleted file mode 100644 index e6f5cc1a..00000000 --- a/templates/admini/php/settings.html +++ /dev/null @@ -1,516 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - -
-
- - - -
- - -
- -

{{ _('Changing the PHP version will stop all the processes on your site. It takes 1-2 seconds to complete. Be sure to check your script and plugin requirements to know which PHP version works best for your website.') }}

- - - - - - - - - - - {% for domain in domains %} - - - - - - - - - - {% endfor %} - -
{{ _('Domain') }}{{ _('Current') }} {{ _('PHP Version') }}{{ _('Change') }} PHP version for domain') }}
{{ domain.domain_url }} - = 8 %} - green; - {% elif php_version_integer >= 7 %} - orange; - {% else %} - red; - {% endif %} - {% endif %} - "> - {{ php_version_numeric | string }} - - -
- - -
-
-
- -
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
{{ _('Default PHP version:') }}
-
-
-
-

{{ _('The PHP version that is used by default for newly added domains is the one that you choose here.') }}

- -

{{ _('Current default PHP version:') }} {{ php_default_version|replace('php', '') }}

- -
-
- -
-
-
- -
-
- -
-
-
- - - -
- -
- - -
-
- -
-
- -
-
-
-
{{ _('Install a new version') }}
-
-
-
-

{{ _('For best performance we recommend to only install PHP versions that you will be activelly using.') }}

- -

{{ _("Currently installed PHP versions") }}: -{% for version in available_php_versions %} - {{ version|replace('php', '') }}{% if not loop.last %}, {% endif %} -{% endfor %} -

- - - - -
-
-
-
-
- -
- -
-
- - - - - - - - - - - - - -
-
-
- -
-
-
-
- - - - - - - - - - - -
-
- -
-
-
-
- - - - -
-
-
- - - -{% endblock %} diff --git a/templates/admini/pm2.html b/templates/admini/pm2.html deleted file mode 100644 index 38b0b7c6..00000000 --- a/templates/admini/pm2.html +++ /dev/null @@ -1,535 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - -{% if domains %} - - - - - - - - - - -
-
- -
- - -
-
-

{{ _('Create a new Application') }}

-

{{ _("Run a NodeJS or Python application.") }}

-
- -
- -
- -
- -
-
-
-
- -
- -
-
- /home/{{ current_username }}/ -
- -
-
 
-
-
- -
- -
- -
-
- - -
-
- - -
- - -
- - -
 
-
- -
- - -
-
- -
- - -
-
-
- -
- - -
-
-
- - - -
- -
-
- - - - - -
-
-
-
-{% if pm2_data %} -
- - - - - - - - - - - - - - - - - - - - - - - - {% if pm2_data %} - {% for row in pm2_data %} - - - - - - - - - - - - - - - - {% for site in all_sites %} - {% if row[1] == site.site_name %} - - - - - - {% endif %} - {% endfor %} - - - {% endfor %} - {% else %} - - - - {% endif %} - -
{{ _('Application') }}{{ _('Uptime') }}{{ _('Restarts') }}{{ _('Status') }}{{ _('CPU') }}{{ _('Memory') }}{{ _('Watching') }}Actions{{ _('Type') }}Port {{ _('Startup file') }}
{{ row[1] }}{{ row[6] }}{{ row[7] }} - {{ row[8] }} -{{ row[9] }}{{ row[10] }}{{ row[12] }} - {% if row[8] == 'stopped' %} -
- -
- {% else %} -
- -
- {% endif %} - -
- -
- -
- -
- - - -
- {% if site.type == "NodeJS" %} - - {% elif site.type == "Python" %} - - {% else %} - {{ site.type }} - {% endif %} -{{ site.ports }}{{ site.path }}
{{ _('No PM2 data available.') }}
-
- - -{% else %} - -
-

{{ _('No existing Applications') }}

-

{{ _('There are no existing applications. You can start a new NodeJS or Python app below.') }}

- -
-{% endif %} - - - - - - - - - - -
- -
-
- -
- - -
-
- - - - - - - - - - - -{% else %} - -
-

{{ _("No Domains") }}

-

{{ _("Add a domain name first in order to install Python adn NodeJS applications.") }}

- - {{ _("Add a Domain Name") }} - -
-{% endif %} - - - - -{% endblock %} diff --git a/templates/admini/process_manager.html b/templates/admini/process_manager.html deleted file mode 100644 index 5eda0ef6..00000000 --- a/templates/admini/process_manager.html +++ /dev/null @@ -1,114 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -
- {% if error_message %} - - {% else %} - - - - - - - - - - - - {% for process in process_data %} - {% if '/etc/entrypoint.sh' not in process['CMD'] and 'ps -eo pid,%cpu,time,cmd' not in process['CMD'] and '/dev/null' not in process['CMD'] %} - {# Display the current process #} - - - - - - - - {% endif %} - {% endfor %} - -
PID{{ _('TIME') }}CPUCMD{{ _('ACTION') }}
{{ process['PID'] }}{{ process['TIME'] }}{{ process['%CPU'] }} - {% if process['CMD']|length > 255 %} - - - {{ process['CMD'][:255] }}... - {{ _('View full command') }} - - - {% else %} - - {{ process['CMD'] }} - {% endif %} -
- {% endif %} -
- - - - - - - - - - -{% endblock %} diff --git a/templates/admini/redis.html b/templates/admini/redis.html deleted file mode 100644 index bebbdac0..00000000 --- a/templates/admini/redis.html +++ /dev/null @@ -1,321 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - -
- - -{% if redis_status_display == 'NOT INSTALLED' %} -
-

{{_('REDIS is not currently installed.')}}

-

{{_('To install REDIS click on the button bellow.')}}

-
- - -
-
- - -{% elif redis_status_display == 'ON' %} - - -{% set maxmemory_value_int = maxmemory_value | int %} -{% set maxmemory_value_in_MB = maxmemory_value_int / (1000 * 1000) %} - - - -
-
-
-
{{ _('Connection Info') }}
-
- - -
-
-
-

{{ _('Active') }}

- - -
-
-
-
-
-

127.0.0.1

- - {{ _('*or localhost') }} -
-
-
-
-
- - -

6379

{{ _('*Access to the service is NOT available from other servers.') }} -
-
-
- -
-
-
-
-
-
{{ _('REDIS Memory Allocation') }}
- -
-
- -

{{ _('You can allocate RAM to REDIS service.') }}

-
-
-
-
-

{{ _('Current Memory limit for REDIS service') }}

-

- {% if maxmemory_value_int == 0 %} - - {% else %} - {{ maxmemory_value_in_MB | int }} MB - {% endif %} -

- - -
-
- - {{ maxmemory_value_in_MB | int }} MB
- -
-
- -
-
-
- - -
- -
-
- - - -
- -{% endif %} - - - - {% if redis_status_display == 'ON' %} - {% elif redis_status_display == 'NOT INSTALLED' %} - {% elif redis_status_display == 'OFF' %} -
-

{{ _('REDIS is currently disabled.') }}

-

{{ _('To enable REDIS SERVER click on the button bellow.') }}

-
- - -
-
- - {% else %} -
-

{{ _('REDIS service status is unknown.') }}

-

{{ _('Unable to determinate current REDIS service status, try Start&Stop actions.') }}
{{ _('If the issue persists please contact support.') }}

-
- - -
-
- - -
-
- {% endif %} -
- - - - - - - - - - - - - - -
- -
- {% if redis_status_display == 'ON' %} Enabled{% elif redis_status_display == 'OFF' %} Disabled{% elif redis_status_display == 'NOT INSTALLED' %} Not Installed{% else %} Unknown{% endif %} -
- -
-{% if redis_status_display == 'ON' %} -
- - -
-{% elif redis_status_display == 'OFF' %} -
- - -
-{% elif redis_status_display == 'NOT INSTALLED' %} -
- - -
-{% else %} -
- - -
-
- - -
-{% endif %} -
-
- - -{% endblock %} - diff --git a/templates/admini/sites.html b/templates/admini/sites.html deleted file mode 100644 index 0c2c5055..00000000 --- a/templates/admini/sites.html +++ /dev/null @@ -1,68 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - - - - - - {% for site in data %} - - - - - - - - - {% endfor %} - -
{{ _('Site Name') }}{{ _('Admin Email') }}{{ _('Created on') }}{{ _('Type') }}{{ _('Version') }}{{ _('Actions') }}
{{ site[0] }} Favicon{{ site[0] }}{{ site[2] }}{{ site[4] }}{{ site[5] }}{{ site[3] }} - {% if 'Static' in site[5] %} - Manage - {% elif 'WordPress' in site[5] or 'Node' in site[5] or 'Mautic' in site[5] %} - Manage - {% else %} - Manage - {% endif %} -
- - - - - - - - -
- -
-
- -
- - - -
-
- - - - - - -{% endblock %} diff --git a/templates/admini/ssh.html b/templates/admini/ssh.html deleted file mode 100644 index bc84a9ff..00000000 --- a/templates/admini/ssh.html +++ /dev/null @@ -1,214 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - - -
- {% if ssh_status_display == 'ON' %} - {% elif ssh_status_display == 'OFF' %} -

{{ _('SSH access is currently disabled.') }}

- {% else %} - - {% endif %} - - - - -
- - - - -{% if ssh_status_display == 'ON' %} -
-
-
-
-
{{ _('SSH Connection Information') }}
-
-
- -
-
- -

{{ server_ip }}

-
-
- -

{% if host_port_mapping %} {{ host_port_mapping }} {% else %} {{ _("CONTAINER NOT RUNNING") }} {% endif %}

-
-
- -

{{ current_username }}

-
-
- -

**********

-
-
-
- -
-
-
- - - - - - - - - - - - - - - -{% endif %} - -
- -
- {% if ssh_status_display == 'ON' %} {{ _('Enabled') }}{% elif ssh_status_display == 'OFF' %} {{ _('Disabled') }}{% else %} {{ _('Unknown') }}{% endif %} -
- -
-{% if ssh_status_display == 'ON' %} -
- - -
-{% elif ssh_status_display == 'OFF' %} -
- - -
-{% else %} -
- - -
-
- - -
-{% endif %} -
-
-{% endblock %} - diff --git a/templates/admini/ssl.html b/templates/admini/ssl.html deleted file mode 100644 index b431e642..00000000 --- a/templates/admini/ssl.html +++ /dev/null @@ -1,384 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - -{% if domains %} - - - - - - -
- -
- -
- - - - - - - - - - - - - - - - - - - {% for domain in domains %} - - - - - - - {% endfor %} - -
{{ _('Domain') }}{{ _('SSL Status') }}{{ _('Actions') }}
{{ domain.domain_url }} - {% if domain.ssl_expiry_date %} - {% if domain.ssl_expiry_date == 'None' %} -
{{ _('No SSL installed') }}
- {% else %} -
{{ _('AutoSSL Domain Validated') }}
- {{ _('Expires on') }}: {{ domain.ssl_expiry_date }}
| - {% endif %} - {% else %} -
{{ _('SSL check is in progress.. please click here to refresh.') }}
- - - - - - - {% endif %} -
-
- -{% if domain.ssl_expiry_date != 'None' %} - - - - - - -
- - - -
- {% else %} - - -
- - - -
- - - - {% endif %} - - -
-
-
- - - - - - - - - - - -
- -
-
- -
- -
- -
- - - - -{% else %} - - -
-

{{ _('No Domains') }}

-

{{ _("When you create a domain, the system will attempt to secure that domain with a free Let\'s Encrypt certificate.") }}

- - {{ _('Add a Domain Name') }} - -
- - -{% endif %} - - - - - - - - -{% endblock %} diff --git a/templates/admini/system/general.html b/templates/admini/system/general.html deleted file mode 100644 index 8d4097f7..00000000 --- a/templates/admini/system/general.html +++ /dev/null @@ -1,139 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - -
- -
-
-
-
- -
-
-

{{ _('Server Time') }}

-

{{ _('Set your server’s time zone and synchronize its time with your network’s time server.') }}

- - {{ _('Change TimeZone') }} - -
-
-
-
- - -
-
-
-
- -
-
-

{{ _('Service Status') }}

-

{{ _('Display a list of OpenPanel’s monitored services, their current version and statuses.') }}

- - {{ _('Monitor Services') }} - -
-
-
-
- - -
-
-
-
- -
-
-

{{service_name}} {{ _('Settings') }}

-

{{ _('Configure') }} {{service_name}} {{ _('web server software that handles HTTP requests') }}.

- - {{service_name}} {{ _('Configuration') }} - -
-
-
-
- - -
-
-
-
- -
-
-

{{ _('MySQL Settings') }}

-

{{ _('Make changes to your MySQL® or MariaDB® configuration.') }}

- - {{ _('MySQL Configuration') }} - -
-
-
-
- - -
-
-
-
- -
-
-

{{ _('PHP Settings') }}

-

{{ _('Make changes to your PHP configuration.') }}

- - {{ _('PHP Configuration') }} - -
-
-
-
- - -
-
-
-
- -
-
-

{{ _('ModSecurity® Settings') }}

-

{{ _('Enable or disable ModSecurity for your domains.') }}

- - {{ _(' ModSecurity Settings') }} - -
-
-
-
- - -
-
-
-
- -
-
-

{{ _('Server Information') }}

-

{{ _('Displays information about your account and the server.') }}

- - {{ _('Server Information') }} - -
-
-
-
- - -
- - - -{% endblock %} diff --git a/templates/admini/system/modsecurity.html b/templates/admini/system/modsecurity.html deleted file mode 100644 index 46718ffc..00000000 --- a/templates/admini/system/modsecurity.html +++ /dev/null @@ -1,208 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - -{% if domains %} - - - - -
- -
- -
- - - - - - - - - - - - - - -{% for domain in domains %} - - - - -{% endfor %} - - -
{{ _('Domain') }}{{ _('Status') }}
{{ domain.domain_url }} -
- -
-
- -
- -
-
-
-
- - - - - - -
- -
-
- -
- -
- - -
- - - -{% else %} - - -
-

{{ _('No Domains') }}

- - {{ _('Add a Domain Name') }} - -
- - -{% endif %} - - - - - - - -{% endblock %} diff --git a/templates/admini/system/server_info.html b/templates/admini/system/server_info.html deleted file mode 100644 index 464ebe17..00000000 --- a/templates/admini/system/server_info.html +++ /dev/null @@ -1,129 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -
- -
-
-
-
{{ _('Server Information') }}
-
-
-
-
-
{{ _('Hostname') }} -
{{ _('Loading...') }}
-
-
-
-
- -
-
-
{{ _('Average Load') }} -
{{ _('Loading...') }}
-
-
-
-
-
-
-
{{ _('Uptime') }} -
{{ _('Loading...') }}
-
-
-
-
- - -
-
-
- {{ _('IP Address') }} -
{{ _('Loading...') }}
-
-
-
-
- -
-
-
- {{ _('Panel Version') }} - {{ panel_version }} -
-
-
-
- - -
-
-
- {{ _('OS') }} -
{{ _('Loading...') }}
-
-
-
-
- -
-
-
- {{ _('Release') }} -
{{ _('Loading...') }}
-
-
-
-
-
-
-
- {{ _('Version') }} -
{{ _('Loading...') }}
-
-
-
-
-
-
-
- {{ _('Processor') }} -
{{ _('Loading...') }}
-
-
- - - -
-
-
-
- - - - -{% endblock %} diff --git a/templates/admini/system/services_status.html b/templates/admini/system/services_status.html deleted file mode 100644 index e84d8449..00000000 --- a/templates/admini/system/services_status.html +++ /dev/null @@ -1,311 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{% if 'phpmyadmin' in enabled_modules %} - -{% else %} - -{% endif %} - - - - - -{% if 'pm2' in enabled_modules %} - -{% else %} - -{% endif %} - - - - - -{% if 'pm2' in enabled_modules %} - -{% else %} - -{% endif %} - - - - - -{% if 'redis' in enabled_modules %} - -{% else %} - -{% endif %} - - - - - - -{% if 'memcached' in enabled_modules %} - -{% else %} - -{% endif %} - - - - - - -{% if 'elasticsearch' in enabled_modules %} - -{% else %} - -{% endif %} - - - - - - -
{{ _('Service') }}{{ _('Version') }}{{ _('Status') }}
{{ web_server|capitalize }}  - -
{{ _('PHP') }} -
{% if mysql_type == 'mysql' %} - {{ _('MySQL') }} - {% elif mysql_type == 'mariadb' %} - {{ _('MariaDB') }} - {% endif %}  - - -
{{ _('phpMyAdmin') }}
{{ _('NodeJS') }} -
{{ _('Python') }} -
{{ _('REDIS') }} -
{{ _('Memcached') }} -
{{ _('Elasticsearch') }} -
- - - -{% endblock %} diff --git a/templates/admini/system/timezone.html b/templates/admini/system/timezone.html deleted file mode 100644 index 620663a9..00000000 --- a/templates/admini/system/timezone.html +++ /dev/null @@ -1,78 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - -Current timezone: {{ current_timezone_in_docker_container }} - -
-
- - -
- -
- - - -{% endblock %} diff --git a/templates/admini/terminal/landing.html b/templates/admini/terminal/landing.html deleted file mode 100644 index 10aa88eb..00000000 --- a/templates/admini/terminal/landing.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends 'base.html' %} -{% block content %} - -

{{ _('This interface provides command line access to your account on the server.') }}

-

{{ _('You can open a web terminal for yourself or create a temporary account with a one-time login to share with a third party.') }}

- -
-
- {{ _('Access Web Terminal') }} or - -
-
- -{% endblock %} - diff --git a/templates/admini/terminal/running.html b/templates/admini/terminal/running.html deleted file mode 100644 index 292e259f..00000000 --- a/templates/admini/terminal/running.html +++ /dev/null @@ -1,55 +0,0 @@ -{% extends 'base.html' %} -{% block content %} - - -{% if random_username %} - -

{{ _('External Terminal Session created') }}

- -

{{ _('Temporary session has been created for the web terminal. Login information:') }}

- -
-
- -
-
-
-
- username: - -
-
-
-
- username: - -
-
-
-
-
- -
- -
- -
-
- -
- - -{% elif 'exists' in ttyd_url %} - -

{{ _('Terminal Session is Already Running') }}

-

Currently only one active web terminal session is supported. You need to either wait for the existing user to exit their web terminal session or terminate their session by killing the ttyd process from the Process Manager.

- -{% else %} - -

{{ _('This interface provides command line access to your account on the server.') }}

- - -{% endif %} - -{% endblock %} - diff --git a/templates/admini/user/account.html b/templates/admini/user/account.html deleted file mode 100644 index aeefed2d..00000000 --- a/templates/admini/user/account.html +++ /dev/null @@ -1,279 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - -
- - - -
-
- -
-
{{ _('Profile Picture') }}
-
- - {% if avatar_type == 'gravatar' %} - - -
{{ email }}
- {{ _('Change image on Gravatar') }} - {% elif avatar_type == 'letter' %} - {{ current_username[0] }} - {% else %} - -
{{ email }}
- {% endif %} -
-
-
-
- -
-
{{ _('Account Details') }}
-
-
- -
- - -
-
- - -
-
- -
- -
- - -
-
-
-
- - -
-
- -
-
-
-
-
- -
-
{{ _('Language') }}
-
- - - - - -
-
-
-
{{ _('Theme') }}
-
- -
-
- -
-
-
- - - - - - -{% endblock %} diff --git a/templates/admini/user/activity.html b/templates/admini/user/activity.html deleted file mode 100644 index 199e98a2..00000000 --- a/templates/admini/user/activity.html +++ /dev/null @@ -1,372 +0,0 @@ - -{% extends 'base.html' %} -{% block content %} - - - -
- - - -

{{ _('Activity Log records all important actions performed by user on the panel, such as editing or modifying files, deleting websites, enabling SSH access, etc.') }}

- - - - - -
-
- {% if search_term %} - Showing {{ log_content|length }} of {{ total_lines }} items - {% else %} - Showing {{ items_per_page * (current_page - 1) + 1 }} - {% if items_per_page * current_page > total_lines %}{{ total_lines }}{% else %}{{ items_per_page * current_page }}{% endif %} out of {{ total_lines }} items - {% endif %} -
- {% if search_term %} - {% else %} -
- - - - -
- {% endif %} -
- - - - - - -
    - - {% for log_entry in log_content %} - {% set parts = log_entry.split(' ') %} - {% if parts|length >= 6 %} - {% set timestamp = parts[0] ~ ' ' ~ parts[1] ~ ' ' ~ parts[2] %} - {% set ip = parts[3] %} - {% set admin = parts[4] %} - {% if "Administrator" in admin %} - {% set action_parts = parts[5:] %} - {% set action = action_parts|join(' ') %} - {% else %} - {% set user = parts[5] %} - {% set action_parts = parts[6:] %} - {% set action = action_parts|join(' ') %} - {% endif %} - {% set action_classes = "activity-item" %} - {% if "accessed" in action %} - {% set action_classes = action_classes ~ " search" %} - {% elif "deleted" in action or "edited MySQL configuration" in action %} - {% set action_classes = action_classes ~ " comment" %} - {% elif "File Manager" in action %} - {% set action_classes = action_classes ~ " folder" %} - {% elif "enabled" in action %} - {% set action_classes = action_classes ~ " like" %} - {% elif "disabled" in action %} - {% set action_classes = action_classes ~ " disabled" %} - {% elif "logged in" in action %} - {% set action_classes = action_classes ~ " logged" %} - {% elif "logged out" in action %} - {% set action_classes = action_classes ~ " loggedout" %} - {% elif "wordpress" in action %} - {% set action_classes = action_classes ~ " wordpress" %} - {% else %} - {% set action_classes = action_classes ~ " post" %} - {% endif %} - - {% set show_div = "/home/" ~ user in action or "created a" in action or "changed" in action or "edited MySQL configuration" in action %} -
  • {{ timestamp }}
  • -
  • - {% if "Administrator" in admin %} -

    -

    -
    {% if "Administrator" in admin %}{{admin}}{% else%}{{ user }}{% endif %} {{ action }}
    -
    -

    - - {% else %} - {% if show_div %} -

    - {% if gravatar_image_url is not none %} - - {% endif %} - {{ user }} - {{ ip }} -

    -
    -
    {% if "Administrator" in admin %}{{admin}}{% else%}{{ user }}{% endif %} {{ action }}
    -
    - {% else %} -

    - {% if gravatar_image_url is not none %} - - {% endif %} - - - {% if "Administrator" in admin %}{{admin}}{% else%}{{ user }}{% endif %} {{ action }} - - - {{ ip }} -

    - {% endif %} - {% endif %} -
  • - {% endif %} - {% endfor %} - - -
- - - - - - - - - - - - - - - - - - - - -
-{% endblock %} - diff --git a/templates/admini/user/forgot_password.html_TODO b/templates/admini/user/forgot_password.html_TODO deleted file mode 100644 index 9f5e4c20..00000000 --- a/templates/admini/user/forgot_password.html_TODO +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - {% if brand_name %}{{brand_name}}{% else %}{{brand}}{% endif %} - - - - - -
-
- - - -{% if email_sent %} - -

Email Sent

-

A password reset email has been sent to your inbox, and it will remain valid for the next 30 minutes. Kindly review your email to proceed with the password reset.

-
- - - -
- - -{% elif not email_sent %} - {% if not twofa_enabled %} -

Reset Password

-

Please provide the email address associated with your username, and a link to reset your password will be emailed to you.

- {% elif twofa_enabled %} -

Verification code (2FA)

-

TwoFactor Authentification is enabled, please enter the 2FA code from your device.

- {% endif %} - -
-
- {% if not twofa_enabled %} - -
- - -
- {% endif %} - - {% if twofa_enabled %} - - -
- - -
- {% endif %} - - - {% if error_message %} -
- {{ error_message }} -
- {% endif %} - - - - -
-
- -{% endif %} - - - - - - diff --git a/templates/admini/user/history_usage.html b/templates/admini/user/history_usage.html deleted file mode 100644 index 1b7a5584..00000000 --- a/templates/admini/user/history_usage.html +++ /dev/null @@ -1,250 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - -
-{% if charts_mode == 'one' %} -
-
-
-
{{ _('Historical CPU and Memory Usage:') }}
-
- -
-
-
-
-{% elif charts_mode == 'two' %} -
-
-
-
{{ _('Historical CPU Usage:') }}
-
- -
-
-
-
-
-
{{ _('Historical Memory Usage:') }}
-
- -
-
-
-
-{% else %} - -{% endif %} - -
-
- {% if show_all %} - Showing 1 - {{ total_lines }} of {{ total_lines }} items - {% else %} - Showing {{ items_per_page * (current_page - 1) + 1 }} - {% if items_per_page * current_page > total_lines %}{{ total_lines }}{% else %}{{ items_per_page * current_page }}{% endif %} out of {{ total_lines }} items - {% endif %} -
-
- - - - -
- -
- - -
- - - - - - - - - - - - {% for entry in usage_data %} - - - - - - - - {% endfor %} - -
{{ _("Date") }} {{ _("CPU %") }} {{ _("Memory %") }} {{ _("Net I/O") }} {{ _("Block I/O") }}
{{ entry.timestamp }}{{ entry.cpu_percent | round(2) }}{{ entry.mem_percent | round(2) }}{{ entry.net_io }}{{ entry.block_io }}
-
- - - - - - - -{% if charts_mode == 'one' %} - -{% elif charts_mode == 'two' %} - -{% endif %} - - -
-{% endblock %} diff --git a/templates/admini/user/login.html b/templates/admini/user/login.html deleted file mode 100644 index 705dbf1d..00000000 --- a/templates/admini/user/login.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - {% if brand_name %}{{brand_name}}{% else %}OpenPanel{% endif %} - - - - - - - -
-
-

{{ _('Sign In') }}

-

{{ _('Welcome back! Please sign in to continue.') }}

-
-
-
- {% if not twofa_enabled %} - -
- -
- - - - - - -
-
-
- -
- - - - - - -
- - -
-
-
- {% endif %} - - {% if twofa_enabled %} - - -
- -
- - - - - - - -
- - - -
- {% endif %} - - -
- - - -
- - - - {% if error_message %} - - {% endif %} - - -
- - - - - - - - - - - - - - diff --git a/templates/admini/user/loginlog.html b/templates/admini/user/loginlog.html deleted file mode 100644 index 23aa23fa..00000000 --- a/templates/admini/user/loginlog.html +++ /dev/null @@ -1,105 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} -
- - - - -
-
- Successfull logins -
-
- - {% for login_record in last_login_data %} -
-
- {% with country_code_lower=login_record.country_code|lower %} - {{ login_record.country_code }} -   {{ login_record.country_code }} - {% endwith %} -
-
{{ login_record.ip }} -
-
{{ _('Copied!') }}
-
-
-
-
{{ login_record.login_time }}
-
-
-
- {% endfor %} - -
-
- - - - - - -{% endblock %} diff --git a/templates/admini/user/notifications.html b/templates/admini/user/notifications.html deleted file mode 100644 index 2cf43907..00000000 --- a/templates/admini/user/notifications.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - -
-
- -
-

{{ title }}

-
-

Receive email notifications for:

- - {% for key, value in notifications.items() %} -
-
- - -
-
- {% endfor %} -
- -
- -
-
- -{% endblock %} diff --git a/templates/admini/user/stats.html b/templates/admini/user/stats.html deleted file mode 100644 index a04a3878..00000000 --- a/templates/admini/user/stats.html +++ /dev/null @@ -1,184 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -
-
-
-
{{ _("CPU") }}
-
- -
-

{{ _('Current CPU usage:') }} {{ container_stats['CPU %'] }}
 

- - {{ _("View past usage") }} -
-
-
- - - - -
-
-
-
{{ _("RAM") }}
-
-
-

{{ _('Current Memory usage:') }} {{ container_stats['Memory %'] }}
({{ container_stats['Memory Usage'] }} / {{ container_stats['Memory Limit'] }})

- - {{ _("View past usage") }} -
-
-
- - -
-
-
- - - - - - - - - -
- - - - - - - -
-
-
-
{{ _('Network I/O') }}
-
{{ container_stats['Network I/O'] }}
-
-
-
-
-
{{ _('Block I/O') }}
-
{{ container_stats['Block I/O'] }}
-
-
-
-
-
{{ _("PIDs") }}
-
{{ container_stats['PIDs'] }}
-
-
-
- - -{% endblock %} diff --git a/templates/admini/user/twofa_settings.html b/templates/admini/user/twofa_settings.html deleted file mode 100644 index d1f6be18..00000000 --- a/templates/admini/user/twofa_settings.html +++ /dev/null @@ -1,187 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -
- - - -
- {% if success_message %} - - {% endif %} - -
- -
-
{{ _('Two-Factor Authentication') }}
-
- -

T{{ _('wo-factor authentication') }} ({{ _('also known as') }} 2FA, {{ _('2-step verification') }}, or {{ _('2-phase authentication') }}) {{ _('is a way of adding additional security to your account. 2FA requires you to enter an extra code when you log in or perform some account-sensitive action. The code is generated from an application on your computer or mobile phone.') }}

- -

{{ _('To enable 2FA for your account you will need an application that manages 2FA codes, such as') }}{{ _('Google Authenticator') }}. {{ _('You can install it here:') }}

-

    -

- -
-{% if twofa_enabled %} -
{{ _('2FA is currently') }} {{ _('enabled') }} {{ _('for your account.') }}
- -
- -
- - {% else %} -
{{ _('2FA is currently') }} {{ _('disabled') }} {{ _('for your account.') }}
- -
- - -
- {% endif %} - -
-
-
-{% if otp_secret %} -
-
-
{{ _('QR code') }}
-
- - - - -

- - - - -{{ _('Display OTP code') }} -
- - -
- -{{ _('After configuring the OTP code in the 2FA application, kindly confirm by clicking the button below to permanently delete the OTP secret.') }} - -
- -
-
-
- {% endif %} -
-
- - - - - - -{% endblock %} diff --git a/templates/admini/websites.html b/templates/admini/websites.html deleted file mode 100644 index 613c2d85..00000000 --- a/templates/admini/websites.html +++ /dev/null @@ -1,3164 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - - - - - - - -{% if current_domain %} - - -
-
-

{{ current_domain }}

-

- -
-
- - - - - -
-
- -
- - -
-
-
- - -
-
- - -
-
-
-
-
- - -
-
- - -
-
-
- -
- -
- -
-
-
-
- - -
-
- -
- -
- -
-
-
- -
- -
- -
-
- -
- -
- -
- -
- -
- -
{{ _('WordPress version:') }}
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- - -
- - -
- - -
-
- - {{ _('Recommended') }} - -
-
- - -
-
-
- -
- -
- - -
-
- - -
-
-
- -
- -
- - -
-
- - -
-
-
- -
- - - - - - - - - -
- -
- - - - -

{{ _('The options below allow you to manage the native WordPress debugging tools, enabling and disabling these tools in the wp-config.php file. It is not recommended to use these options on production websites since they are meant for development and test installations. Refer to') }} {{ _('Debugging in WordPress') }} {{ _('article for more information on these options.') }}

-
-
- - - -
- - - - -
-
- - -
-
-
- -
- -
-
- - -
-
-
- -
- -
-
- - -
-
-
- -
- -
-
- - -
-
-
- -
- -
-
- - -
-
-
- - - -
- - - - - - - - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
{{ _('Security Measures') }} -
{{ _('Status') }}
-
-
- -
-
- {{ _('Restrict access to files and directories') }} - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Configure security keys') }} - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to') }} xmlrpc.php - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block directory browsing') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Forbid execution of PHP scripts in the wp-includes directory') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Forbid execution of PHP scripts in the wp-content/uploads directory') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to wp-config.php') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Disable scripts concatenation for WordPress admin panel') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Turn off pingbacks') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Disable PHP execution in cache directories') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Disable file editing in WordPress Dashboard') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Change default database table prefix') }} - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Enable bot protection') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to sensitive files') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to potentially sensitive files') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block access to .htaccess and .htpasswd') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _('Block author scans') }} - ({{ _('can be reverted') }}) - - - - - {{ _('STATUS') }} - - - -
-
- -
-
- {{ _("Change default administrator's username") }} - - - - - {{ _('STATUS') }} - - - -
- -
-
-
-
- - - - - -
-
- -
- - - - - -
- -
- - - - - -
-
-
-   - {% if container.type|lower == "wordpress" %} - - - -

- - - {{ _('Login as Admin') }} - - - - - - - -

- {% else %} -

- {% endif %} - - - - -
-
-
-
- {{ _('Type') }} -

- {% if container.type|lower == "wordpress" %} - {{ container.type }} - {% elif container.type|lower == "mautic" %} - - {% elif container.type|lower == "flarum" %} - - {% elif container.type|lower == "nodejs" %} - - {% else %} - {{ container.type }} - {% endif %} -

- -
-
-
- - - -
-
-
- {{ _('Files') }} ({{ _('Calculating size...') }}) -

{{ domain_directory }}

-
-
-
- -
- {{ _('Domain:') }} -

- - {{ current_domain }} - -

- -
-
-
- - - -
- - {% if container.type|lower == "wordpress" or container.type|lower == "mautic" %} -
-
- - - -

-

-
    -
  • {{ _('Database:') }}
  • -
  • {{ _('Table prefix:') }}
  • -
  • {{ _('Username:') }}
  • - -
  • {{ _('Password:') }} - -
  • -
-
- -

-
-
- - {% elif container.type|lower == "nodejs" %} -
- {% else %} -
- {% endif %} - - - - - - - - - -
-
- {{ _('Created') }} - -

- {{ container.created_date }} -

-{% if container.type|lower == "wordpress" %} - - -{% elif container.type|lower == "mautic" %} - - -{% endif %} - - -
-
-
- - - - - - - - - - -
-
-
- {% if container.type|lower == "wordpress" %} - {{ _('WP version:') }} -

- {% elif container.type|lower == "mautic" %} - {{ _('Mautic version:') }} -

- {% elif container.type|lower == "nodejs" %} - {{ _('NodeJS version:') }} -

- {% endif %} -
-
-
- {% if container.type|lower == "wordpress" or container.type|lower == "mautic" %} - {{ _('PHP version:') }} -

- {% endif %} -
-
-
-
- {% if container.type|lower == "wordpress" or container.type|lower == "mautic" %} - {{ _('MySQL version:') }} -

- {% endif %} -
-
-
- - - - - - - - - - -
-
-
- - -
-
-{% if 'temporary_links' in enabled_modules %} - - - -{% endif %} - - - - -{% if backup_files_available %} -{% endif %} - - - - - -
- - {% if container.type|lower == "wordpress" or container.type|lower == "mautic" %} -
- -

{{ _("Preview website with a temporary domain,") }} {{ _("valid for 15 minutes only!") }} {{ _("Helpful if your domain hasn't been pointed to the server's IP address yet and lacks an SSL certificate.") }}

-

{{ _("Create a manual backup of the ") }} {{container.type}} {{ _("website's files and database for data protection.") }}

-

{{ _('Restore the website to a previous state using a previously created backup.') }}

-

{{ _('Remove the {{container.type}} website from this manager without actually deleting any files or database.') }}

-

{{ _('Completely remove the {{container.type}} website, including its files, database, and records from this manager.') }}

-
- {% endif %} -
- - - -{% if container.type|lower == "wordpress" %} - - - - - - - - - -{% elif container.type|lower == "mautic" %} - - - - -{% elif container.type|lower == "nodejs" %} - - - -{% endif %} - - -
- -
- -
-
-
- - Loading data... -
- - -
- - - - -
-
- - -
-
Desktop
- - - - -
-
- - -
-
Mobile
- - - - -
-
-
-
- -
-
- First Contentful Paint -
-   /   -
-
-
- Speed Index -
-  /  -
-
-
- Time to Interactive -
-  /  -
-
-
- Measured at Loading... -
-
- View complete results on Google PageSpeed Insights. -
-
- - - - - - - - - - - - - - - - - - - - -
-
-
- -
-
- - - - - - -
- - {% if container.type|lower == "wordpress" or container.type|lower == "mautic" %} - - - -
-
- - - - - - - - - - - - - - - -
{{ _('phpMyAdmin') }}
-
-
- {% elif container.type|lower == "nodejs" %} - - -
-
- - - - - - - - - - - - - - - -
{{ _('PM2') }}
-
-
- {% endif %} -
- - - - - - -{% if container.type|lower == "wordpress" %} -
-
-
- - - - - - - - - - - -
{{ _('Login as admin') }}
-
-
-
-{% elif container.type|lower == "nodejs" %} - -{% endif %} - - -{% if container.type|lower == "wordpress" or container.type|lower == "mautic" %} - -{% elif container.type|lower == "nodejs" %} - -{% endif %} - - - - - - -{% if container.type|lower != "nodejs" or container.type|lower != "python" %} - - - - - -{% endif %} - - - -{% if 'malware_scan' in enabled_modules %} - -{% endif %} - - - -
-
-
- - - - - - - - -{% if container.type|lower == "wordpress" %} - - - - - - - - - - - - - - -{% elif container.type|lower == "mautic" %} - - - - - - - - - - - - - -{% endif %} - - - - - - - - - - - - - - - -{% endif %} - - - -{% endblock %} diff --git a/templates/admini/wordpress.html b/templates/admini/wordpress.html deleted file mode 100644 index 8828fc0c..00000000 --- a/templates/admini/wordpress.html +++ /dev/null @@ -1,984 +0,0 @@ - -{% extends 'base.html' %} - -{% block content %} - -{% if domains %} - - - -{% with messages = get_flashed_messages() %} -{% if messages %} -{% for message in messages %} -{% if "Error" in message %} - -{% else %} - -{% endif %} -{% endfor %} -{% endif %} -{% endwith %} - - -
- - - - - - - - - - - -
-
- -
- - -
-
-

{{ _("Install WordPress") }}

-

{{ _("Install WordPress on an existing domain.") }}

-
-
-
- - -
-
- - -
-
-
- -
- - -
- -
-
- - -
-
- - -
- - - - - -
-
- - -
-
- -
- -
- - -
-
-
-
- - - - - - -
- -
- -
-
- - -
- -
-
- - - - - - -
-
-
- -
-
-{% if data %} -{% if view_mode == 'table' %} - - - - - - - - - - - - {% for row in data %} - - - - -{% set domain_url = row[0] %} - - - - - - - - {% endfor %} - - -
{{ _("Domain") }}{{ _("WordPress Version") }}{{ _("Admin Email") }}{{ _("Created on") }}{{ _("Actions") }}
{{ row[0] }} Favicon - {{ row[0] }} {{ row[3] }}{{ row[2] }}{{ row[4] }} - {{ _("Login as Admin") }} -{{ _("Manage") }} - - -
-{% endif %} -{% if view_mode == 'cards' %} - - - -
-
- {% for row in data %} - - -
-
- - -
-
-
-
-
{{ row[0] }}
{{ _("WordPress") }} {{ row[3] }} -
-
-
- -
- -
- -
- {% endfor %} - -
-
- - - - -{% endif %} - - - - - - - - - -
- - -{% else %} - - -
-

{{ _("No WordPress Installations") }}

-

{{ _("You don't have WordPress sites connected yet. Install a new WordPress site or scan to find existing ones.") }}

- -

{{ _("or") }}

- - -
-{% endif %} - - - - - - -{% else %} - -
-

{{ _("No Domains") }}

-

{{ _("Add a domain name first in order to install WordPress.") }}

- - {{ _("Add a Domain Name") }} - -
-{% endif %} - - - - - - - - - - -
- -
-
- -
- - - - - - - -{% if view_mode == 'cards' %} - -{% endif %} -{% if view_mode == 'table' %} - -{% endif %} - - - -
-
- - - -{% endblock %} diff --git a/templates/tabler/backups.html b/templates/tabler/backups.html deleted file mode 100644 index 54a20f1b..00000000 --- a/templates/tabler/backups.html +++ /dev/null @@ -1,2962 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
-
-
-

Configuration

- - - - - - - - - - - -
-
-
-
-
-
-
-

- Backup Jobs -

-

- Backup Jobs allows you to configure how OpenPanel generates and manages your backups according to your backup job configuration. -

-
-
-
- - - - New Backup Job - - - - - - - - - - - - - -
-
-
- - - - {% if error %} -

{{ error }}

- {% else %} - - - - - - - - - - - - - - - - {% for job in backup_jobs %} - - - - - - - - - - {% endfor %} -
NameDestinationTypeScheduleStatusFilters
{{ job.name }}{% if "wasabi" in job.destination %} {% elif "local" in job.destination %} {% else %} {% endif %} {{ job.destination }} -
- {% for type in job.type %} -{% if "accounts" in type %} - -{% elif "partial" in type %} - -{% elif "config" in type %} - -{% endif %} - {{ type.capitalize() }} - {% endfor %} -
-
- -{% if "hour" in job.schedule %} -{% elif "daily" in job.schedule %} -{% elif "week" in job.schedule %} -{% elif "month" in job.schedule %} -{% else %} -{% endif%} {{ job.schedule }}
Retain {{ job.retention }} Backups
-
{{ job.status.capitalize() }} -
-{% for filter_value in job.filters %} - {% if filter_value == 'mysql' %} - MySQL - {% elif filter_value == 'php' %} - PHP - {% elif filter_value == 'ssh' %} - SSH - {% else %} - {{ filter_value|capitalize }} - {% endif %} -{% endfor %} - - - -
-
- - - - -
- - - - - - {% endif %} - - - -
-
-
-
-

- Destinations -

-

- A Backup destination serves as the storage location for your backup files (backup destinations can be remote or local) -

-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
DestinationTypeSSH UserSSH PortSSH KeyStorage Limit
- - - - - - - - - - - - -
-
-
-
-

- Restore & Download -

-

- In this section, you can view, restore or download Account Backups and Configuration Backups generated from your Backup Jobs. -

-
-
-
-
-
-
- -
-
-
- - -
- - - - - - - - - - - - - -
- - - - - - - -
-
-
-

- Logs -

-

- View and download all logs for Backup-related processes and check their corresponding status. -

-
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - -
-
-
-
-

- Settings -

-

- Configure and finetune your server backups settings. -

-
-
-
- -
-
-
- - - - -
-
-
- - -
-
- - -
Directory does not exist.
- - - The workspace directory that the system will use to store all the temporary files.
-To prevent issues with the system performance, move the original folder to the new destination instead of creating new directory -
-
- - - - - - - - -
- - -
Directory does not exist.
- - - OpenPanel will use this directory to store all system downloads, include accounts backup downloads. - -
-
- -
- - days -
- - Orphan backups are account backup files that are not associated with any ACTIVE account.
-OpenPanel will automatically remove these backups if the date these backups were CREATED is older than the number of days specified in this field. -
-
-
- -
- - days -
- - The time to keep logs. - -
-
- - -
-
-
- -
- - - -
- -
- OpenPanel checks average system load when starting a backup job. If system load is above this value then the backup job will not run.
Recommended value: 2 x Number of CPU cores.
-
- - -
- - - Set the maximum number of concurrent backup/restore tasks that may run simultaneously.
NOTE: Higher value doesn't necessarily mean higher performance, we recommend 1 task per server CPU core, but no more than 5. You also need to consider limiting CPU usage (200% is a reasonable limit).
-
-
- -
- - minutes -
- Set the maximum time a backup/restore process can run for a user account. It will automatically abort once it reaches the set TTL. -
-
- -
- - % -
- limit CPU usage in percentage; 100% is one core.
Recommended values: 100% for a single/dual CPU server, anything above we recommend values between 200% - 400%
-
-
- -
- - MB/s -
- limit IO read usage in MB per second -
-
- - - limit IO write usage in MB per second -
-
- -
- - - - - -
-If encryption is enabled, this key is needed to restore backups. -
-
-
-
- - -
-
- - - - Set the email address to send Emails from the system. - -
- - -
- - - - -
-
-
- - - - - - - - - - - - - - - - - -
- - - - - - - -
- -
-
-
-
-
- - - - - - -{% endblock %} diff --git a/templates/tabler/base.html b/templates/tabler/base.html deleted file mode 100644 index 5c1d389c..00000000 --- a/templates/tabler/base.html +++ /dev/null @@ -1,1123 +0,0 @@ - - - - - - - - - OpenAdmin [{% if force_domain_value %}{{ force_domain_value }}{% elif server_hostname %}{{ server_hostname }}{% else %}{{public_ip}}{% endif %}] {% if title %}{{title}}{%endif%} - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
- -
-
- - - - -{% with messages = get_flashed_messages() %} -{% if messages %} - {% for message in messages %} - {% if 'success' in message.lower() %} - {% set alert_class = 'alert-success' %} - {% set alert_icon = '' %} - {% elif 'error' in message.lower() %} - {% set alert_class = 'alert-danger' %} - {% set alert_icon = '' %} - {% else %} - {% set alert_class = 'alert-primary' %} - {% set alert_icon = '' %} - {% endif %} - - {% endfor %} -{% endif %} -{% endwith %} - - - - - {% block content %}{% endblock %} - -
-
- -
-
- - - - - - - - - - - - - - - - - - diff --git a/templates/tabler/cluster.html b/templates/tabler/cluster.html deleted file mode 100644 index b435f418..00000000 --- a/templates/tabler/cluster.html +++ /dev/null @@ -1,61 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - -
- -
- - - - - - - - - - - - - -
ServerDocker EndpointDefault
-
- - - - - -
- - - - - - - - -{% endblock %} diff --git a/templates/tabler/dashboard/cpu_per_core_usage.html b/templates/tabler/dashboard/cpu_per_core_usage.html deleted file mode 100644 index b7c5e64b..00000000 --- a/templates/tabler/dashboard/cpu_per_core_usage.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - -
-
-
-
-
-
CPU
-

Real-time usage per cpu core.

-
-
-
-
-
-

The data being displayed is the usage percentage of each CPU core, with one hexagon per CPU core, and background colors indicating usage levels (default for 0-79%, orange for 80-89%, and red for 90-100%).

-

The CPU usage percentage represents the amount of the CPU's processing power that is currently being utilized. It indicates how much of the CPU's capacity is in use at a specific moment. For example, a CPU usage of 50% means that - the CPU is operating at half of its maximum processing capacity, while 100% usage indicates that the CPU is fully utilized, and there may be resource constraints or performance issues.

-

The data is auto-refreshed every 1 second to provide real-time updates.

-
- - -
- - -
- - - - - - -
diff --git a/templates/tabler/dashboard/dashboard.html b/templates/tabler/dashboard/dashboard.html deleted file mode 100644 index 4736404f..00000000 --- a/templates/tabler/dashboard/dashboard.html +++ /dev/null @@ -1,687 +0,0 @@ -{% extends 'base.html' %} {% block content %} - - - -
- - - - - - - -
- -
-
-
- - - -
- - -
-
-
 ... ... ...
-
- -
-
- -
-
- -
- - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
User Activity
-

Real-time user activity log.

-
-
-
-
Users activity log will appear here.
-
-
-
-
- - - {% if history_usage_graphs %} - - {% include 'dashboard/usage_graphs.html' %} - {% endif %} - - - {% if get_started %} - - {% include 'dashboard/get_started.html' %} - {% endif %} - -
-
-
-
-
Services Status
-

The Service Status table only reports monitored services.

-
- -
-
-
-

Display current status of all monitored system services and docker containers. To add custom services to the list, edit the /etc/openpanel/openadmin/config/services.json file. -

- -

-

    -
  • - is currently active and running.
  • -
  • - not currently active, either failed or stopped.
  • -
  • - not yet started, will auto-start when user/domains are created.
  • -
  • - there was a problem getting service status.
  • -
-

- - - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ServiceStatusActions
Loading;Checking - -
LoadingChecking - -
LoadingChecking - -
LoadingChecking - -
LoadingChecking - -
LoadingChecking - -
-
-
-
-
- - - - - - - - -
-
-
-
-
System Information
-

Information about your server configuration.

-
- - -
-
-
-

Server hardware and OS information

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hostname -
-
OS -
-
OpenPanel version -
-
Server Time -
-
Kernel -
-
CPU -
-
Uptime -
-
Running Processes -
-
Package Updates -
-
-
-
-
-
- - - - {% if license_type == "Community" %} - {% if try_enterprise %} - - {% include 'dashboard/try_enterprise.html' %} - {% endif %} - {% endif %} - - - - {% if openpanel_news %} - - {% include 'dashboard/openpanel_news.html' %} - {% endif %} - - - - {% if cpu_per_core_usage %} - - {% include 'dashboard/cpu_per_core_usage.html' %} - {% endif %} - -
- - - -
-
-
-
-
Disk Usage
-

Current partition and hard disk usage.

-
- -
-
-
-

This section provides an overview of your system's disk usage. It displays information about each mounted disk partition, including details such as the device, mount point, filesystem type, and the amount of space used and available - in a human-readable format (in gigabytes, GB or terabytes, TB). The 'Usage Percentage' column indicates the percentage of disk space currently in use.

-

Partitions located within the/home/directory contain data inside users containers.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DeviceTypeMountpointUsed SpaceTotal SpaceFree Space%
-
-
-
-
-
-
-
15.2% Complete
-
-
/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
15.2% Complete
-
-
/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
15.2% Complete
-
-
/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
15.2% Complete
-
-
/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
15.2% Complete
-
-
/
-
-
-
-
-
-
-
-
-
-
-
-
-
- - -
- - - - - - - -{% endblock %} diff --git a/templates/tabler/dashboard/get_started.html b/templates/tabler/dashboard/get_started.html deleted file mode 100644 index 7e9c6050..00000000 --- a/templates/tabler/dashboard/get_started.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -
{% if force_domain and ns1 and ns2 and user_count > 0 and plan_count > 0 and is_modsec_installed == 'YES' and backup_jobs|int > 0 %} {% else %} -
-
-
-
-
Quick start guide
-

Recommended steps for new installations.

-
-
-
recommended
-
-
{% if force_domain %} - {% else %} - - - {% endif %} {% if ns1 and ns2 %} - {% else %} - - - {% endif %} {% if user_count|int == 0 and plan_count|int == 0 %} - - - {% elif user_count|int > 0 and plan_count|int > 0 %} - {% elif plan_count|int > 0 and user_count|int == 0 %} - - - {% elif plan_count|int == 0 and user_count|int > 0 %} - - - {% endif %}{% if backup_jobs|int > 0 and backup_jobs|int == 0 %} - {% else %} - - - {% endif %}
- - -
{% endif %} -
diff --git a/templates/tabler/dashboard/openpanel_news.html b/templates/tabler/dashboard/openpanel_news.html deleted file mode 100644 index 363cb156..00000000 --- a/templates/tabler/dashboard/openpanel_news.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -
-
-
-
-
-
Latest News
-

from the openpanel.co blog

-
-
-
news
-
-
-
-
-
-
-
- - diff --git a/templates/tabler/dashboard/try_enterprise.html b/templates/tabler/dashboard/try_enterprise.html deleted file mode 100644 index afda2636..00000000 --- a/templates/tabler/dashboard/try_enterprise.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -
-
-
-
-
-
Try Enterprise
-

-
-
- -
-
- -

OpenPanel Enterprise edition offers advanced features for user isolation and management, suitable for web hosting providers.

- -
-
- - - - -
-
- diff --git a/templates/tabler/dashboard/usage_graphs.html b/templates/tabler/dashboard/usage_graphs.html deleted file mode 100644 index fbc312fe..00000000 --- a/templates/tabler/dashboard/usage_graphs.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -
-
- -
-
-
-
Usage
-

Historical resource usage.

-
-
- -
- -
-
-

Daily usage reports

-
- -
-
-
-
-
-
-
-
- Websites -
-
...
-
-
-
- Domains -
-
...
-
-
-
- Users -
-
{{ user_count }}
-
-
-
-
-
-
-
- - - - - - diff --git a/templates/tabler/domains/domains.html b/templates/tabler/domains/domains.html deleted file mode 100644 index 29cda09c..00000000 --- a/templates/tabler/domains/domains.html +++ /dev/null @@ -1,271 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - - - -
-{% if domains %} -
-
-
-
-
- - - - - - - - - - - - - - {% for domain in domains %} - - - - - - - - - - {% endfor %} - -
EditorsAnalyticsAdvanced
{{ domain.domain_id }}{{ domain.domain_url }}{{ domain.username.split('_')[-1] }} {% if "SUSPENDED_" in domain.username %}SUSPENDED{% endif %} - - DNS Zone - VirtualHosts Access Log | Visitors Report Transfer Remove
-
-
-
-
-
- - -
-
-
Edit DNS
- -
-
- -
-
- -
-
-
View log
-
-
-

-    
-
- -
-
-
Edit DNS
- -
-
- -
-
- - - - - - - - - -{% else %} -
-
-
-
No Domains
-

No domains yet.

-
-
-
-{% endif %} -
- - - - - - -{% endblock %} diff --git a/templates/tabler/domains/logs.html b/templates/tabler/domains/logs.html deleted file mode 100644 index dd6d2137..00000000 --- a/templates/tabler/domains/logs.html +++ /dev/null @@ -1,25 +0,0 @@ -{% extends 'base.html' %} -{% block content %} -
-
-
- - -
-
- -
-{% endblock %} diff --git a/templates/tabler/domains/logs_single.html b/templates/tabler/domains/logs_single.html deleted file mode 100644 index 3f478831..00000000 --- a/templates/tabler/domains/logs_single.html +++ /dev/null @@ -1 +0,0 @@ -{{ html_content|safe }} diff --git a/templates/tabler/emails/accounts.html b/templates/tabler/emails/accounts.html deleted file mode 100644 index e7b86fb5..00000000 --- a/templates/tabler/emails/accounts.html +++ /dev/null @@ -1,94 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - -{% if mailserver_status == 'running' %} - - -
-
-
-
-
-
- - - - - - - - - - - - {% for email, quota in emails %} - - - - - - - {% endfor %} - -
WebmailAdvanced
{{ email }}{{ quota }} Login to WebmailAdvanced
-
-
-
-
-
-
- - - - -{% elif mailserver_status == 'not_installed' %} - -{% include 'emails/mailserver_is_not_installed.html' %} - -{% elif mailserver_status == 'stopped' %} - -{% include 'emails/mailserver_is_stopped.html' %} - - -{% else %} - -Mailserver status not detected! - -{% endif %} - - -{% endblock %} - diff --git a/templates/tabler/emails/mailserver_is_not_installed.html b/templates/tabler/emails/mailserver_is_not_installed.html deleted file mode 100644 index 0ed11430..00000000 --- a/templates/tabler/emails/mailserver_is_not_installed.html +++ /dev/null @@ -1,13 +0,0 @@ -
-
-
-
MailServer is not installed
-

Mailserver is not yet installed, please install it from terminal with the folowing command:

-

-

-
-
opencli email-server install
-
-
-
-
diff --git a/templates/tabler/emails/mailserver_is_stopped.html b/templates/tabler/emails/mailserver_is_stopped.html deleted file mode 100644 index 8f06734e..00000000 --- a/templates/tabler/emails/mailserver_is_stopped.html +++ /dev/null @@ -1,43 +0,0 @@ -
-
-
-
MailServer is not running
-

Mailserver is currently stopped.

-

-

- -
-
-
- - diff --git a/templates/tabler/emails/queue.html b/templates/tabler/emails/queue.html deleted file mode 100644 index 8b137891..00000000 --- a/templates/tabler/emails/queue.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/tabler/emails/reports.html b/templates/tabler/emails/reports.html deleted file mode 100644 index 8a7d9df4..00000000 --- a/templates/tabler/emails/reports.html +++ /dev/null @@ -1,4 +0,0 @@ -{% extends 'base.html' %} -{% block content %} - -{% endblock %} diff --git a/templates/tabler/emails/settings.html b/templates/tabler/emails/settings.html deleted file mode 100644 index ca2602a6..00000000 --- a/templates/tabler/emails/settings.html +++ /dev/null @@ -1,1176 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - - - - - -
- - - - - - -{% endblock %} diff --git a/templates/tabler/emails/webmail.html b/templates/tabler/emails/webmail.html deleted file mode 100644 index ec239eee..00000000 --- a/templates/tabler/emails/webmail.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - - - - - -{% endblock %} - diff --git a/templates/tabler/license.html b/templates/tabler/license.html deleted file mode 100644 index 5b6e3f42..00000000 --- a/templates/tabler/license.html +++ /dev/null @@ -1,287 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - - -
- - -
-
- - -
- - -
- - - -
-
-
-

License key

-

Enter your OpenPanel Enterprise license key to unlock premium features.

-
-
- - - - -
-
- -
-
- - - - - - -
-
-
-

License Info

-

-
- - - - - -
-
-
- - -
-
-
-
-
- - - - - - - - - -{% endblock %} diff --git a/templates/tabler/license_error.html b/templates/tabler/license_error.html deleted file mode 100644 index 7eaea80f..00000000 --- a/templates/tabler/license_error.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - -Openpanel - Enterprise License verification failed - - - - - -
-
- -
-
-

Your OpenPanel Enterprise license key is invalid!

-

-If you want to continue using OpenPanel Enterprise features, it's time to extend your license. -

-
    -
  • - - - - -Unlimited Users -Create and manage unlimited users - -
  • -
  • - - - - -Access to new features -Access to beta releases with new features. - -
  • -
  • - - - - -Regular updates -Regular updates and improvements. - -
  • -
- -

-License check runs every 6 hours, if you just extended the license please run the command opencli license verify to re-check the license immediatelly. -

-
-
-
-
- - diff --git a/templates/tabler/login.html b/templates/tabler/login.html deleted file mode 100644 index a6a70680..00000000 --- a/templates/tabler/login.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - {% if force_domain_value %}{{ force_domain_value }}{% elif server_hostname %}{{ server_hostname }}{% else %}{{public_ip}}{% endif %} - Sign in to OpenAdmin - - - - - - - - - - - - - -
-
-
- -
- -
- - - -
-

- OpenPanel

-{% if license_type == "Enterprise" %} -
Enterprise edition
-{% elif license_type == "Community" %} -
Community edition
-{% else %} -
UNLICENSED - NO UPDATES
-{% endif %} - -
- - -
-
-version {{ panel_version }} -
-
-
- -
- -

Login

- -

Server: {% if force_domain_value %}{{ force_domain_value }}{% elif server_hostname %}{{ server_hostname }}{% else %}{{public_ip}}{% endif %}

- -

Type the Username and Password and click Signin.

- -
- -
- -
- -
- - - - - - -
-
- - -
- -
- - - - - - - -
-
- - -
- - -
- -
- - -
- - -
- -
- - -
- -
- -
- {% with messages = get_flashed_messages() %} - {% if messages %} - {% for message in messages %} -

{{ message }}

- {% endfor %} - {% else %} - {% endif %} - {% endwith %} -
-
or
- -
-
- -
-{% if license_type == "Enterprise" %} -Support -{% else %} -Support -{% endif %} - Privacy Policy About -
-
- - - -
- -
- - - - - - - diff --git a/templates/tabler/notifications.html b/templates/tabler/notifications.html deleted file mode 100644 index 93223460..00000000 --- a/templates/tabler/notifications.html +++ /dev/null @@ -1,674 +0,0 @@ - -{% extends 'base.html' %} {% block content %} - - - - - - - - -
-
-
-
- -{% if notifications %} -
    - {% for notification in notifications %} - - {% set parts = notification.split(' MESSAGE: ', 1) %} - {% set time_and_status_and_title = parts[0].split(' ', 4) %} - {% set time = time_and_status_and_title[0] ~ ' ' ~ time_and_status_and_title[1] %} - {% set status = time_and_status_and_title[2] %} - {% set title = time_and_status_and_title[3:]|join(' ') %} - {% set message = parts[1] if parts|length > 1 else '' %} - - -
  • -{% if status == "UNREAD" %} -
    -
    - -
    - - -{% elif status == "READ" %} -
    -{% endif %} -
    -
    -
    -
    {{time}}
    - {% if "REBOOT" not in title and "accessed from new IP address" not in title and "SSH login" not in title %}

    {{ title }}

    {% endif %} - -{% if "Backup Job" in title %} -
    -
    -{% set message_parts = message.split("-") %} -{% set accounts_count = message_parts[0]|trim|replace('Accounts:', '')|trim %} -{% set execute_seconds = message_parts[1]|trim|replace('Total execution time:', '')|trim %} - -{% set seconds = execute_seconds|float %} -{% set minutes = seconds // 60 %} -{% set hours = minutes // 60 %} -{% set days = hours // 24 %} - -
    -
      -
    • Total accounts: {{ accounts_count }}
    • -
    • Total execution time: - -{% if days >= 1 %} - {{ days|int }} days, {{ hours|round|int % 24 }} hours -{% elif hours >= 1 %} - {{ hours|int }} hours, {{ minutes|round|int % 60 }} minutes -{% elif minutes >= 1 %} - {{ minutes|int }} minutes, {{ seconds|round|int % 60 }} seconds -{% else %} - {{ seconds|round|int }} seconds -{% endif %} - - -
    • -
    • View Backup Logs
    • -
    -
    -
    - -
    - - -{% elif "SSH login" in title %} - - - {% set ip_addresses_start_index = message.find("IP addresses:") %} - - {% if ip_addresses_start_index != -1 %} - {% set message_text = message[:ip_addresses_start_index].strip() %} - {% set ip_addresses_str = message[ip_addresses_start_index + 13:].strip() %} - - {% set ip_addresses_list = ip_addresses_str.split() %} - {% else %} - {% set message_text = message %} - {% set ip_addresses_list = [] %} - {% endif %} - - -
    -
    -

    - {{ title }} -

    -
    -
      -
    • - {{ message_text }}
      - {% for ip_address in ip_addresses_list %} -
      {{ ip_address }}
      - {% endfor %} -
      -
    • -
    -
    -
    -
    - - - -{% elif "accessed from new IP address" in title %} - -{% set message_parts = message.split("Admin account") %} -{% set username_and_ip = message_parts[1]|trim %} -{% set username_parts = username_and_ip.split("was accessed from a new IP address:") %} -{% set username = username_parts[0]|trim %} -{% set ip = username_parts[1]|trim %} - -
    -
    -

    - {{ title }} -

    -
    -
      -
    • - Admin account {{ username }} was accessed from a new IP address: {{ ip }} -
    • -
    -
    -
    -
    - - - - -{% elif "REBOOT" in title %} - -{% set message_parts = message.split("System was rebooted.") %} -{% set uptime = message_parts[1]|trim %} - -
    -
    - - - - - -
    -
    -

    - {{title}} -

    -
    -
      -
    • Server reboot detected!
    • -
    • Time: {{uptime}}
    • -
    -
    -
    - -
    - - - -{% elif "Disk Space" in title %} - - - - -{% set message_parts = message.split("| Partitions:") %} -{% set before_disk = message_parts[0]|trim %} -{% set after_disks = message_parts[1]|trim %} - -
    - -
    -
    Disk:
    -
    - - {{ before_disk.split(':')[1].strip() }} - - -
    -
    -
    -
    - {{ before_disk.split(':')[1].strip() }} Complete -
    -
    - - - -

    Disk usage per partitions:

    -
    -{{ after_disks|replace('\\n', '
    ')|safe }} -
    -
    - - - - -{% elif "RAM" in message %} - {% set ram_info = message.split(', ') %} - {% set used_ram = ram_info[0]|replace("Used RAM: ", "")|replace(" MB", "") %} - {% set total_ram = ram_info[1]|replace("Total RAM: ", "")|replace(" MB", "") %} - {% set usage_percentage = ram_info[2]|replace("Usage: ", "")|replace("%", "")|trim ~ "%" %} - - -
    -
    - - Used - {{ used_ram }} MB ({{ usage_percentage }}) -
    -
    - - Total - {{ total_ram }} MB -
    -
    - - Free - {{ (total_ram|int - used_ram|int) }} MB -
    -
    - -
    -
    -
    - -{% elif "service is not active" in title %} - -{% if "Deactivated successfully" in message or "Processing signal" in message %} -
  • - - {% endfor %} - - - - - - -
- -{% else %} -

No notifications available.

-{% endif %} - - - -
- - -
-
- -
-
-
-
- -

Settings

- -
- ? -
-
- - -
-
-
-
Notification Preferences:
- - - - - - -
- -
-
Email for notifications:
-
- - -
-
- -
-
- -
- - - {% for service in ['panel', 'admin', 'nginx', 'mysql', 'docker', 'named', 'csf', 'ufw', 'certbot'] %} - - {% set display_name = service %} - - {% if service == 'panel' %} - {% set display_name = 'OpenPanel' %} - {% elif service == 'admin' %} - {% set display_name = 'OpenAdmin' %} - {% elif service == 'nginx' %} - {% set display_name = 'Nginx' %} - {% elif service == 'mysql' %} - {% set display_name = 'MySQL' %} - {% elif service == 'docker' %} - {% set display_name = 'Docker' %} - {% elif service == 'named' %} - {% set display_name = 'BIND9' %} - {% elif service == 'csf' %} - {% set display_name = 'ConfigServer Firewall' %} - {% elif service == 'ufw' %} - {% set display_name = 'UFW' %} - {% elif service == 'certbot' %} - {% set display_name = 'Certbot' %} - {% endif %} - - - - {% endfor %} - -
- - - - - -
- -
- - - -
- -
- -
-
- - % -
-
-
- -
- -
-
- - % -
-
-
- -
- -
-
- - % -
-
-
- -
- -
-
- - % -
-
-
- -
- -
-
- - % -
-
-
- - -
- - -
-
-
-
-
-
- - - - -
-
-
- - -
- - - - - - - - - - - - - - - - -{% endblock %} diff --git a/templates/tabler/plans.html b/templates/tabler/plans.html deleted file mode 100644 index bc393b3b..00000000 --- a/templates/tabler/plans.html +++ /dev/null @@ -1,1897 +0,0 @@ - -{% extends 'base.html' %} {% block content %} - - - - - - - - -
- - -{% if plans %} - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - {% for plan in plans %} - - - - - - - - - - - - - - - - - - {% endfor %} - -
 
{{ plan.id }} -
-
-
{{ plan.name }}
- {{ plan.description }} -
-
-
- - -
- -{% if 'openpanel' in plan.docker_image %} -
- - -
- - -Ubuntu 24.04 - - - - - - - - - -PHP 8.2 - - - - - - - - - {% if 'nginx' in plan.docker_image %} - -Nginx 1.24 - {% elif 'apache' in plan.docker_image %} - -Apache 2.4 - {% elif 'litespeed' in plan.docker_image %} - LiteSpeed - {% endif %} - - - - - {% if 'mysql' in plan.docker_image %} - -MySQL 8 - {% elif 'mariadb' in plan.docker_image %} - -MariaDB 10 - - - - - - - - - - - - - {% else %} - -MySQL 8 - {% endif %} - - - - - - - - - -
-
-
- -{% else %} - - - - -
- - -
-custom image -
-
- - - - -{% endif %} - - - - -
{% if plan.disk_limit == 0 %}∞{% else %}{{ plan.disk_limit }}{% endif %}{% if plan.storage_file == "0 GB" or plan.storage_file is none %}∞{% else %}{{ plan.storage_file }}{% endif %}{% if plan.inodes_limit == "0" or plan.inodes_limit is none %}∞{% else %}{{ plan.inodes_limit }}{% endif %}{% if plan.domains_limit == 0 %}∞{% else %}{{ plan.domains_limit }}{% endif %}{% if plan.websites_limit == 0 %}∞{% else %}{{ plan.websites_limit }}{% endif %}{% if plan.email_limit == 0 %}∞{% else %}{{ plan.email_limit }}{% endif %}{% if plan.ftp_limit == 0 %}∞{% else %}{{ plan.ftp_limit }}{% endif %}{% if plan.db_limit == 0 %}∞{% else %}{{ plan.db_limit }}{% endif %}{% if plan.cpu == 0 %}∞{% else %}{{ plan.cpu }}{% endif %}{% if plan.ram == '0 g' %}∞{% else %}{{ plan.ram.rstrip('g') }}{% endif %}{% if plan.bandwidth == 0 %}∞{% else %}{{ plan.bandwidth }} mbits{% endif %} -
- - - Edit - - - - - - - - - - - Delete - - - - - - - -
-
-
-
-
-
-{% else %} -
-
-
-
No Plans
-

No plans or the MySQL service is not running.

-

-

-
- - - - - - - - - -
-
-
-
-{% endif %} - -
- - - - - - - - - - - -