Files
glchat/NOTICE
T
grendervill cebce0ae3b feat(auth): вход через OAuth-провайдеры (GitHub, Google, Discord)
Фаза 7, AGENT.md 7.1: провайдеры включаются переменными окружения
OAUTH_<PROVIDER>_CLIENT_ID/SECRET, привязка внешнего аккаунта идёт по
подтверждённому провайдером email через blind index, вход забаненному на
инстансе запрещён, все входы и привязки попадают в события безопасности,
привязка — ещё и в аудит инстанса.

Внешний идентификатор (subject) хранится только индексом HMAC-SHA-256,
токены провайдеров не сохраняются вовсе; state подписывается ключом сессий
и ограничен по времени, редирект после входа — только внутренний путь.
Если провайдер не настроен, ручка отвечает oauth.provider_not_configured,
а клиент показывает человеческий текст вместо кнопки.

Клиент: кнопки входа по списку включённых провайдеров на экране входа и
раздел «Вход через внешние сервисы» в настройках безопасности; адрес
возврата для настроек приложения виден в GET /auth/oauth/providers.

Миграция 00019 добавляет таблицу oauth_accounts. Установщик и .env.example
знают про OAUTH_* и сохраняют значения при --reconfigure.

Тесты: Go — выключенный провайдер, подписанный state (подмена и чужой
провайдер), создание и повторный вход, привязка к существующему аккаунту,
неподтверждённый email, выключенная регистрация, бан инстанса, mocked
провайдер (httptest) для обмена кода; web — кнопки провайдеров и ошибка
возврата; серверная ручка отдаёт понятный отказ без настроек.
2026-09-26 15:13:24 +03:00

58 lines
4.4 KiB
Plaintext

# NOTICE — атрибуция и сторонние компоненты
glchat — self-hosted платформа общения.
Copyright (C) 2026 glchat contributors.
Лицензия проекта: **AGPL-3.0-or-later** (полный текст — `LICENSE`).
## Архитектурные референсы
Проект использует **архитектурные идеи** следующих проектов. Их исходный код
в glchat не переносился; любые прямые заимствования фрагментов (включая схемы
и тексты) обязаны фиксироваться в этом файле с указанием источника и лицензии.
| Проект | Лицензия | Что используется |
|---|---|---|
| [Spacebar server](https://github.com/spacebarchat/server) | AGPL-3.0 | Архитектурный референс: структура API/Gateway/CDN/voice, сущности, модель прав |
| [Fermo](https://git.sovrahi.com/oh64/Fermo) | AGPL-3.0 | **Только UX/UI-референс.** Код не используется и не форкается (по просьбе автора) |
## Сторонние компоненты
| Компонент | Лицензия | Использование |
|---|---|---|
| [LiveKit](https://github.com/livekit/livekit) (`livekit/livekit-server`) | Apache-2.0 | SFU для голоса, видео и шаринга экрана (Docker-образ) |
| [LiveKit server SDK for Go](https://github.com/livekit/server-sdk-go) | Apache-2.0 | Выдача токенов, RoomService API (фаза 3) |
| [LiveKit Components](https://github.com/livekit/components-js) | Apache-2.0 | UI голосовых комнат в веб-клиенте (фаза 3) |
| [Caddy](https://github.com/caddyserver/caddy) | Apache-2.0 | TLS/Let's Encrypt, reverse proxy (Docker-образ) |
| [chi](https://github.com/go-chi/chi) | MIT | HTTP-роутер (фаза 1) |
| [huma](https://github.com/danielgtaylor/huma) | MIT | Типизированные хендлеры и OpenAPI 3.1 (фаза 1) |
| [goose](https://github.com/pressly/goose) | MIT | Миграции SQLite (embedded) |
| [sqlc](https://sqlc.dev) | MIT | Генерация кода доступа к БД |
| [mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) | MIT | Драйвер SQLite (CGO) |
| [coder/websocket](https://github.com/coder/websocket) | MIT | WebSocket Gateway (фаза 1) |
| [React](https://react.dev) | MIT | Веб-клиент |
| [Vite](https://vite.dev) | MIT | Сборка веб-клиента |
| [Tailwind CSS](https://tailwindcss.com) | MIT | Стили веб-клиента |
| [Radix UI](https://www.radix-ui.com) | MIT | Доступные UI-примитивы |
| [TanStack Query](https://tanstack.com/query) | MIT | Серверное состояние клиента |
| [i18next](https://www.i18next.com) | MIT | Локализация ru/en |
| [age](https://age-encryption.org) (filippo.io/age) | BSD-3-Clause | Шифрование бэкапов |
| [go-webauthn/webauthn](https://github.com/go-webauthn/webauthn) | BSD-3-Clause | Passkeys (WebAuthn): регистрация и вход по ключу (Фаза 7) |
| [golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2) | BSD-3-Clause | OAuth2-провайдеры входа: GitHub, Google, Discord (Фаза 7) |
| [fxamacker/cbor](https://github.com/fxamacker/cbor) | MIT | CBOR для WebAuthn (транзитивная зависимость go-webauthn) |
Полный список Go-зависимостей с версиями — `go.mod`/`go.sum`; JS-зависимостей —
`web/package.json`/`web/package-lock.json`. Совместимость лицензий с AGPL-3.0
проверяется при добавлении каждой зависимости (AGENT.md §15).
## Данные
| Файл | Источник | Лицензия |
|---|---|---|
| `internal/auth/data/leaked-passwords.txt` | [SecLists](https://github.com/danielmiessler/SecLists) `Passwords/Common-Credentials/10k-most-common.txt` | MIT |
## Ассеты
Встроенные звуки, иконки и изображения — только CC0, собственные или
сгенерированные, с фиксацией происхождения в этом файле. Сторонние ассеты
без явной лицензии не используются.