| 12345678910111213141516171819202122232425262728293031 |
- -- 010_sources_secrets.up.sql
- --
- -- M13b W2: add secret + cert-lifecycle fields to public.sources
- -- so the admin UI can issue HMAC + API keys for sources and
- -- (later, in M14) manage mTLS client certs. Until this migration
- -- landed, sources had no DB-side secret storage — the M0 pattern
- -- was to keep secrets in BA_INGESTD_SOURCES env. The new columns
- -- are nullable so rows created before this migration still load.
- --
- -- Storage policy:
- -- hmac_secret_hash: bcrypt of the HMAC secret (cost 10 for
- -- dev/smoke; cost 12 in prod — the secret length is 32 bytes
- -- hex = 64 chars, which is well under bcrypt's 72-byte
- -- limit so no truncation handling is needed).
- -- api_key_hash: bcrypt of the API key. Same cost notes.
- -- mtls_required: when TRUE, ingestd requires a client cert
- -- signed by the company mTLS CA. M14 W2 will check this flag
- -- on every ingest. W2 just stores it; the M14 backend is
- -- the one that actually enforces it.
- -- description: free-text label. Optional but the UI always
- -- shows it on the detail page.
- --
- -- Plaintext is returned to the UI EXACTLY ONCE at create / rotate
- -- time, in a "one-time secrets" payload. After that, only the
- -- hashes are stored. The UI cannot re-fetch the plaintext.
- ALTER TABLE sources
- ADD COLUMN IF NOT EXISTS hmac_secret_hash TEXT,
- ADD COLUMN IF NOT EXISTS api_key_hash TEXT,
- ADD COLUMN IF NOT EXISTS mtls_required BOOLEAN NOT NULL DEFAULT FALSE,
- ADD COLUMN IF NOT EXISTS description TEXT;
|