#!/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/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'}) @app.route('/api/volume/') def set_volume(vol): source.set_config(volume=vol) return jsonify({'data': 'volume set'}) if __name__ == '__main__': # if not os.path.exists('db.sqlite'): # db.create_all() app.run(debug=True, host='0.0.0.0', port=5000)