Raise default CYBERCP_MANAGED_APPS version cache TTL to 3600s to match
Manage Applications inventory behavior and reduce cold DNF fetches.
Refresh application_page_meta and synced manageServices static assets.
Add modular application packages with backup-aware install/upgrade/downgrade,
DNF-backed version lists with TTL caching, and HTML bootstrap for faster loads.
Improve the version picker (labels, selection state, background meta refresh) and
route applicationMeta through shared page meta cache. Update static assets and
cache buster for manageServices.js. Repository also includes related updates to
serviceManager, upgrade tooling, website functions, and user management from this
development tree.
populateCurrentRecords() always showed Users successfully fetched on every
successful fetch, so delete/edit/ACL/suspend showed two popups. Add optional
suppressSuccessNotify; use silent refresh after mutations and on initial load.
- Initialize selectedACL in create user template so JSON POST always includes ACL
- Explicit option values; pass default_acl_name from view for ng-init
- Coerce websitesLimit to int; validate selectedACL before ACL.objects.get
- ensure_csrf_cookie on createUser page load
- Optional /etc/cyberpanel/csrf_trusted_origins for HTTPS IP:port panels
- Allow changeUserACL on getUserHomeDirectories (parity with create user page)
- Sync public/static and static copies of userManagment.js with app static
- Resolve FTP home paths without duplicating /home/domain; support absolute paths under site home
- Add changeFTPDirectory API and list UI; improve create form path help
- Add setFTPAccountStatus (Status 0/1) with Enable/Disable on list page
- Pure-FTPd MySQL: require Status='1' for authentication in install templates
- Plugin signals for change directory and account status
- Delete record: confirmation dialog and local backup before delete
- Clear all DNS records: double confirmation (zone name), local backup, Restore button
- Export/Import DNS records (JSON) for zone
- Check orphan DNS: find A/AAAA/CNAME for hostnames no longer in panel, remove with backup
- Backend: getExportRecordsCloudFlare, clearAllDNSRecordsCloudFlare, importDNSRecordsCloudFlare, getStaleDNSRecordsCloudFlare, removeStaleDNSRecordsCloudFlare
- CyberCP/urls.py: when emailMarketing app is missing/broken, register placeholder path with name='emailMarketing' so {% url 'emailMarketing' %} never raises Reverse not found.
- public/static/baseTemplate/custom-js/system-status.js: replace old copy with full system-status.js that registers dashboardStatsController and systemStatusInfo (fixes Angular [:ctrlreg] and raw {{$ cpuUsage $}} on overview).
- Add updateDNSRecordCloudFlare backend (dnsManager, view, URL)
- Return real priority in getCurrentRecordsForDomainCloudFlare
- Edit (pencil) button + modal with all fields; Save calls update API
- openEditModal, closeEditModal, saveEditRecord in dns.js
modifyWebsite.html uses | filesize for home directory available_space;
filter was missing, causing $injector/unpr FilesizeFilterProvider.
Register app.filter('filesize') with array annotation in all websiteFunctions.js copies.
- Search input: add firewall-search-input class, blue focus instead of red (avoids read-only/error look)
- Search button: use btn-search with round futuristic style (match Ban IP/Overview)
- Actions column: center Modify/Unban/Delete in Firewall Rules and Banned IPs tables
- system-status.js: increment() uses document.querySelectorAll (no jQuery), fixes $ is not defined
- upgrade_modules/09_sync.sh: sync firewall static to public/static during upgrade
- to-do/FIREWALL-LOAD-CHANGES.md: doc on file locations and deploy steps
- plogical/acl.py: use config.get() for DNS permissions so old ACLs without
deleteZone key do not cause KeyError
- baseTemplate: add deleteZone/addDeleteRecords CSS classes to DNS menu links
for correct permission-based hiding
- system-status.js: fix swapped selectors (deleteZone hides .deleteZone,
addDeleteRecords hides .addDeleteRecords instead of .deleteDatabase)
- Fix ReferenceError: use $timeout instead of timeout, store timer for cancel
- Add v2.5.5-dev to Select Branch dropdown (remove dev filter)
- Limit branch list to latest 10 by version
- Fix Upgrade Progress Log text visibility (light text on dark bg)
- Create User: Don't show 'Unknown error' on load; fix inverted success/failure
logic in static/ and public/static/ userManagment.js
- List Users: Use <button> for Edit/Delete/Suspend/Activate; add showModalById/
hideModalById for Bootstrap 3/5; fix public/static missing modal show calls
- Modify User: Fix inverted canotModifyUser/canotFetchDetails in all three
userManagment.js copies; hide modify error when only fetching details
- Add deploy-createuser-fix.sh to copy fixed JS and run collectstatic on server
- Add GET /docker/containers for HTML page; GET /docker/listContainers redirects there
- POST /docker/listContainers returns 405 (page uses getContainerList for data)
- Remove duplicate listContainers Angular controller; fix pagination (getContainerList)
- Extend getContainerList API: totalCount, totalPages, currentPage, itemsPerPage
- Add ACTIVITY BOARD-style pagination: Prev/Next, Go to page, Showing X–Y of Z
- Update menu/templates/JS redirects to /docker/containers
- Sync dockerManager.js across app static, STATIC_ROOT, public/static
- Cache-Control on HTML response; cache-bust script ?v=4
Fixes raw JSON instead of UI when loading /docker/listContainers (cache/proxy
serving stored JSON for GET). Use /docker/containers for the page.
- Enhanced module check to first try window.app before falling back to angular.module
- Ensures createWordpress controller can register properly
- Fixes [$controller:ctrlreg] error for createWordpress controller
- Applied to all websiteFunctions.js file locations
- Remove auto-refresh timeout (3 seconds) from topProcesses page
- Add manual refresh button in page header
- Fix double percentage signs (%% -> %) in CPU Time Distribution
- Remove duplicate serverStatus.js script loading in footer_scripts block
Changes:
- Removed $timeout($scope.topProcessesStatus, 3000) from serverStatus.js
- Removed extra % sign from template (backend already includes % in values)
- Added refresh button with loading state indicator