from flask import flash, redirect, render_template, request, url_for from werkzeug.security import generate_password_hash from app import webapp from app.config import Defaults from app.homeassistant import HomeAssistant from app.models.settings import Setting from app.views.auth import login_required @webapp.route('/settings') @login_required def settings(): hass_url = Setting.get_value(Setting.Keys.HASS_URL) hass_token = Setting.get_value(Setting.Keys.HASS_TOKEN) feedback = Setting.get_value(Setting.Keys.FEEDBACK, Defaults.feedback_level) auth_required = True if Setting.get_value(Setting.Keys.HASSCALL_LOGIN_REQUIRED) == 'true' else False username = Setting.get_value(Setting.Keys.HASSCALL_USERNAME) return render_template('settings.html', token=hass_token, url=hass_url, feedback=feedback, auth_enabled=auth_required, username=username) @webapp.route('/save-settings', methods=['POST']) @login_required def save_settings(): # Authorization auth_enabled = 'false' if 'auth-enabled' in request.form and request.form['auth-enabled'] == 'true': auth_enabled = 'true' Setting.set_value(Setting.Keys.HASSCALL_LOGIN_REQUIRED, auth_enabled) username = request.form["auth-user"] password = request.form["auth-password"] if not username or not password: flash("Username and password required!", "error") else: Setting.set_value(Setting.Keys.HASSCALL_USERNAME, username) Setting.set_value(Setting.Keys.HASSCALL_PASSWORD, generate_password_hash(password)) # Feedback Setting.set_value(Setting.Keys.FEEDBACK, request.form["feedback"]) # Attempt a connection to Home Assistant url = request.form["url"] token = request.form["token"] if not url.endswith("/api"): url = url + "/api" try: validConnection = HomeAssistant.testConnection(url, token) if not validConnection: flash("Unable to connect to Home Assistant", "error") else: HomeAssistant.initialize(url=url, token=token) Setting.set_value(Setting.Keys.HASS_URL, url) Setting.set_value(Setting.Keys.HASS_TOKEN, token) except: flash("There was an error!", "error") flash("Settings saved successfully!", "success") return redirect(url_for('settings'))