config/pharos.php
Rama main · réplica de lectura del repositorio original.
<?php
return [
'setup_key' => 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'),
];