env('PHAROS_SETUP_KEY'), // Set at build time from the git tag; never bumped by hand in two places. // The number that ships with the code. An update replaces this file, which is // how an install learns its new version — .env is deliberately never replaced, // so a value pinned there would survive the upgrade and make the same release // be offered for ever. The override exists for Docker, where the host owns the // image and the app never updates itself. 'version' => env('PHAROS_VERSION', '1.1.0'), // Ed25519 public key, hex. Signs both licence keys and update manifests, // with a different purpose field so one can never be replayed as the other. // // Shipped as the default on purpose: this is the public half, and a customer // who has to paste it into .env before their paid key verifies has a broken // install that looks like a broken licence. The env var stays so a fork can // sign with its own keypair. `?:` rather than env()'s own default: a bare // `PHAROS_LICENSE_PUBLIC_KEY=` line left in .env is "" and "" is a value, // so the default would never apply and every paid key would be refused. 'license_public_key' => env('PHAROS_LICENSE_PUBLIC_KEY') ?: '68d158ba363853e3b64efa7c2082015d198db31a4a039f05a24d3bbd93308ff2', 'update' => [ // Where the signed manifest lives. Empty switches update checking off. 'manifest_url' => env('PHAROS_UPDATE_URL', 'https://pharos.solutionmax.net/releases/latest.json'), // Settings → General overrides this and the two below once saved (InstallSettings). 'check_enabled' => env('PHAROS_UPDATE_CHECK', true), // Written by the Docker entrypoint to mark external ownership; absent on shared // hosting, which is how the app knows which world it is in. 'status_file' => storage_path('app/ota/update-status.json'), // Where a self-update parks the version it replaces. 'backups_dir' => storage_path('app/backups'), // How many backups to keep; the oldest go when a new one is made. 0 keeps everything. 'keep_backups' => (int) env('PHAROS_KEEP_BACKUPS', 3), // What "Back up now" copies. Null means the application itself; only the // test suite points it at a small stand-in tree. 'backup_source' => null, ], // How long the audit trail keeps a line. Long enough to answer "who // changed that, and when" months later; short enough that the table does // not grow without end on shared hosting. 'audit_days' => (int) env('PHAROS_AUDIT_DAYS', 180), // How long raw check results are kept. Uptime figures come from the daily // roll-up and never read them; only the beat strip does (the last 40 runs). // 40 days because the slowest allowed check interval is a day, which makes // 40 runs 40 days. The newest result of every component is always kept. 'check_result_days' => (int) env('PHAROS_CHECK_RESULT_DAYS', 40), // Never hardcode these in views: moving to a real domain must stay a .env edit. // Vendor side only: where the Ed25519 secret lives for pharos:license:sign / release:sign. 'license_secret_file' => env('PHAROS_LICENSE_SECRET_FILE'), 'buy_url' => env('PHAROS_BUY_URL', 'https://pharos.solutionmax.net/#pricing'), // Portal checkout per plan: {portal_buy_url}/brand-pack, /supported. // Prices live in the shop, never in the app. 'portal_buy_url' => env('PHAROS_PORTAL_BUY_URL', 'https://pharos.solutionmax.net/account/buy'), // The commercial licence is quoted individually (see legal.html), not sold at checkout. 'quote_url' => env('PHAROS_QUOTE_URL', 'mailto:mail@solutionmax.net?subject=Pharos%20commercial%20licence'), 'docs_url' => env('PHAROS_DOCS_URL', 'https://pharos.solutionmax.net/docs'), ];