Files
Hasscall/app/views/settings.py
T

64 lines
2.3 KiB
Python

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'))