Update app.py
This commit is contained in:
@@ -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__":
|
||||
|
||||
Reference in New Issue
Block a user