73 lines
2.6 KiB
Python
73 lines
2.6 KiB
Python
import asyncio
|
|
import requests
|
|
|
|
from aiogram import Dispatcher
|
|
from aiogram.types import Message
|
|
|
|
from auth import AUTHORIZED_USERS, is_user_auth
|
|
from config import config
|
|
|
|
|
|
def register_open_door_handler(dp: Dispatcher):
|
|
@dp.message()
|
|
async def open_door_handler(msg: Message):
|
|
print(
|
|
f"DEBUG: Получено сообщение от пользователя {msg.from_user.id}: '{msg.text}'"
|
|
)
|
|
user_id = msg.from_user.id
|
|
if not is_user_auth(user_id):
|
|
await msg.answer(
|
|
"Доступ запрщен. Необходимо предоставить свой номер телефона."
|
|
)
|
|
else:
|
|
print("OK")
|
|
|
|
phone = AUTHORIZED_USERS.get(user_id)
|
|
print(AUTHORIZED_USERS)
|
|
print(f"***user_id={user_id},phone={phone}***")
|
|
user_conf = config.get("users", {}).get(phone)
|
|
print(f"***phone={phone}, user_conf={user_conf}***")
|
|
# allowed_locks = user_conf.get("locks", [])
|
|
# print(f"***allowed_locks={allowed_locks}***")
|
|
|
|
# if msg.text not in allowed_locks:
|
|
# print("**********************")
|
|
# print(f"***{allowed_locks}***")
|
|
# print(f"***{msg.text}***")
|
|
# print("**********************")
|
|
# return
|
|
|
|
lock_conf = config.get("locks", {}).get(msg.text)
|
|
if not lock_conf:
|
|
await msg.answer("Информации по замку не найдено")
|
|
return
|
|
|
|
url = f"http://{lock_conf['ip']}/cgi-bin/ext"
|
|
auth_info = ("ext", lock_conf["auth_api"])
|
|
payload = f"CARD={user_conf['access_card']}&DIR=0"
|
|
headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
|
|
|
try:
|
|
print(
|
|
f"***DEBUG: Отправляю запрос к {url} c payload: {payload} и auth: {auth_info}"
|
|
)
|
|
response = await asyncio.to_thread(
|
|
requests.post,
|
|
url,
|
|
auth=auth_info,
|
|
data=payload,
|
|
headers=headers,
|
|
timeout=5,
|
|
)
|
|
print(
|
|
f"DEBUG: URL: {url}, status: {response.status_code}, response: {response.text}"
|
|
)
|
|
if response.status_code == 200:
|
|
await msg.answer("Открыто")
|
|
else:
|
|
await msg.answer(
|
|
f"Ошибка при открытии замка. Код ошибки: {response.status_code}"
|
|
)
|
|
except Exception as e:
|
|
await msg.answer(f"Исключение: {str(e)}")
|