Files
NixReaper 2ac1adcdbb
Security Audit / Rust Security Audit (push) Canceled after 0s
Security Audit / ShellCheck (push) Canceled after 0s
feat: v0.4.0-alpha — MySQL/MariaDB database manager
Backend:
- routes/databases.rs: full CRUD for MariaDB databases + users
  - mysql -u root via stdin pipe (unix socket auth, API runs as root)
  - cPanel-style naming: username_dbname / username_dbuser
  - Identifier validation (alphanumeric + underscore only)
  - Password escaping for mysql string literals
  - Safety guard: refuses to drop DBs without account prefix
  - GET /api/databases (admin all), GET /api/databases/:username (per-account)
  - POST /api/databases (create DB + user + GRANT ALL + nixpanel record)
  - DELETE /api/databases/name/:db_name (drop DB + user + nixpanel record)
- routes/mod.rs: add databases module
- main.rs: register database routes

NixServer:
- DatabaseManager page: table across all accounts, create form with
  account selector + live name preview, drop with confirmation modal

NixClient:
- MySQLDatabases page: per-account view, create form with password
  confirm + connection-details card, drop with confirmation modal
- api.ts: listMyDatabases, createDatabase, deleteDatabase

CHANGELOG.md: v0.4.0-alpha entry
Cargo.toml: version bump 0.3.0-alpha -> 0.4.0-alpha
2026-04-26 06:01:23 -05:00

8.7 KiB

Changelog

All notable changes to NixPanel are documented here.
Format follows Keep a Changelog.
Versions follow Semantic Versioning.


Unreleased

Planned

  • SSL certificate management (Let's Encrypt via Certbot)
  • File manager
  • FTP account management (vsftpd)
  • WordPress one-click installer
  • Backup / restore system
  • Firewall rule editor (CSF/iptables)
  • Multi-server support (Agency plan)
  • NixClient pages: FTP, subdomains, redirects, PHP version selector, stats

0.4.0-alpha — 2026-04-26

Added

  • MySQL / MariaDB database manager
    • GET /api/databases — list all databases across all accounts (admin)
    • GET /api/databases/:username — list databases for one hosting account
    • POST /api/databases — create database + dedicated MariaDB user with GRANT ALL
    • DELETE /api/databases/name/:db_name — drop database + user, cascade nixpanel record
    • cPanel-style namespacing: username_dbname / username_dbuser (max 64/32 chars)
    • Identifier validation (alphanumeric + underscore only)
    • Live connection-details preview in the create form (database, username, host, port)
    • Safety check: refuses to drop databases without the account prefix separator
  • NixServer — Databases page: admin view across all accounts, create form with live preview, drop with confirmation modal
  • NixClient — MySQL Databases page: per-account view, create with password confirm + connection-info card, drop with confirmation

Changed

  • NixServer/NixClient footer version: v0.3.0-alpha → v0.4.0-alpha

0.3.0-alpha — 2026-04-25

Added

  • DNS Management — full CRUD via pdnsutil
    • GET /api/dns — list all PowerDNS zones
    • GET /api/dns/:domain — list records (A, AAAA, MX, TXT, CNAME, NS, SRV, CAA)
    • POST /api/dns/:domain — add record (name, type, TTL, content)
    • DELETE /api/dns/:domain — delete an RRset (name + type)
    • SOA records hidden; zone auto-rectified after each change
  • NixServer — Zone Manager page (domains): lists all PowerDNS zones, click → DNS editor
  • NixServer — DNS Records page (dns): record table with inline add/delete, zone switcher dropdown, colour-coded type badges
  • NixServer — Service Manager page (services): dedicated page with refresh button and running/stopped summary pills
  • NixServer — Account actions: Suspend / Unsuspend / Terminate buttons with confirmation modal
    • POST /api/accounts/:username/suspend / unsuspend
    • DELETE /api/accounts/:username — deprovisions vhost, FPM, DNS; removes system user; cascades DB records
  • Email account management
    • GET /api/email/:username — list email accounts for a hosting account
    • POST /api/email — create mailbox (Maildir provisioned under ~/mail/)
    • DELETE /api/email/id/:id — delete email account
  • NixClient — Email Accounts page — create, list, delete mailboxes with quota display
  • NixClient — Domains page — shows primary domain, document root, quota, bandwidth
  • NixClient — Change Password page — verifies current password, hashes and updates both users and accounts tables
  • NixClient — AccountSidebar now fetches real account data (domain, package, quota) from GET /api/accounts/:username
  • Password change API — POST /api/me/password (verifies old password via Argon2id, updates users + accounts)
  • Single account lookup — GET /api/accounts/:username

Changed

  • NixServer footer / login version bump: v0.2.0-alpha → v0.3.0-alpha
  • NixClient footer / login version bump: v0.2.0-alpha → v0.3.0-alpha
  • List Accounts: domain cell links to site, suspend/terminate replace placeholder Edit button

0.2.0-alpha — 2026-04-25

Added

  • Rust backend — Cargo workspace with independently compiled + UPX-compressed section executables
    • nixpanel-common — shared SectionRequest / SectionResponse IPC types
    • nixpanel-api — main Axum HTTP server on port 4000
      • POST /api/auth/login — Argon2id password verification, HS256 JWT (8-hour expiry)
      • GET /api/dashboard — real account/domain/database/email counts + system stats
      • GET /api/services — live service status via systemctl
      • POST /api/services/:name/:action — start / stop / restart any managed service
      • GET /api/accounts — list hosting accounts from MariaDB
      • POST /api/accounts — create account (system user, home dir, DB record)
      • Auto-runs DB schema migrations on first start
      • Seeds admin user from /opt/nixpanel/.admin_user + .admin_pass on first run
    • nixpanel-services — section binary; reads JSON from stdin, calls systemctl, writes JSON to stdout
      • Actions: list, start, stop, restart, reload
      • Reports PID and uptime per service
    • nixpanel-sysinfo — section binary; reads /proc/meminfo, /proc/stat, /proc/loadavg, df
      • Actions: stats (CPU, RAM, disk, load, hostname, IP, OS, kernel), versions (Apache, PHP, MariaDB)
  • Database schema (nixpanel-api/migrations/0001_initial.sql)
    • Tables: users, accounts, domains, dns_records, account_databases, email_accounts, ftp_accounts, ssl_certificates, backups
  • Frontend API clients (nixserver/src/api.ts, nixclient/src/api.ts)
    • JWT stored in localStorage, included in all requests as Authorization: Bearer
    • Auto-clears token and reloads on 401

Changed

  • NixServer UI — full redesign matching WHM visual style
    • Dark navy / orange-accent theme
    • Collapsible sidebar with grouped navigation sections
    • Dashboard: live stat bar, server info bar, service manager table, quick-action icon grid
    • List Accounts: real data table with search/filter
    • Create Account: full form wired to API (creates system user, DB record)
    • Login: real JWT auth; session persists across refresh via localStorage
  • NixClient UI — full redesign matching cPanel visual style
    • Blue-accent theme
    • Feature icon grid grouped by category with live search
    • Account sidebar with usage bars
    • Login: real JWT auth
  • Installer (install.sh)
    • Rust build step now copies all nixpanel-* section binaries to /opt/nixpanel/bin/
    • Installs UPX and compresses each binary after build
    • Admin credentials auto-generated with openssl rand (no TTY prompts)
    • Node.js 20 LTS installed as its own idempotent step (nodejs.done)
    • NixClient build uses absolute path to avoid wrong-directory check
    • npm output visible during build (removed --silent) for easier debugging
  • Vite configs — added /api proxy to localhost:4000 for local development
  • Minifier — switched both UIs from terser (not installed) to esbuild

Fixed

  • Login inputs changed from type="email" to type="text" with "Username" label
  • sqlx::query!() macros replaced with non-macro query() / query_as() / query_scalar() so the binary compiles without a live database connection
  • Removed axum_extra import that was never added to Cargo.toml
  • Git clone always removes stale $SRC_DIR before cloning (fixes "couldn't find remote ref master" on re-run)

0.1.0-alpha — 2025-04-25

Added

  • Installer (install.sh) — fully automated Ubuntu 24.04 installer
    • Self-updating: always fetches the latest version from GitHub before running
    • Idempotent step tracking — re-runnable after failures without redoing completed steps
    • Installs Apache 2, PHP 8.2 + 8.3 (via ondrej/php PPA), MariaDB, PowerDNS, Exim 4, Dovecot, SpamAssassin, Fail2ban, Certbot
    • Configures Apache reverse proxy on ports 2083 (NixClient) and 2087 (NixServer)
    • Generates admin credentials automatically; displays them in the completion banner
    • License activation against https://license.nixpanel.io
  • NixServer — WHM-style admin panel (React 18 + TypeScript + Tailwind + Vite, port 2087)
  • NixClient — cPanel-style user panel (React 18 + TypeScript + Tailwind + Vite, port 2083)
  • Licensing — license key validated against https://license.nixpanel.io during install
    • Plans: Free, Solo ($9.99/mo), Host ($29.99/mo), Agency ($79.99/mo)
  • Infrastructure — .gitattributes enforcing LF line endings