mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
The install one-shot seeds the administrator from ADMIN_PASSWORD and runs only while the first-run marker is absent, so after a credential rotation the account keeps the secret the deployment no longer holds. The playwright trace of the run shows the consequence: the native login never leaves /auth/login. Akaunting ships no first-party command for this. user:seed only invokes a seeder and sets no password, so the realignment goes through artisan tinker, which composer.json lists under require rather than require-dev and is therefore present in the served image. ADMIN_EMAIL and ADMIN_PASSWORD reach it through the environment, never through an argument. The password is assigned in clear text deliberately: App\Models\Auth\User defines setPasswordAttribute, which bcrypts on save, so hashing before assignment would store a hash of a hash. The fourth test case pins that down by asserting the raw value on the model after save. The role had no host/cid resolution at all -- setup/swarm.yml sidesteps it by scaling to zero and running a one-shot service, which is too coarse for a per-run task -- so it gains resolve_host_cid and addresses the container directly. The snippet is not standalone PHP: it carries no opening tag because tinker evaluates what it is given. The mirrored test therefore stubs App\Models\Auth\User and Illuminate\Support\Facades\Hash and evaluates the file, covering the missing user, the missing email, the already-matching password (no save) and the differing one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>