Update files

This commit is contained in:
glpshchn 2025-12-15 03:47:02 +03:00
parent 3e89c8d42e
commit 94798f4d8b
5 changed files with 58 additions and 2 deletions

View File

@ -28,6 +28,17 @@ elif root_env_path.exists():
else: else:
print(f"⚠️ .env file not found at: {root_env_path} or {docker_env_path}") print(f"⚠️ .env file not found at: {root_env_path} or {docker_env_path}")
# Debug: Print email-related env vars
print(f"[Config] 🔍 Email настройки из .env:")
print(f"[Config] EMAIL_PROVIDER (raw): '{os.getenv('EMAIL_PROVIDER', 'NOT SET')}'")
print(f"[Config] EMAIL_FROM: '{os.getenv('EMAIL_FROM', 'NOT SET')}'")
print(f"[Config] AWS_SES_ACCESS_KEY_ID: {'SET' if os.getenv('AWS_SES_ACCESS_KEY_ID') else 'NOT SET'}")
print(f"[Config] AWS_SES_SECRET_ACCESS_KEY: {'SET' if os.getenv('AWS_SES_SECRET_ACCESS_KEY') else 'NOT SET'}")
print(f"[Config] AWS_SES_REGION: '{os.getenv('AWS_SES_REGION', 'NOT SET')}'")
print(f"[Config] AWS_SES_ENDPOINT_URL: '{os.getenv('AWS_SES_ENDPOINT_URL', 'NOT SET')}'")
print(f"[Config] YANDEX_SMTP_USER: {'SET' if os.getenv('YANDEX_SMTP_USER') else 'NOT SET'}")
print(f"[Config] YANDEX_SMTP_PASSWORD: {'SET' if os.getenv('YANDEX_SMTP_PASSWORD') else 'NOT SET'}")
class Settings(BaseSettings): class Settings(BaseSettings):
"""Application settings""" """Application settings"""

View File

@ -111,9 +111,18 @@ async def send_code(request: SendCodeRequest, http_request: Request = None):
# Send code via email # Send code via email
try: try:
print(f"[ModerationAuth] 📧 Попытка отправить код на {email_lower}")
print(f"[ModerationAuth] 📧 Код: {code}")
print(f"[ModerationAuth] 📧 EMAIL_PROVIDER из settings: '{settings.EMAIL_PROVIDER}'")
print(f"[ModerationAuth] 📧 EMAIL_FROM: '{settings.EMAIL_FROM}'")
await send_verification_code(email_lower, code) await send_verification_code(email_lower, code)
print(f"[ModerationAuth] ✅ Код успешно отправлен на {email_lower}")
return {"success": True, "message": "Код подтверждения отправлен на email"} return {"success": True, "message": "Код подтверждения отправлен на email"}
except ValueError as email_error: except ValueError as email_error:
print(f"[ModerationAuth] ❌ ValueError при отправке email: {email_error}")
import traceback
traceback.print_exc()
# Delete code if email failed # Delete code if email failed
await email_verification_codes_collection().delete_many({ await email_verification_codes_collection().delete_many({
'email': email_lower, 'email': email_lower,
@ -124,6 +133,9 @@ async def send_code(request: SendCodeRequest, http_request: Request = None):
detail=str(email_error) detail=str(email_error)
) )
except Exception as email_error: except Exception as email_error:
print(f"[ModerationAuth] ❌ Exception при отправке email: {type(email_error).__name__}: {email_error}")
import traceback
traceback.print_exc()
await email_verification_codes_collection().delete_many({ await email_verification_codes_collection().delete_many({
'email': email_lower, 'email': email_lower,
'code': code 'code': code

View File

@ -224,16 +224,45 @@ async def send_email(to: str, subject: str, html: str, text: Optional[str] = Non
"""Send email using configured provider (AWS SES or SMTP)""" """Send email using configured provider (AWS SES or SMTP)"""
email_provider = settings.EMAIL_PROVIDER.lower() email_provider = settings.EMAIL_PROVIDER.lower()
logger.info(f"[Email] 🔍 Начало отправки email")
logger.info(f"[Email] Provider из настроек: '{settings.EMAIL_PROVIDER}' (lowercase: '{email_provider}')")
logger.info(f"[Email] To: {to}")
logger.info(f"[Email] From: {settings.EMAIL_FROM}")
logger.info(f"[Email] Subject: {subject}")
if email_provider == 'aws': if email_provider == 'aws':
logger.info(f"[Email] Выбран AWS SES")
logger.info(f"[Email] AWS_SES_ACCESS_KEY_ID: {'установлен' if settings.AWS_SES_ACCESS_KEY_ID else 'НЕ УСТАНОВЛЕН'}")
logger.info(f"[Email] AWS_SES_SECRET_ACCESS_KEY: {'установлен' if settings.AWS_SES_SECRET_ACCESS_KEY else 'НЕ УСТАНОВЛЕН'}")
logger.info(f"[Email] AWS_SES_REGION: {settings.AWS_SES_REGION}")
logger.info(f"[Email] AWS_SES_ENDPOINT_URL: {settings.AWS_SES_ENDPOINT_URL or 'не установлен'}")
return await send_email_aws_ses(to, subject, html, text) return await send_email_aws_ses(to, subject, html, text)
elif email_provider in ['yandex', 'smtp']: elif email_provider in ['yandex', 'smtp']:
logger.info(f"[Email] Выбран SMTP ({email_provider})")
logger.info(f"[Email] YANDEX_SMTP_USER: {'установлен' if settings.YANDEX_SMTP_USER else 'НЕ УСТАНОВЛЕН'}")
logger.info(f"[Email] YANDEX_SMTP_PASSWORD: {'установлен' if settings.YANDEX_SMTP_PASSWORD else 'НЕ УСТАНОВЛЕН'}")
logger.info(f"[Email] YANDEX_SMTP_HOST: {settings.YANDEX_SMTP_HOST}")
logger.info(f"[Email] YANDEX_SMTP_PORT: {settings.YANDEX_SMTP_PORT}")
return await send_email_smtp(to, subject, html, text) return await send_email_smtp(to, subject, html, text)
else: else:
logger.error(f"[Email] ❌ Неподдерживаемый провайдер: '{settings.EMAIL_PROVIDER}'")
raise ValueError(f"Email provider '{settings.EMAIL_PROVIDER}' не поддерживается. Используйте 'aws', 'yandex' или 'smtp'") raise ValueError(f"Email provider '{settings.EMAIL_PROVIDER}' не поддерживается. Используйте 'aws', 'yandex' или 'smtp'")
async def send_verification_code(email: str, code: str): async def send_verification_code(email: str, code: str):
"""Send verification code to email""" """Send verification code to email"""
logger.info(f"[Email] 📧 send_verification_code вызван для {email}")
logger.info(f"[Email] 📧 Проверка настроек перед отправкой:")
logger.info(f"[Email] 📧 EMAIL_PROVIDER (raw): '{settings.EMAIL_PROVIDER}'")
logger.info(f"[Email] 📧 EMAIL_PROVIDER (lower): '{settings.EMAIL_PROVIDER.lower()}'")
logger.info(f"[Email] 📧 EMAIL_FROM: '{settings.EMAIL_FROM}'")
logger.info(f"[Email] 📧 AWS_SES_ACCESS_KEY_ID: {'установлен' if settings.AWS_SES_ACCESS_KEY_ID else 'НЕ УСТАНОВЛЕН'}")
logger.info(f"[Email] 📧 AWS_SES_SECRET_ACCESS_KEY: {'установлен' if settings.AWS_SES_SECRET_ACCESS_KEY else 'НЕ УСТАНОВЛЕН'}")
logger.info(f"[Email] 📧 AWS_SES_REGION: '{settings.AWS_SES_REGION}'")
logger.info(f"[Email] 📧 AWS_SES_ENDPOINT_URL: '{settings.AWS_SES_ENDPOINT_URL}'")
logger.info(f"[Email] 📧 YANDEX_SMTP_USER: {'установлен' if settings.YANDEX_SMTP_USER else 'НЕ УСТАНОВЛЕН'}")
logger.info(f"[Email] 📧 YANDEX_SMTP_PASSWORD: {'установлен' if settings.YANDEX_SMTP_PASSWORD else 'НЕ УСТАНОВЛЕН'}")
subject = "Код подтверждения регистрации - Nakama" subject = "Код подтверждения регистрации - Nakama"
html = generate_verification_email(code) html = generate_verification_email(code)
text = f"Ваш код подтверждения: {code}. Код действителен 15 минут." text = f"Ваш код подтверждения: {code}. Код действителен 15 минут."

View File

@ -7,8 +7,8 @@ import urllib.parse
from typing import Optional, Dict, Any from typing import Optional, Dict, Any
from config import settings from config import settings
MAX_AUTH_AGE_SECONDS = 60 * 60 * 24 # 24 часа (увеличено для модерации) MAX_AUTH_AGE_SECONDS = 60 * 60 * 24 * 7 # 7 дней (увеличено для модерации)
AUTH_AGE_TOLERANCE_SECONDS = 60 * 60 # 1 час допуск AUTH_AGE_TOLERANCE_SECONDS = 60 * 60 * 24 # 24 часа допуск (увеличено для избежания "сессия устарела")
def validate_init_data(init_data_raw: str, bot_token: Optional[str] = None) -> Dict[str, Any]: def validate_init_data(init_data_raw: str, bot_token: Optional[str] = None) -> Dict[str, Any]:

View File

@ -315,6 +315,10 @@ export default function App() {
script.setAttribute('data-request-access', 'write'); script.setAttribute('data-request-access', 'write');
script.setAttribute('data-onauth', 'onTelegramAuth'); script.setAttribute('data-onauth', 'onTelegramAuth');
script.setAttribute('data-radius', '10'); script.setAttribute('data-radius', '10');
// Добавить auth-url для валидации домена
const API_URL = getApiUrl();
const fullApiUrl = API_URL.startsWith('http') ? API_URL : `${window.location.origin}${API_URL}`;
script.setAttribute('data-auth-url', `${fullApiUrl}/moderation-auth/telegram-widget`);
script.onload = () => { script.onload = () => {
console.log('[Telegram Widget] Скрипт загружен'); console.log('[Telegram Widget] Скрипт загружен');