2026-09-26 15:13:24 +03:00
|
|
|
-- +goose Up
|
|
|
|
|
-- Фаза 7: OAuth-провайдеры (AGENT.md 7.1).
|
|
|
|
|
--
|
|
|
|
|
-- Связь внешнего аккаунта с пользователем инстанса. Внешний идентификатор
|
|
|
|
|
-- (subject) хранится только как blind index (HMAC-SHA-256 от
|
|
|
|
|
-- "provider:subject"), email — тоже индексом: сырых PII в таблице нет
|
|
|
|
|
-- (AGENT.md 9.2). Токены провайдеров не сохраняются вовсе: они нужны только
|
|
|
|
|
-- на время обмена кода на профиль.
|
2026-09-26 15:16:34 +03:00
|
|
|
--
|
|
|
|
|
-- `IF NOT EXISTS` — страховка от частично применённой миграции: на стенде
|
|
|
|
|
-- таблицу успела создать промежуточная редакция 00018 (в ней обе таблицы
|
|
|
|
|
-- жили вместе), и без этого инстанс не поднимался после обновления.
|
2026-09-26 15:13:24 +03:00
|
|
|
|
2026-09-26 15:16:34 +03:00
|
|
|
CREATE TABLE IF NOT EXISTS oauth_accounts (
|
2026-09-26 15:13:24 +03:00
|
|
|
id INTEGER PRIMARY KEY,
|
|
|
|
|
user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
|
|
|
|
|
provider TEXT NOT NULL,
|
|
|
|
|
subject_index TEXT NOT NULL,
|
|
|
|
|
email_index TEXT NOT NULL DEFAULT '',
|
|
|
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
|
|
|
last_login_at TEXT,
|
|
|
|
|
UNIQUE (provider, subject_index)
|
|
|
|
|
);
|
2026-09-26 15:16:34 +03:00
|
|
|
CREATE INDEX IF NOT EXISTS oauth_accounts_user_idx ON oauth_accounts (user_id);
|
2026-09-26 15:13:24 +03:00
|
|
|
|
|
|
|
|
-- +goose Down
|
2026-09-26 15:16:34 +03:00
|
|
|
DROP TABLE IF EXISTS oauth_accounts;
|