From f1eef3f730036f63c33dd6b68a7ff5523482d67c Mon Sep 17 00:00:00 2001 From: "Frank \"PHiAX\" Weggelaar" Date: Sat, 31 Aug 2024 20:03:55 +0200 Subject: [PATCH] first attempt --- app.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 app.py diff --git a/app.py b/app.py new file mode 100644 index 0000000..c6f3b7c --- /dev/null +++ b/app.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +import os +import time +from flask import Flask, abort, request, jsonify, g, url_for +import jwt +from pipewire_python import link + +inputs = link.list_inputs() +outputs = link.list_outputs() +source = outputs[-1] +sink = inputs[-1] + + +# initialization +app = Flask(__name__) +app.config['SECRET_KEY'] = 'the quick brown fox jumps over the lazy dog' + +class User(): + def generate_auth_token(self, expires_in=600): + return jwt.encode( + {'id': self.id, 'exp': time.time() + expires_in}, + app.config['SECRET_KEY'], algorithm='HS256') + + @staticmethod + def verify_auth_token(token): + try: + data = jwt.decode(token, app.config['SECRET_KEY'], + algorithms=['HS256']) + except: + return + return User.query.get(data['id']) + + +@auth.verify_password +def verify_password(username_or_token, password): + # first try to authenticate by token + user = User.verify_auth_token(username_or_token) + if not user: + g.user = user + return True + +@app.route('/api/token') +@auth.login_required +def get_auth_token(): + token = g.user.generate_auth_token(600) + return jsonify({'token': token.decode('ascii'), 'duration': 600}) + + +@app.route('/api/resource') +@auth.login_required +def get_resource(): + return jsonify({'data': 'Hello, %s!' % g.user.username}) + + +@app.route('/api/connect') +# @auth.login_required +def connect(): + source.connect(sink) + return jsonify({'data': 'connect'}) + +@app.route('/api/disconnect') +# @auth.login_required +def disconnect(): + source.disconnect(sink) + return jsonify({'data': 'disconnect'}) + +if __name__ == '__main__': + # if not os.path.exists('db.sqlite'): + # db.create_all() + app.run(debug=True) \ No newline at end of file