feat: монорепо миграция, Discover/SearxNG улучшения

- Миграция на монорепозиторий (apps/frontend, apps/chat-service, etc.)
- Discover: проверка SearxNG, понятное empty state при ненастроенном поиске
- searxng.ts: валидация URL, проверка JSON-ответа, авто-добавление http://
- docker/searxng-config: настройки для JSON API SearxNG

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
home
2026-02-20 17:03:43 +03:00
parent c839a0c472
commit 783569b8e7
344 changed files with 28299 additions and 6034 deletions

135
apps/auth-mcs/README.md Normal file
View File

@@ -0,0 +1,135 @@
# Auth Microservice — Identity Provider
Отдельный микросервис аутентификации с поддержкой **SSO**, **LDAP** и **OIDC**. Выступает как единый Identity Provider для регистрации и входа во все приложения вашего ландшафта.
## Возможности
- **Email/пароль** — регистрация и вход
- **LDAP / Active Directory** — вход через корпоративный каталог
- **SSO** — вход через внешние IdP (Okta, Google, Azure AD, Keycloak и др.)
- **OIDC Provider** — этот сервис выступает как IdP для других приложений (Perplexica и др.)
## Быстрый старт
### Локально
```bash
cd auth-microservice
cp .env.example .env
# Отредактируйте .env: BETTER_AUTH_SECRET, BETTER_AUTH_URL
npm install
npm run db:migrate # Создание таблиц БД
npm run dev
```
Сервис доступен по адресу: **http://localhost:3001**
### Docker
```bash
docker compose up -d
```
## Конфигурация
### Обязательные переменные
| Переменная | Описание |
|------------|----------|
| `BETTER_AUTH_SECRET` | Секрет для шифрования (минимум 32 символа). Сгенерируйте: `openssl rand -base64 32` |
| `BETTER_AUTH_URL` | Публичный URL сервиса (например `https://auth.example.com`) |
### LDAP (опционально)
Если заданы переменные LDAP, включается вход через Active Directory / OpenLDAP:
| Переменная | Описание |
|------------|----------|
| `LDAP_URL` | URL LDAP-сервера (`ldap://` или `ldaps://`) |
| `LDAP_BIND_DN` | DN для bind (admin) |
| `LDAP_PASSWORD` | Пароль для bind |
| `LDAP_BASE_DN` | Базовый DN для поиска пользователей |
| `LDAP_USERNAME_ATTR` | Атрибут логина (по умолчанию `uid`) |
| `NEXT_PUBLIC_LDAP_ENABLED` | `true` — показать вкладку LDAP на форме входа |
### Trusted OAuth Clients
Приложения, которые могут использовать этот IdP. Задаётся через `TRUSTED_CLIENTS` (JSON-массив) или `DEFAULT_CLIENT_ID` / `DEFAULT_CLIENT_SECRET`.
## Интеграция приложений
### OIDC Endpoints
```
Authorization: {BETTER_AUTH_URL}/api/auth/oauth2/authorize
Token: {BETTER_AUTH_URL}/api/auth/oauth2/token
UserInfo: {BETTER_AUTH_URL}/api/auth/oauth2/userinfo
Discovery: {BETTER_AUTH_URL}/api/auth/.well-known/openid-configuration
```
### Регистрация клиента
Через API (требуется сессия администратора):
```
POST /api/auth/oauth2/register
Content-Type: application/json
{
"redirect_uris": ["https://myapp.com/callback"],
"client_name": "My Application",
"scope": "openid profile email"
}
```
### Подключение Perplexica
В Perplexica настройте Better Auth как OIDC провайдер:
```ts
// В Perplexica
baseURL: "http://localhost:3001"
// или URL вашего auth-microservice
```
И укажите redirect URL Perplexica в `TRUSTED_CLIENTS` auth-сервиса.
## SSO (вход через внешние IdP)
Чтобы пользователи могли входить через Okta, Google и т.п., зарегистрируйте SSO провайдера:
```ts
await authClient.sso.register({
providerId: "okta",
issuer: "https://your-tenant.okta.com",
domain: "company.com",
oidcConfig: {
clientId: "...",
clientSecret: "...",
}
});
```
## Структура проекта
```
auth-microservice/
├── src/
│ ├── lib/
│ │ ├── auth.ts # Конфигурация Better Auth
│ │ ├── auth-client.ts # Клиент для React
│ │ └── db.ts # SQLite
│ └── app/
│ ├── api/auth/ # API Better Auth
│ ├── sign-in/ # Страница входа
│ ├── sign-up/ # Регистрация
│ └── dashboard/ # Личный кабинет
├── data/ # SQLite (создаётся автоматически)
├── .env.example
├── Dockerfile
└── docker-compose.yaml
```
## Лицензия
MIT