-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathapp.py
More file actions
78 lines (56 loc) · 1.88 KB
/
app.py
File metadata and controls
78 lines (56 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import os
from werkzeug.security import check_password_hash
from audio import MediaCapture
from quart import Quart, request, jsonify, render_template, session, redirect, url_for, Response
from auth import is_logged_in
from dotenv import load_dotenv
load_dotenv()
app = Quart(__name__)
app.secret_key = os.getenv('SECRET_KEY')
media = MediaCapture(os.getenv("CAM_URL"), os.getenv("MIC_NAME"), os.getenv("PLAYBACK_NAME"))
@app.route("/")
@is_logged_in
async def index():
return await render_template("index.html", is_running=media.is_running)
@app.route("/js/client.js")
async def client_js():
js_content = await render_template(
"client.js",
turn_url=os.getenv("TURN_URL"),
turn_user=os.getenv("TURN_USER"),
turn_password=os.getenv("TURN_PASSWORD"),
)
return Response(js_content, mimetype="application/javascript")
@app.post("/offer")
@is_logged_in
async def offer():
params = await request.get_json()
sdp, typ = await media.handle_offer(params)
return jsonify({"sdp": sdp, "type": typ})
@app.post("/stop")
@is_logged_in
async def stop():
await media.shutdown()
return '', 200
@app.route('/login', methods=['GET', 'POST'])
async def login():
if session.get('logged_in') is not None:
return redirect(url_for('index'))
if request.method == 'POST':
form = await request.form
pwd = form.get('pwd')
if check_password_hash(os.getenv('PASSWORD'), pwd):
session['logged_in'] = True
session.permanent = True
return redirect(url_for('index'))
return await render_template('login.html')
@app.post("/logout")
async def logout():
session.clear()
return redirect(url_for("login"))
@app.after_serving
async def after_serving():
await media.shutdown()
print("Server shutdown complete")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)