64 lines
2.3 KiB
Python
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')) |