code-review-agent/docs/MASTER_TOKEN_FEATURE.md

300 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔑 Мастер токены для Git платформ
## 📋 Описание
Теперь можно настроить **мастер токены** в `.env` файле. Эти токены будут использоваться для всех репозиториев, где **не указан** собственный API токен.
---
## ⚙️ Как настроить
### 1. Добавьте в `.env`
```bash
# Master Git Tokens (optional)
MASTER_GITEA_TOKEN=your_gitea_token_here
MASTER_GITHUB_TOKEN=your_github_token_here
MASTER_BITBUCKET_TOKEN=your_bitbucket_token_here
```
### 2. Перезапустите backend
```bash
cd backend
./start.bat # или ./start.sh на Linux/Mac
```
---
## 🎯 Как работает
### Логика выбора токена:
1. **Если у репозитория ЕСТЬ свой токен** → используется токен репозитория
2. **Если у репозитория НЕТ токена** → используется мастер токен из `.env`
3. **Если и мастер токен не настроен** → ошибка
### Приоритет:
```
Токен репозитория > Мастер токен > Ошибка
```
---
## 🔍 Примеры использования
### Вариант 1: Один токен для всех
**Сценарий:** Все ваши проекты находятся в одной Gitea инстанции
**.env:**
```bash
MASTER_GITEA_TOKEN=abc123xyz789
```
**Создание репозитория (без токена):**
```json
POST /api/repositories
{
"name": "my-project",
"platform": "GITEA",
"url": "https://git.example.com/user/my-project"
// api_token НЕ указан
}
```
✅ Будет использован `MASTER_GITEA_TOKEN`
---
### Вариант 2: Разные токены для разных проектов
**Сценарий:** У некоторых проектов особые требования к доступу
**.env:**
```bash
MASTER_GITEA_TOKEN=default_token_123
```
**Репозиторий 1 (использует мастер токен):**
```json
{
"name": "project-a",
"platform": "GITEA",
"url": "https://git.example.com/user/project-a"
// api_token НЕ указан → использует MASTER_GITEA_TOKEN
}
```
**Репозиторий 2 (свой токен):**
```json
{
"name": "project-b",
"platform": "GITEA",
"url": "https://git.example.com/user/project-b",
"api_token": "special_token_456" // Указан свой токен
}
```
`project-a` использует мастер токен
`project-b` использует свой токен
---
### Вариант 3: Несколько платформ
**.env:**
```bash
MASTER_GITEA_TOKEN=gitea_token_123
MASTER_GITHUB_TOKEN=github_token_456
MASTER_BITBUCKET_TOKEN=bitbucket_token_789
```
**Репозитории:**
```json
// Gitea - использует MASTER_GITEA_TOKEN
{
"platform": "GITEA",
"url": "https://git.example.com/user/repo1"
}
// GitHub - использует MASTER_GITHUB_TOKEN
{
"platform": "GITHUB",
"url": "https://github.com/user/repo2"
}
// Bitbucket - использует MASTER_BITBUCKET_TOKEN
{
"platform": "BITBUCKET",
"url": "https://bitbucket.org/user/repo3"
}
```
---
## 🔒 Безопасность
### ⚠️ Важно:
- Мастер токены **НЕ шифруются** в `.env` (они должны быть читаемыми для приложения)
- Токены репозиториев **шифруются** перед сохранением в БД
- **НЕ коммитьте** `.env` файл в Git!
- Используйте `.env.example` как шаблон
### Права токенов:
Убедитесь что токены имеют необходимые права:
**Для Gitea/GitHub/Bitbucket:**
- ✅ Чтение репозитория
- ✅ Чтение PR
- ✅ Создание комментариев
---
## 📊 Логирование
При запуске ревью вы увидите какой токен используется:
```
📋 ИНФОРМАЦИЯ О PR
...
🔑 Используется мастер gitea токен
```
или
```
🔑 Используется проектный токен
```
---
## 🎨 Изменения в UI
### Форма создания репозитория:
**Было:**
```
API Token: [обязательное поле]
```
**Стало:**
```
API Token: [необязательное поле]
Подсказка: Оставьте пустым чтобы использовать мастер токен
```
---
## 📝 Примеры из логов
### С мастер токеном:
```
📤 Публикация ревью в Gitea PR #5
Комментариев: 4
🔑 Используется мастер gitea токен
✅ Комментарий опубликован!
```
### С проектным токеном:
```
📤 Публикация ревью в Gitea PR #5
Комментариев: 4
🔑 Используется проектный токен
✅ Комментарий опубликован!
```
### Ошибка (токен не настроен):
```
❌ ERROR: API токен не указан для репозитория my-project
и мастер токен для gitea не настроен в .env (MASTER_GITEA_TOKEN)
```
---
## 🔧 Миграция базы данных
Поле `api_token` в таблице `repositories` теперь **nullable**:
**Старая схема:**
```sql
api_token VARCHAR NOT NULL
```
**Новая схема:**
```sql
api_token VARCHAR NULL
```
⚠️ **Если у вас уже есть репозитории:**
- Они продолжат работать со своими токенами
- Новые репозитории можно создавать без токена
---
## 🧪 Как протестировать
### 1. Настройте мастер токен в `.env`
```bash
MASTER_GITEA_TOKEN=your_token_here
```
### 2. Создайте репозиторий БЕЗ токена
```bash
curl -X POST http://localhost:8000/api/repositories \
-H "Content-Type: application/json" \
-d '{
"name": "test-repo",
"platform": "GITEA",
"url": "https://git.example.com/user/test-repo"
}'
```
### 3. Запустите ревью
Кнопка "🔍 Проверить сейчас"
### 4. Проверьте логи
Должно быть: `🔑 Используется мастер gitea токен`
---
## ✅ Преимущества
1. **Удобство** - не нужно указывать токен для каждого репозитория
2. **Гибкость** - можно переопределить токен для конкретного репозитория
3. **Безопасность** - проектные токены все еще шифруются
4. **Масштабируемость** - легко добавлять много репозиториев
---
## 📁 Измененные файлы
- `backend/app/config.py` - добавлены настройки мастер токенов
- `backend/app/models/repository.py` - `api_token` теперь nullable
- `backend/app/schemas/repository.py` - `api_token` опциональный
- `backend/app/api/repositories.py` - логика выбора токена
- `backend/app/agents/reviewer.py` - логика выбора токена
- `backend/.env.example` - пример конфигурации
---
## 🎉 Готово!
Теперь вы можете:
- ✅ Использовать один токен для всех репозиториев
- ✅ Переопределять токен для конкретных репозиториев
- ✅ Легко масштабировать систему
**Попробуйте!** 🚀