add dev mode

This commit is contained in:
2025-10-01 16:43:15 +05:00
parent a5d38ad966
commit 67f292cd60
4 changed files with 33 additions and 12 deletions

View File

@ -236,8 +236,21 @@ source venv/bin/activate
pip install -r requirements.txt
export DB_HOST=localhost
export DEX_ISSUER=https://dex.127.0.0.1.sslip.io/
python main.py
```
Для удобной локальной разработки без настройки OIDC/Dex есть режим разработки.
```bash
export INSECURE_DEV_MODE=true
export INSECURE_DEV_EMAIL=developer@example.com
```
#### Что происходит в режиме разработки
- **Отключается проверка JWT токенов** - не требуется настройка Dex или OIDC
- **Используется фиксированный email** - задается через переменную `INSECURE_DEV_EMAIL`
- **Логирование** - в консоли будет выводиться сообщение о том, какой email используется
**Никогда не используйте INSECURE_DEV_MODE=true в продакшене!** Это отключает всю аутентификацию.
### Локальная разработка frontend

Binary file not shown.

View File

@ -21,13 +21,17 @@ app.add_middleware(
# Конфигурация из переменных окружения
DB_HOST = os.getenv("DB_HOST", "postgres")
DB_PORT = os.getenv("DB_PORT", "5432")
DB_PORT = os.getenv("DB_PORT", "5440")
DB_NAME = os.getenv("DB_NAME", "dexdemo")
DB_USER = os.getenv("DB_USER", "dexdemo")
DB_PASSWORD = os.getenv("DB_PASSWORD", "dexdemo")
DEX_ISSUER = os.getenv("DEX_ISSUER", "https://dex.127.0.0.1.sslip.io/")
DEX_JWKS_URL = f"{DEX_ISSUER}keys"
# Режим разработки
INSECURE_DEV_MODE = os.getenv("INSECURE_DEV_MODE", "false").lower() == "true"
if INSECURE_DEV_MODE:
INSECURE_DEV_EMAIL = os.getenv("INSECURE_DEV_EMAIL")
class Organization(BaseModel):
id: int
@ -125,6 +129,11 @@ def validate_jwt_token(token: str) -> dict:
def get_user_email(request: Request) -> str:
"""Извлечение email пользователя из JWT или заголовков"""
# В режиме разработки возвращаем заданный email
if INSECURE_DEV_MODE:
print(f"INSECURE_DEV_MODE: Using email {INSECURE_DEV_EMAIL}")
return INSECURE_DEV_EMAIL
# Попытка получить токен из заголовка Authorization
auth_header = request.headers.get("Authorization")

View File

@ -2,16 +2,16 @@
version: '3.8'
services:
postgres:
python-navigator-demo-postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: dexdemo
POSTGRES_USER: dexdemo
POSTGRES_PASSWORD: dexdemo
ports:
- "5432:5432"
- "5440:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- python-navigator-demo-postgres_data:/var/lib/postgresql/data
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dexdemo"]
@ -19,7 +19,7 @@ services:
timeout: 5s
retries: 5
backend:
python-navigator-demo-backend:
build: ./backend
ports:
- "8000:8000"
@ -30,19 +30,18 @@ services:
DB_USER: dexdemo
DB_PASSWORD: dexdemo
DEX_ISSUER: https://dex.127.0.0.1.sslip.io
# Режим разработки - установите INSECURE_DEV_MODE=true для локальной разработки без OIDC
INSECURE_DEV_MODE: "true"
INSECURE_DEV_EMAIL: "developer@example.com"
depends_on:
postgres:
python-navigator-demo-postgres:
condition: service_healthy
restart: unless-stopped
frontend:
python-navigator-demo-frontend:
build: ./frontend
ports:
- "8080:80"
depends_on:
- backend
restart: unless-stopped
volumes:
postgres_data:
python-navigator-demo-postgres_data: