Update app.py

This commit is contained in:
2026-04-17 22:53:16 +00:00
parent b713ec8db3
commit ea8baab4f1
+51 -5
View File
@@ -1,25 +1,70 @@
from flask import Flask, request, render_template, jsonify
from flask import Flask, request, render_template, Response
import os
import base64
app = Flask(__name__)
USERNAME = "admin"
PASSWORD = "changeme"
KEYBOARD = "/dev/hidg0"
MOUSE = "/dev/hidg1"
# -------------------------
# Authentication
# -------------------------
def check_auth(auth_header):
if not auth_header:
return False
try:
scheme, encoded = auth_header.split()
if scheme.lower() != "basic":
return False
decoded = base64.b64decode(encoded).decode()
user, pw = decoded.split(":", 1)
return user == USERNAME and pw == PASSWORD
except:
return False
def require_auth():
return Response(
"Authentication required",
401,
{"WWW-Authenticate": 'Basic realm="Pi Zero HID"'}
)
@app.before_request
def before_request():
if request.path.startswith("/static"):
return
auth = request.headers.get("Authorization")
if not check_auth(auth):
return require_auth()
# -------------------------
# HID functions
# -------------------------
def send_keyboard(code):
# 8-byte HID keyboard report: [mod, 0, key, 0, 0, 0, 0, 0]
report = bytes([0, 0, code, 0, 0, 0, 0, 0])
release = bytes([0] * 8)
with open(KEYBOARD, "wb") as f:
f.write(report)
f.write(release)
def send_mouse(dx, dy, buttons):
def send_mouse(dx, dy, buttons, wheel):
# 4-byte HID mouse report: [buttons, dx, dy, wheel]
report = bytes([buttons & 0x07, dx & 0xFF, dy & 0xFF, 0])
report = bytes([
buttons & 0x07,
dx & 0xFF,
dy & 0xFF,
wheel & 0xFF
])
with open(MOUSE, "wb") as f:
f.write(report)
# -------------------------
# Routes
# -------------------------
@app.route("/")
def index():
return render_template("index.html")
@@ -35,7 +80,8 @@ def mouse():
dx = int(request.form.get("dx", 0))
dy = int(request.form.get("dy", 0))
buttons = int(request.form.get("buttons", 0))
send_mouse(dx, dy, buttons)
wheel = int(request.form.get("wheel", 0))
send_mouse(dx, dy, buttons, wheel)
return "OK"
if __name__ == "__main__":