a48b865bc9
Решение владельца 27.09.2026 (D-084): сервис ставится на сервер конкретного человека, и ему всё равно нужен свой OAuth у провайдера — поддержка общего входа только создаёт трение (регистрация приложений, redirect URI, модерация, чужие ключи в конфиге). Способы входа остаются: пароль + 2FA и ключи доступа (WebAuthn). Удалено: - сервер: internal/auth/oauth.go, internal/server/oauth.go, internal/store/oauth.go и их тесты; поля и методы конфига OAuth*; oauthLimiter и регистрация ручек; отображение ошибок oauth.*; features.oauth_enabled/oauth_providers в /meta; - клиент: web/src/api/oauth.ts, раздел «Вход через внешние сервисы», кнопки провайдеров на странице входа, ключи i18n (ru/en), тесты и фикстуры; - установщик: переменные OAUTH_* из .env, .env.example и шаблона (хелпер чтения существующих значений переименован в existing_value — он остался нужен для VAPID_SUBJECT); - зависимость golang.org/x/oauth2 (go mod tidy). Схема: миграция 00027 удаляет таблицу oauth_accounts (00019 не переписываем — она применена на стендах). Откат миграции возвращает структуру; тест TestOAuthRemovalMigration проверяет накат, откат и повторный накат. AGENT.md (локальный) помечает пункты про OAuth как отменённые.
29 lines
2.0 KiB
SQL
29 lines
2.0 KiB
SQL
-- +goose Up
|
|
-- Вход через внешние провайдеры (OAuth) удалён по решению владельца
|
|
-- 27.09.2026: самодостаточному инстансу «на своём сервере» он не нужен, а
|
|
-- оператору пришлось бы заводить отдельное приложение у каждого провайдера
|
|
-- (свой client id/secret, свои redirect URI, модерация) — слишком много
|
|
-- трения ради способа входа, который дублирует пароль и ключи доступа.
|
|
-- Решение и разбор — D-084.
|
|
--
|
|
-- Таблица осталась от Фазы 7 (миграция 00019, её не переписываем: она уже
|
|
-- применена на стендах), кода, который её читает, больше нет. Данные в ней
|
|
-- могли быть только у инсталляций, которые реально включали OAuth; на наших
|
|
-- стендах провайдеры ни разу не настраивались, поэтому удаление безопасно.
|
|
DROP TABLE IF EXISTS oauth_accounts;
|
|
|
|
-- +goose Down
|
|
-- Откат возвращает структуру таблицы (пустую): сам код входа лежит в истории
|
|
-- git, повторное включение потребует и его, и новые ключи провайдеров.
|
|
CREATE TABLE IF NOT EXISTS oauth_accounts (
|
|
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)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS oauth_accounts_user_idx ON oauth_accounts (user_id);
|