Commit Graph

11614 Commits

Author SHA1 Message Date
Master3395
83c8bd10b2 Merge pull request #1763 from master3395/v2.5.5-dev
Email password hardening and adding complex passwords.
2026-04-14 22:13:26 +02:00
master3395
c434aaeb54 harden installer adminPass wrapper behavior
Persist quoted admin password to /etc/cyberpanel/adminPass and tighten wrapper permissions to 700 in installer-generated /usr/bin/adminPass.
2026-04-14 21:57:04 +02:00
master3395
a548f0c042 fix password argument quoting for adminPass flows
Quote admin password arguments during install and harden upgrade rewrites of /usr/bin/adminPass so shell-sensitive characters are preserved instead of expanded.
2026-04-14 21:54:27 +02:00
Master3395
fb1d97758b Merge pull request #1762 from master3395/v2.5.5-dev
V2.5.5 dev Safety update for plugins.
2026-04-13 00:58:03 +02:00
master3395
8a01e013bc docs: note v2.5.5-dev upstream sync and cyberpanel-plugins security ref 2026-04-13 00:55:28 +02:00
master3395
c7995ecf03 Fix missing /usr/local/CyberCP/bin/python for cron and IncBackups
Add plogical/cyberpanel_python.py with resolve_cyberpanel_python() and
ensure_cyberpanel_bin_python_shim() (symlink to system Python when venv
binary is absent). Call shim before writing root crontab on install/upgrade,
and from IncBackups/IncScheduler.py so existing jobs self-heal. IncBackups
views use resolved interpreter for backupUtilities. Upgrade._python_for_manage
delegates to resolve_cyberpanel_python().
2026-04-12 02:54:08 +02:00
Master3395
778de5afd9 Merge pull request #1761 from master3395/v2.5.5-dev
Panel static: sync Django STATIC_ROOT to public/static for LiteSpeed
2026-04-12 02:49:39 +02:00
master3395
3d83fce2c2 Panel static: sync Django STATIC_ROOT to public/static for LiteSpeed
LiteSpeed CyberPanel vhost serves /static/ from public/static while
collectstatic writes to STATIC_ROOT. Merge after collectstatic and ensure
webmail assets so /webmail/ Angular loads. Hook install/upgrade staticContent,
deploy scripts, and upgrade.sh; fix Django --noinput flag; restore lscpd
ownership on public/static after chown root. SnappyMail: require index.php on
install and validate tree after unzip on upgrade.
2026-04-12 02:39:26 +02:00
Master3395
9667ac9dfc Merge pull request #1760 from master3395/v2.5.5-dev
V2.5.5 dev
2026-04-11 23:38:37 +02:00
master3395
f434a23684 fix(upgrade): never reset DB passwords by default; avoid root GRANT IDENTIFIED BY
- recover_database_credentials: read root password from JSON mysqlPassword
  when present; try cyberpanel password from settings.py then FTP/DNS/Postfix
  configs; refuse DROP/CREATE or random passwords unless
  CYBERPANEL_ALLOW_DB_CREDENTIAL_RESET=1 (legacy recovery).
- Pre-upgrade MariaDB: GRANT root privileges without IDENTIFIED BY so the
  existing root password hash is not rewritten.
2026-04-11 23:25:11 +02:00
master3395
6f6f1dcd53 fix(php): OS-specific lsphp install matrix shared install↔upgrade
Add install_utils.get_lsphp_install_suffixes() (Alma 9/10+, EL9+,
Ubuntu 24.04+, Debian 13+ use 74–85; older OS keep 71–85).
installCyberPanel.installAllPHPVersions uses the matrix and installs
every listed lsphp on Ubuntu (fixes 74 skipped by slice).
upgrade.get_available_php_versions loads the same helper from install/.
Extend PHP-FPM restart loops to 8.4/8.5 and CloudLinux list to 85.
Clarify /usr/bin/php symlink priority comments in install.py.
2026-04-11 23:03:26 +02:00
Master3395
72d7d57ccf Merge pull request #1759 from master3395/v2.5.5-dev
docs: third-party AGPL notice for SnappyMail list-unsubscribe plugin
2026-04-11 22:08:05 +02:00
master3395
54513a0327 docs: third-party AGPL notice for SnappyMail list-unsubscribe plugin
Add docs/THIRD_PARTY_NOTICES.md for the bundled list-unsubscribe-header
plugin (AGPL-3.0, upstream GitHub). Link from README. Add CPScripts helper
to sync the plugin from a local snappymail-plugins checkout into install/.
2026-04-11 22:06:09 +02:00
Master3395
4e4693a957 Merge pull request #1758 from master3395/v2.5.5-dev
Version Management: upgrade log polling, progress 0-100%, origin label
2026-04-11 21:49:06 +02:00
master3395
5c89367aeb Restore SnappyMail list-unsubscribe-header plugin step after SnappyMail install
Re-run install_and_enable_list_unsubscribe_header_plugin from plogical.snappymail_plugin_utilities after snappymail_cyberpanel.php; keep bundled plugin under install/snappymail/plugins/.
2026-04-11 21:43:36 +02:00
master3395
de616c0c7c Version Management: upgrade log polling, progress 0-100%, origin label
- upgradeStatus: handle missing log and cat stderr; read upgrade_progress JSON; return progress; remove progress file on completion.
- upgrade.py: ProgressPathNew sidecar, init log/progress at SoftUpgrade start, monotonic progress from log size and 100 on Upgrade Completed, cleanup progress file after soft upgrade.
- upgrade() POST returns progress 0 when upgrade thread starts.
- versionManagment: relabel fork row as Your repository (git origin).
- system-status.js: show Upgrade Progress percentage during polling (3x paths synced via cp).
2026-04-11 21:34:30 +02:00
Master3395
d629da06e5 Merge pull request #1757 from master3395/v2.5.5-dev
V2.5.5 dev
2026-04-11 20:35:10 +02:00
master3395
0519e797f5 Docker Manager: image refresh, history UI, ports in settings
- container.py: optional force_update on image pull/install; saveContainerSettings accepts normalized client ports on recreate; loadContainerHome exposes ports_json for Angular; _normalize_ports_for_save helper.
- manageImages.html: image history modal layout; Refresh control for image pull.
- viewContainer.html: port mappings inside Container Settings; ports_json ng-init; checkbox/toggle/compose CSS fixes; remove standalone Edit Ports modal.
- dockerManager.js (3x): initAngularPortsFromServer, flat DB port map + inspect fallback, portsDirty/saveSettings integration, advanced-env switch checked styles support, refreshContainerInfo, image history formatting helpers.
2026-04-11 20:31:58 +02:00
master3395
ca6cbb7ebd Add Rspamd UI reverse-proxy view and sync mail stack helpers
- Insert rspamd_ui_proxy in emailPremium/views.py with http.client and csrf_exempt imports so /emailPremium/Rspamd/ui matches urls.py (Rspamd 3.8+ controller headers).
- Refresh plogical/mailUtilities.py from tested vendor fixes (Postfix/Dovecot/Rspamd install paths, SnappyMail-related mail flows).
2026-04-11 19:38:27 +02:00
master3395
7306fcb87d Bundle SnappyMail list-unsubscribe-header plugin; enable on install/upgrade
- Add install/snappymail/plugins/list-unsubscribe-header (upstream GitHub plugin)
- Add plogical/snappymail_plugin_utilities.py to copy into snappymail + legacy rainloop data roots and merge enabled_list
- Run after SnappyMail CyberPanel installer in install.py and upgrade.py
- InstallMailBoxFoldersPlugin now merges plugins instead of replacing enabled_list; also installs list-unsubscribe

Roundcube is not shipped by CyberPanel core; SnappyMail is the bundled webmail.
2026-04-11 01:51:09 +02:00
master3395
46c9725715 fix(emailPremium): Rspamd admin UI Angular binding and panel proxy URL
Pass rspamd_ui_url from Rspamd view; safe machineIP read; bootstrap window.app
before controllers; replace invalid {$ errorMessage $} with ng-bind; fix
textareas; clarify HTTPS UI via CyberPanel proxy vs SSH tunnel localhost.
2026-04-11 00:21:14 +02:00
master3395
92acb9a3b8 fix(firewall): pagination ng-show + firewall.js cache bust (cb=11)
ng-if on pagination bars created a child scope so ng-model for Per page and Go to page updated a shadowed copy; handlers read the controller scope — controls appeared to do nothing. Use ng-show instead.

Bump firewall.js query cb after merge with upstream (cb=11) so browsers reload the script.
2026-04-10 21:39:26 +02:00
Master3395
adc70e8bfc Merge pull request #1756 from master3395/v2.5.5-dev
V2.5.5 dev
2026-04-10 20:33:05 +02:00
master3395
6d386da22f Merge upstream/usmannasir v2.5.5-dev into fork (resolve PR #1756 conflicts)
- Take upstream baseTemplate dashboard, mail/process utilities, webauthn, emailPremium.
- Keep fork firewall: rulesLoading/synced JS, trusted-SSH tab, SSH whitelist ban guard.
- Firewall script cache-bust stays cb=6 in index.
2026-04-10 20:32:21 +02:00
master3395
6a52cc54bd Firewall: sync rulesLoading fix to public/static; harden rules fetch; cb=6
Tracked copies (public/static, static) must match firewall/static so the panel serves the fixed JS. Add rulesFetchGen, try/finally, fetchStatus==1, expose populateCurrentRecords on scope.
2026-04-10 19:30:20 +02:00
master3395
9941a09865 Dashboard Top Process: Pause/Resume auto-refresh button 2026-04-10 18:52:20 +02:00
master3395
06a3823c57 Dashboard Top Process: silent refresh, 10s interval, no 2s table flash
Stop tying process list to chart poll; background refresh updates rows
without loading spinner. First load still shows spinner once.
2026-04-10 18:48:53 +02:00
master3395
9ac5a16079 Dashboard SSH pagination: default 3 per page, add 5 option 2026-04-10 18:45:37 +02:00
master3395
7736e0ef95 Dashboard SSH pagination: fix ng-if scope shadowing for per-page and go-to
Use $parent ng-model bindings inside ng-if so values update the controller
scope. Coerce per-page to int in slice math to avoid string concat bugs.
2026-04-10 18:17:18 +02:00
master3395
8db49babae Dashboard SSH: bind tables to paginated arrays so page/per-page works
ng-repeat used full sshLogins/sshLogs while pagination updated
sshLoginsPaginated/sshLogsPaginated; rows never changed.
2026-04-10 18:09:30 +02:00
master3395
8f57463550 SSH trusted IPs: sync UI and analysis with firewall tab
Remove duplicate Trusted IPs management from dashboard Recent SSH Logs;
use actionable alert count on the tab (exclude info-only SSH tips).
Add sshSecurityWhitelistUtilities with normalized IP matching for logs
and analyzeSSHSecurity. Wire whitelist API routes, firewall ban guard,
and login hooks. Firewall tab remains the canonical trusted-IP editor.
2026-04-10 17:53:17 +02:00
master3395
85981f1cac feat: automate OLS+Apache backend provisioning for user-managed domains.
Add a user-management automation flow that enables OLS+Apache backend wiring for website and child-domain creation, including idempotent config updates, health/syntax validation gates, rollback-safe retries, and operator test/documentation assets.
2026-04-10 11:33:54 +02:00
master3395
352eebf0b5 Rspamd: cross-OS installer fixes and proxied Web UI at /emailPremium/Rspamd/ui/
- plogical/mailUtilities: ensure config dirs before writes; fix broken
  post-install indentation; write install success on EL; EL7 uses yum;
  create /etc/yum.repos.d when adding rspamd.repo
- plogical/processUtilities: broader RHEL family detection (Debian ID,
  CentOS Stream, RHEL, Rocky 10, openEuler/Virtuozzo, os-release fallback)
- emailPremium: admin-only reverse proxy to 127.0.0.1:11334; url route
  Rspamd/ui; safe machineIP read; rspamd_ui_url for template
- Rspamd template: primary Open Rspamd Web UI link; action-buttons anchor
  styling; SSH tunnel as alternative
2026-04-10 00:38:38 +02:00
Master3395
f2668e5360 Merge pull request #1755 from master3395/v2.5.5-dev
V2.5.5 dev
2026-04-09 23:35:02 +02:00
Master3395
85571c917d Merge pull request #1755 from master3395/v2.5.5-dev
V2.5.5 dev
2026-04-09 23:35:02 +02:00
master3395
e54a8093c0 docs: clarify Rspamd install log during long InstallRedis step; log install errors 2026-04-09 22:49:38 +02:00
master3395
6e0575093e docs: clarify Rspamd install log during long InstallRedis step; log install errors 2026-04-09 22:49:38 +02:00
master3395
9543c8396e fix: Rspamd installer, Email Delivery migrations, dns sys.path
- mailUtilities: insert CyberCP first on sys.path (dnspython dns shadowing); Rspamd log under /var/log/cyberpanel; log before ServiceManager; dnf on EL8/9; append package stderr
- emailPremium: Rspamd admin UI without cloud addon gate; JsonResponse; fetchRspamdSettings unlocked
- emailDelivery: AutoField PKs; 0001_initial SeparateDatabaseAndState for int FK to loginSystem
2026-04-09 22:39:49 +02:00
master3395
a3dace73bb fix: Rspamd installer, Email Delivery migrations, dns sys.path
- mailUtilities: insert CyberCP first on sys.path (dnspython dns shadowing); Rspamd log under /var/log/cyberpanel; log before ServiceManager; dnf on EL8/9; append package stderr
- emailPremium: Rspamd admin UI without cloud addon gate; JsonResponse; fetchRspamdSettings unlocked
- emailDelivery: AutoField PKs; 0001_initial SeparateDatabaseAndState for int FK to loginSystem
2026-04-09 22:39:49 +02:00
master3395
f9c1c28385 Fix catch-all bootstrap when e_catchall is missing.
Add runtime table self-healing for catch-all/plus/pattern email features and make upgrade SQL idempotent on existing latin1 installations by avoiding failing FK creation while preserving forwarding compatibility.
2026-04-09 13:42:03 +02:00
master3395
90fd3b7dfb Fix catch-all bootstrap when e_catchall is missing.
Add runtime table self-healing for catch-all/plus/pattern email features and make upgrade SQL idempotent on existing latin1 installations by avoiding failing FK creation while preserving forwarding compatibility.
2026-04-09 13:42:03 +02:00
master3395
50ec386376 Fix missing email UI controllers in public mailServer bundle.
Restore catch-all, plus-addressing, pattern-forwarding, and email-limits controllers in the public static JS so CyberPanel email management pages no longer fail with Angular controller registration errors.
2026-04-09 12:55:43 +02:00
master3395
5840456abf Fix missing email UI controllers in public mailServer bundle.
Restore catch-all, plus-addressing, pattern-forwarding, and email-limits controllers in the public static JS so CyberPanel email management pages no longer fail with Angular controller registration errors.
2026-04-09 12:55:43 +02:00
Master3395
f6dd9a4884 Merge pull request #1754 from master3395/v2.5.5-dev
V2.5.5 dev
2026-04-07 18:55:21 +02:00
Master3395
a2ee765134 Merge pull request #1754 from master3395/v2.5.5-dev
V2.5.5 dev
2026-04-07 18:55:21 +02:00
master3395
f09f7b96b9 DNS: stop auto-creating duplicate DMARC TXT records
CyberPanel previously added _dmarc at the apex (p=none) in two code paths and _dmarc on every child subdomain, which conflicts with a single externally managed policy (e.g. Cloudflare) and violates RFC 7489 (one TXT RRset per name). Comment out automatic DMARC creation so operators set one record at _dmarc.<apex> only.
2026-04-07 18:50:16 +02:00
master3395
facd84fec2 DNS: stop auto-creating duplicate DMARC TXT records
CyberPanel previously added _dmarc at the apex (p=none) in two code paths and _dmarc on every child subdomain, which conflicts with a single externally managed policy (e.g. Cloudflare) and violates RFC 7489 (one TXT RRset per name). Comment out automatic DMARC creation so operators set one record at _dmarc.<apex> only.
2026-04-07 18:50:16 +02:00
master3395
385a108014 Fix OLS+Apache child domains: DNS CF sync, ACME paths, subdomain creation UX
- dnsUtilities: correct createDNSRecordCloudFlare argument order (priority, ttl)
- vhostConfs/ApacheVhosts: OLSLBConf uses real docRoot and acme-challenge path for child vhosts (vhRoot is parent domain)
- virtualHostUtilities: defer ChildDomains save until after SSL/Apache; cleanup ORM row on failure; createDomain CLI exits 0/1 with 1,/0, stdout
- websiteFunctions: submitDomainCreation waits on subprocess and returns failure JSON on error
2026-04-06 01:48:35 +02:00
master3395
3308233959 Fix OLS+Apache child domains: DNS CF sync, ACME paths, subdomain creation UX
- dnsUtilities: correct createDNSRecordCloudFlare argument order (priority, ttl)
- vhostConfs/ApacheVhosts: OLSLBConf uses real docRoot and acme-challenge path for child vhosts (vhRoot is parent domain)
- virtualHostUtilities: defer ChildDomains save until after SSL/Apache; cleanup ORM row on failure; createDomain CLI exits 0/1 with 1,/0, stdout
- websiteFunctions: submitDomainCreation waits on subprocess and returns failure JSON on error
2026-04-06 01:48:35 +02:00
master3395
2077692a73 fix(dns): delete all Cloudflare DNS records for child subdomains
When removing a child domain, matching only the apex label (e.g. vscode)
left mail.* and www.* (and MX/TXT/DMARC) records in the parent zone.
Normalize record names to FQDN under the zone and delete the subdomain
FQDN plus any names under it.
2026-04-06 00:57:12 +02:00