fix: закрыть IDOR в бронях, пароль админа и обработку callback_data (PRJ-3)

- IDOR: отмена/редактирование брони только владельцем (проверка user_id)
- пароль админа: убран дефолт admin123, обязателен из env; сравнение через hmac.compare_digest; TTL сессии 1ч
- callback_data: безопасный парсинг int + .get() вместо прямого индексирования (KeyError/ValueError)
This commit is contained in:
2026-08-04 19:33:08 +04:00
parent bf26370da9
commit 896c26bd57
5 changed files with 65 additions and 11 deletions
+10 -2
View File
@@ -61,7 +61,11 @@ async def start_booking(message: Message, state: FSMContext):
async def choose_service(callback: CallbackQuery, state: FSMContext):
from app.config import SERVICES
service_name = SERVICES[callback.data]
service_name = SERVICES.get(callback.data)
if not service_name:
await callback.answer("Услуга не найдена")
return
logger.debug("User {uid} selected first service: {srv}", uid=callback.from_user.id, srv=service_name)
await state.update_data(service=service_name, extra_services=[])
@@ -133,7 +137,11 @@ async def choose_extra_service(callback: CallbackQuery, state: FSMContext):
async def choose_master(callback: CallbackQuery, state: FSMContext):
from app.config import MASTERS
master_name = MASTERS[callback.data]
master_name = MASTERS.get(callback.data)
if not master_name:
await callback.answer("Мастер не найден")
return
logger.debug("User {uid} selected master: {m}", uid=callback.from_user.id, m=master_name)
await state.update_data(master=master_name)