diff --git a/web/routes/evotor.py b/web/routes/evotor.py index ab84e6a..aeae9ac 100644 --- a/web/routes/evotor.py +++ b/web/routes/evotor.py @@ -186,6 +186,67 @@ def evotor_link( return RedirectResponse("/connections", 303) +@router.post("/token") +async def evotor_token_manual( + request: Request, + db: Session = Depends(get_db), + user: User | None = Depends(get_current_user), +): + """Allow user to manually paste their Evotor token.""" + if not user: + return RedirectResponse("/login", 303) + + form = await request.form() + token = (form.get("token") or "").strip() + if not token: + return RedirectResponse("/evotor?error=empty_token", 303) + + now = datetime.utcnow() + + # Fetch store info + store_id = None + store_name = None + try: + async with httpx.AsyncClient() as client: + stores_response = await client.get( + EVOTOR_STORES_URL, + headers={"Authorization": f"Bearer {token}"}, + timeout=15, + ) + if stores_response.status_code == 200: + stores = stores_response.json() + items = stores.get("items", stores) if isinstance(stores, dict) else stores + if items: + store_id = items[0].get("uuid") or items[0].get("id") + store_name = items[0].get("name") + elif stores_response.status_code == 401: + return RedirectResponse("/evotor?error=invalid_token", 303) + except Exception: + pass + + connection = db.query(EvotorConnection).filter(EvotorConnection.user_id == user.id).first() + if connection: + connection.access_token = token + connection.store_id = store_id + connection.store_name = store_name + connection.is_online = True + connection.last_checked_at = now + connection.updated_at = now + else: + connection = EvotorConnection( + user_id=user.id, + access_token=token, + store_id=store_id, + store_name=store_name, + is_online=True, + last_checked_at=now, + ) + db.add(connection) + db.commit() + + return RedirectResponse("/connections", 303) + + @router.post("/disconnect") async def evotor_disconnect( request: Request, diff --git a/web/templates/evotor.html b/web/templates/evotor.html index 629c35f..42a3604 100644 --- a/web/templates/evotor.html +++ b/web/templates/evotor.html @@ -13,6 +13,10 @@ Время ожидания истекло. Попробуйте подключить аккаунт заново. {% elif error == "session_expired" %} Сессия устарела. Попробуйте подключить аккаунт заново. + {% elif error == "invalid_token" %} + Токен недействителен. Проверьте правильность и попробуйте снова. + {% elif error == "empty_token" %} + Введите токен. {% else %} Произошла ошибка при подключении: {{ error }} {% endif %} @@ -54,8 +58,14 @@ - + +
+

Если приложение уже установлено, введите токен вручную. Его можно найти в личном кабинете Эвотор: Приложения → ЭвоСинк → Настройки.

+
+
+ + +
+
{% endif %}