diff --git a/README.md b/README.md index 73034af..c4bb024 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/README.pdf b/README.pdf index 64f0a84..8f70254 100644 Binary files a/README.pdf and b/README.pdf differ diff --git a/backend/main.py b/backend/main.py index b7dd363..0bc91d0 100644 --- a/backend/main.py +++ b/backend/main.py @@ -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") diff --git a/docker-compose.yml b/docker-compose.yml index d79337b..191cf03 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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: