Block mobile devices: show desktop-only page
This commit is contained in:
+46
@@ -159,6 +159,52 @@ async def request_logging_middleware(request: Request, call_next):
|
||||
return response
|
||||
|
||||
|
||||
|
||||
import re as _re_mob
|
||||
|
||||
_MOBILE_UA_RE = _re_mob.compile(
|
||||
r"(Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|webOS)",
|
||||
_re_mob.IGNORECASE,
|
||||
)
|
||||
_MOBILE_PAGE = (
|
||||
"<!doctype html>"
|
||||
'<html lang="ru">'
|
||||
"<head>"
|
||||
'<meta charset="utf-8"/>'
|
||||
'<meta name="viewport" content="width=device-width,initial-scale=1"/>'
|
||||
"<title>МОНТ - инфрастуктурный полигон</title>"
|
||||
"<style>"
|
||||
"*{box-sizing:border-box;margin:0;padding:0}"
|
||||
"body{min-height:100dvh;display:flex;flex-direction:column;align-items:center;"
|
||||
"justify-content:center;background:linear-gradient(160deg,#0a2a4a 0%,#1565a0 60%,#1e88c8 100%);"
|
||||
"font-family:sans-serif;color:#fff;padding:2rem 1.5rem;text-align:center}"
|
||||
".logo{width:120px;margin-bottom:2rem}"
|
||||
"h1{font-size:1.3rem;font-weight:700;margin-bottom:1rem;line-height:1.35}"
|
||||
"p{font-size:0.95rem;color:rgba(255,255,255,.75);line-height:1.5;max-width:280px}"
|
||||
".icon{font-size:3.5rem;margin-bottom:1.2rem}"
|
||||
"</style>"
|
||||
"</head>"
|
||||
"<body>"
|
||||
'<img class="logo" src="/static/logo.png" alt="MONT"/>'
|
||||
'<div class="icon">🖥</div>'
|
||||
"<h1>Ресурс доступен<br>только с ПК</h1>"
|
||||
"<p>Пожалуйста, откройте эту страницу на компьютере или ноутбуке.</p>"
|
||||
"</body>"
|
||||
"</html>"
|
||||
)
|
||||
|
||||
|
||||
@app.middleware("http")
|
||||
async def mobile_block_middleware(request: Request, call_next):
|
||||
path = request.url.path
|
||||
if path.startswith("/static/"):
|
||||
return await call_next(request)
|
||||
ua = request.headers.get("user-agent", "")
|
||||
if _MOBILE_UA_RE.search(ua):
|
||||
from starlette.responses import HTMLResponse as _HR
|
||||
return _HR(content=_MOBILE_PAGE, status_code=200)
|
||||
return await call_next(request)
|
||||
|
||||
class Base(DeclarativeBase):
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user