refactor: убрать вход через внешние провайдеры (OAuth) полностью
Решение владельца 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 как отменённые.
This commit is contained in:
@@ -12,11 +12,7 @@ type Features struct {
|
||||
VoiceURL string `json:"voice_url,omitempty"`
|
||||
WebPushEnabled bool `json:"web_push_enabled"`
|
||||
UnfurlEnabled bool `json:"unfurl_enabled"`
|
||||
OAuthEnabled bool `json:"oauth_enabled"`
|
||||
PasskeysEnabled bool `json:"passkeys_enabled"`
|
||||
// OAuthProviders — включённые провайдеры входа (id): клиент рисует по
|
||||
// списку кнопки, выключенные не показывает (Фаза 7).
|
||||
OAuthProviders []string `json:"oauth_providers"`
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
@@ -52,9 +48,7 @@ func New(cfg config.Config) Response {
|
||||
VoiceURL: cfg.LiveKitURL,
|
||||
WebPushEnabled: cfg.WebPushEnabled(),
|
||||
UnfurlEnabled: cfg.UnfurlEnabled,
|
||||
OAuthEnabled: cfg.OAuthEnabled(),
|
||||
PasskeysEnabled: cfg.WebAuthnEnabled(),
|
||||
OAuthProviders: cfg.OAuthProviders(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ func TestJSONUsesSnakeCaseKeys(t *testing.T) {
|
||||
if !ok {
|
||||
t.Fatalf("features is not an object: %s", raw)
|
||||
}
|
||||
for _, key := range []string{"registration_enabled", "anti_bot_enabled", "voice_enabled", "web_push_enabled", "oauth_enabled", "passkeys_enabled"} {
|
||||
for _, key := range []string{"registration_enabled", "anti_bot_enabled", "voice_enabled", "web_push_enabled", "passkeys_enabled"} {
|
||||
if _, ok := features[key]; !ok {
|
||||
t.Errorf("features is missing key %q", key)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user