sonosbridge/app.py
2024-08-31 21:26:09 +02:00

68 lines
No EOL
1.8 KiB
Python

#!/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/<float:vol>')
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)