added volume control for the web interface, and password protection
This commit is contained in:
		
							
								
								
									
										42
									
								
								interface.py
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								interface.py
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
from flask import Flask, render_template, request, redirect, send_file
 | 
			
		||||
from functools import wraps
 | 
			
		||||
from flask import Flask, render_template, request, redirect, send_file, Response
 | 
			
		||||
import variables as var
 | 
			
		||||
import util
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
@@ -58,8 +59,35 @@ def init_proxy():
 | 
			
		||||
    if var.is_proxified:
 | 
			
		||||
        web.wsgi_app = ReverseProxied(web.wsgi_app)
 | 
			
		||||
 | 
			
		||||
# https://stackoverflow.com/questions/29725217/password-protect-one-webpage-in-flask-app
 | 
			
		||||
 | 
			
		||||
def check_auth(username, password):
 | 
			
		||||
    """This function is called to check if a username /
 | 
			
		||||
    password combination is valid.
 | 
			
		||||
    """
 | 
			
		||||
    return username == var.config.get("webinterface", "user") and password == var.config.get("webinterface", "password")
 | 
			
		||||
 | 
			
		||||
def authenticate():
 | 
			
		||||
    """Sends a 401 response that enables basic auth"""
 | 
			
		||||
    logging.info("Web Interface login failed.")
 | 
			
		||||
    return Response(
 | 
			
		||||
    'Could not verify your access level for that URL.\n'
 | 
			
		||||
    'You have to login with proper credentials', 401,
 | 
			
		||||
    {'WWW-Authenticate': 'Basic realm="Login Required"'})
 | 
			
		||||
 | 
			
		||||
def requires_auth(f):
 | 
			
		||||
    @wraps(f)
 | 
			
		||||
    def decorated(*args, **kwargs):
 | 
			
		||||
        auth = request.authorization
 | 
			
		||||
        if var.config.getboolean("webinterface", "require_auth") and (not auth or not check_auth(auth.username, auth.password)):
 | 
			
		||||
            if auth:
 | 
			
		||||
                logging.info("Web Interface login attempt, user: %s" % auth.username)
 | 
			
		||||
            return authenticate()
 | 
			
		||||
        return f(*args, **kwargs)
 | 
			
		||||
    return decorated
 | 
			
		||||
 | 
			
		||||
@web.route("/", methods=['GET', 'POST'])
 | 
			
		||||
@requires_auth
 | 
			
		||||
def index():
 | 
			
		||||
    folder_path = var.music_folder
 | 
			
		||||
    files = util.get_recursive_filelist_sorted(var.music_folder)
 | 
			
		||||
@@ -140,6 +168,18 @@ def index():
 | 
			
		||||
                var.botamusique.pause()
 | 
			
		||||
            elif action == "clear":
 | 
			
		||||
                var.botamusique.stop()
 | 
			
		||||
            elif action == "volume_up":
 | 
			
		||||
                if var.botamusique.volume + 0.03 < 1.0:
 | 
			
		||||
                    var.botamusique.volume = var.botamusique.volume + 0.03
 | 
			
		||||
                else:
 | 
			
		||||
                    var.botamusique.volume = 1.0
 | 
			
		||||
                logging.debug("web interface volume up to %.2f" % var.botamusique.volume)
 | 
			
		||||
            elif action == "volume_down":
 | 
			
		||||
                if var.botamusique.volume - 0.03 > 0:
 | 
			
		||||
                    var.botamusique.volume = var.botamusique.volume - 0.03
 | 
			
		||||
                else:
 | 
			
		||||
                    var.botamusique.volume = 0
 | 
			
		||||
                logging.debug("web interface volume down to %.2f" % var.botamusique.volume)
 | 
			
		||||
 | 
			
		||||
    return render_template('index.html',
 | 
			
		||||
                           all_files=files,
 | 
			
		||||
 
 | 
			
		||||
@@ -109,6 +109,17 @@
 | 
			
		||||
                            </form>
 | 
			
		||||
                        </div>
 | 
			
		||||
 | 
			
		||||
                        <div class="btn-group" style="float: right;">
 | 
			
		||||
                            <form method="post">
 | 
			
		||||
                                <input type="text" value="volume_down" name="action" hidden>
 | 
			
		||||
                                <button type="submit" class="btn btn-warning btn-space"><i class="fa fa-volume-down" aria-hidden="true"></i></button>
 | 
			
		||||
                            </form>
 | 
			
		||||
                            <form method="post">
 | 
			
		||||
                                <input type="text" value="volume_up" name="action" hidden>
 | 
			
		||||
                                <button type="submit" class="btn btn-warning btn-space"><i class="fa fa-volume-up" aria-hidden="true"></i></button>
 | 
			
		||||
                            </form>
 | 
			
		||||
                        </div>
 | 
			
		||||
 | 
			
		||||
                        <table class="table">
 | 
			
		||||
                            <thead>
 | 
			
		||||
                                <tr>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user