22 lines
963 B
MySQL
22 lines
963 B
MySQL
|
|
-- Migration: 006 – Service tokens for external notification senders
|
|||
|
|
-- Database: PostgreSQL
|
|||
|
|
--
|
|||
|
|
-- Service tokens allow external services (CI/CD, monitoring, admin scripts) to
|
|||
|
|
-- POST /api/notify without a full user JWT. Each token is identified by a
|
|||
|
|
-- SHA-256 hash so the plaintext is never stored after creation.
|
|||
|
|
|
|||
|
|
CREATE TABLE IF NOT EXISTS service_tokens (
|
|||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|||
|
|
name TEXT NOT NULL,
|
|||
|
|
token_hash TEXT NOT NULL UNIQUE,
|
|||
|
|
created_by UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|||
|
|
scopes TEXT[] NOT NULL DEFAULT '{"notify"}',
|
|||
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|||
|
|
last_used_at TIMESTAMPTZ,
|
|||
|
|
expires_at TIMESTAMPTZ,
|
|||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
CREATE INDEX IF NOT EXISTS idx_service_tokens_hash ON service_tokens(token_hash) WHERE is_active;
|
|||
|
|
CREATE INDEX IF NOT EXISTS idx_service_tokens_creator ON service_tokens(created_by);
|