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 os
|
||||||
|
import base64
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
USERNAME = "admin"
|
||||||
|
PASSWORD = "changeme"
|
||||||
|
|
||||||
KEYBOARD = "/dev/hidg0"
|
KEYBOARD = "/dev/hidg0"
|
||||||
MOUSE = "/dev/hidg1"
|
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):
|
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])
|
report = bytes([0, 0, code, 0, 0, 0, 0, 0])
|
||||||
release = bytes([0] * 8)
|
release = bytes([0] * 8)
|
||||||
with open(KEYBOARD, "wb") as f:
|
with open(KEYBOARD, "wb") as f:
|
||||||
f.write(report)
|
f.write(report)
|
||||||
f.write(release)
|
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]
|
# 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:
|
with open(MOUSE, "wb") as f:
|
||||||
f.write(report)
|
f.write(report)
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# Routes
|
||||||
|
# -------------------------
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
def index():
|
def index():
|
||||||
return render_template("index.html")
|
return render_template("index.html")
|
||||||
@@ -35,7 +80,8 @@ def mouse():
|
|||||||
dx = int(request.form.get("dx", 0))
|
dx = int(request.form.get("dx", 0))
|
||||||
dy = int(request.form.get("dy", 0))
|
dy = int(request.form.get("dy", 0))
|
||||||
buttons = int(request.form.get("buttons", 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"
|
return "OK"
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user