Actions
18 actions, callable from the panel, the command palette and the API as
POST /api/v1/a/<id>. Internal actions used between modules are not listed.
| Action | What it does | Risk | Preview |
|---|---|---|---|
importers.analyze | Pre-flight an account backup | medium | No dry run |
importers.run | Import an analysed backup (dry run or commit) | high | |
importers.upload.chunk | Upload a piece of a backup archive | low | No dry run |
importers.upload.finish | Finish an archive upload | low | No dry run |
importers.upload.abort | Cancel an archive upload | low | No dry run |
importers.rollback | Roll an import back | critical | |
importers.prerequisites | Check what an import needs on its server (read) | low | No dry run |
importers.discard | Discard an analysed backup | low | No dry run |
importers.get | Get an import job (read) | low | No dry run |
importers.list | List import jobs (read) | low | No dry run |
importers.transfer.connect | Connect to another server | medium | No dry run |
importers.transfer.trust | Trust the old server's host key | medium | No dry run |
importers.transfer.discover | List the accounts on the old server (read) | low | No dry run |
importers.transfer.start | Copy accounts from the old server | medium | |
importers.transfer.final | Final pass before the DNS switch | high | |
importers.transfer.checklist | DNS switch checklist (read) | low | No dry run |
importers.transfer.list | List old servers and their transfers (read) | low | No dry run |
importers.transfer.forget | Forget an old server | medium | No dry run |
Permissions and limits
Permissions
importers.manageAnalyse, stage, commit and roll back importsimporters.viewView import jobs and reports
Engineering notes
Generated from modules/importers/docs.md at build f3a3c074. These are the notes the engineers keep
next to the code: precise, technical, and honest about what is not done yet.
Moves accounts in from another panel or another server. Two ways in:
- Backup file (cPanel cpmove, Plesk, DirectAdmin, Hestia, FastPanel):
importers.analyzeunpacks it safely into/var/lib/respirecloud/import/<id>/stage,importers.runcreates everything through the owning modules. - Live transfer ("From another server", w11-28):
importers.transfer.*. The node connects OUT over SSH, only reads, and brings an account into the same staging area; the sameimporters.runthen creates it. Flow:connect(key or password into the vault, host key read through the egress guard) ->trust(a person confirms the fingerprint; pinned) ->discover(panel kind, accounts, sizes, what cannot come over) ->start(dry_run = the plan; first copy, one resumable job per account, a failed one does not stop the others) ->importers.rundry_run/commit ->final(rsync incremental, files synced into the account withos.Root, databases reloaded from a fresh dump, new mail, DNS checklist) ->forget(deletes credentials, pinned key and staged copies).
Safety rules
- Private/loopback sources are refused unless the importers setting
transfer_allowlists them (admin, logged at use; the UI warns). Addresses are resolved once throughinternal/egressand ssh/rsync dial that address. - A different host key than the confirmed one stops the transfer before any command runs.
- Credentials: vault only; passed to the agent per call; rsync gets them through 0600 files in a private directory removed afterwards (key file or SSH_ASKPASS), never on a command line; scrubbed from errors and job logs.
- Source content is hostile: rsync runs with
--safe-links --no-specials --no-devices, no hard links,--chmod=ug-s,-t; staging is re-walked (links leaving the tree, special files removed, set-id cleared, entry/depth/size bounds against the plan's disk quota); the account copy never follows links in the account's home; dumps are loaded only bydatabases.db.importas the account's database user (finding 004); cron lines are listed for review, not created; names are validated as new names; the source account's home comes from the source's owngetent. - Nothing is installed on or changed on the source. Only read commands run there (listed in
internal/agent/transfer.go).
Known limits
Plain Linux is proven end to end. cPanel, Plesk and DirectAdmin are discovered through their documented read-only listings and their accounts' files, databases and DNS zones are pulled directly; mailboxes, passwords and certificates of those panels are not brought over by a live copy (use their backup). Sites whose files live outside the account's home are reported, not copied. Mail sign-in passwords and database users get new passwords (shown once).