Removed check_config, minor changes, new logging

This commit is contained in:
Daniel Perna 2017-04-23 20:48:47 +02:00
parent 7f8d68b31a
commit 366d8857dd
2 changed files with 94 additions and 94 deletions

View file

@ -15,6 +15,7 @@ import signal
import cgi import cgi
import shlex import shlex
import subprocess import subprocess
import logging
from string import Template from string import Template
from http.server import BaseHTTPRequestHandler, HTTPServer from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib.request import urllib.request
@ -45,7 +46,14 @@ BANLIMIT = 0
GIT = False GIT = False
### End of options ### End of options
RELEASEURL = "https://api.github.com/repos/danielperna84/hass-poc-configurator/releases/latest" LOGLEVEL = logging.INFO
LOG = logging.getLogger(__name__)
LOG.setLevel(LOGLEVEL)
SO = logging.StreamHandler(sys.stdout)
SO.setLevel(LOGLEVEL)
SO.setFormatter(logging.Formatter('%(levelname)s:%(asctime)s:%(name)s:%(message)s'))
LOG.addHandler(SO)
RELEASEURL = "https://api.github.com/repos/danielperna84/hass-configurator/releases/latest"
VERSION = "0.1.6" VERSION = "0.1.6"
BASEDIR = "." BASEDIR = "."
DEV = False DEV = False
@ -56,7 +64,7 @@ if GIT:
try: try:
from git import Repo as REPO from git import Repo as REPO
except Exception: except Exception:
print("Unable to import Git module") LOG.warn("Unable to import Git module")
INDEX = Template(r"""<!DOCTYPE html> INDEX = Template(r"""<!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
@ -580,7 +588,7 @@ INDEX = Template(r"""<!DOCTYPE html>
<li><a href="#" data-activates="ace_settings" class="ace_settings-collapse">Editor Settings</a></li> <li><a href="#" data-activates="ace_settings" class="ace_settings-collapse">Editor Settings</a></li>
<li><a href="#modal_about">About HASS-Configurator</a></li> <li><a href="#modal_about">About HASS-Configurator</a></li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="#modal_check_config">Check HASS Configuration</a></li> <!--<li><a href="#modal_check_config">Check HASS Configuration</a></li>-->
<li><a href="#modal_reload_automations">Reload automations</a></li> <li><a href="#modal_reload_automations">Reload automations</a></li>
<li><a href="#modal_reload_groups">Reload groups</a></li> <li><a href="#modal_reload_groups">Reload groups</a></li>
<li><a href="#modal_restart">Restart HASS</a></li> <li><a href="#modal_restart">Restart HASS</a></li>
@ -594,7 +602,7 @@ INDEX = Template(r"""<!DOCTYPE html>
<li><a href="#" data-activates="ace_settings" class="ace_settings-collapse">Editor Settings</a></li> <li><a href="#" data-activates="ace_settings" class="ace_settings-collapse">Editor Settings</a></li>
<li><a href="#modal_about">About HASS-Configurator</a></li> <li><a href="#modal_about">About HASS-Configurator</a></li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="#modal_check_config">Check HASS Configuration</a></li> <!--<li><a href="#modal_check_config">Check HASS Configuration</a></li>-->
<li><a href="#modal_reload_automations">Reload automations</a></li> <li><a href="#modal_reload_automations">Reload automations</a></li>
<li><a href="#modal_reload_groups">Reload groups</a></li> <li><a href="#modal_reload_groups">Reload groups</a></li>
<li><a href="#modal_restart">Restart HASS</a></li> <li><a href="#modal_restart">Restart HASS</a></li>
@ -2646,7 +2654,7 @@ INDEX = Template(r"""<!DOCTYPE html>
def signal_handler(sig, frame): def signal_handler(sig, frame):
global HTTPD global HTTPD
print("Got signal: %s. Shutting down server" % str(sig)) LOG.info("Got signal: %s. Shutting down server" % str(sig))
HTTPD.server_close() HTTPD.server_close()
sys.exit(0) sys.exit(0)
@ -2670,8 +2678,8 @@ def load_settings(settingsfile):
BANLIMIT = settings.get("BANLIMIT", BANLIMIT) BANLIMIT = settings.get("BANLIMIT", BANLIMIT)
DEV = settings.get("DEV", DEV) DEV = settings.get("DEV", DEV)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
print("Not loading static settings") LOG.warn("Not loading static settings")
return False return False
def get_dircontent(path, repo=None): def get_dircontent(path, repo=None):
@ -2687,7 +2695,7 @@ def get_dircontent(path, repo=None):
for element in repo.index.diff("HEAD"): for element in repo.index.diff("HEAD"):
staged["%s%s%s" % (repo.working_dir, os.sep, "%s"%os.sep.join(element.b_path.split('/')))] = element.change_type staged["%s%s%s" % (repo.working_dir, os.sep, "%s"%os.sep.join(element.b_path.split('/')))] = element.change_type
except Exception as err: except Exception as err:
print("Exception: %s" % str(err)) LOG.warn("Exception: %s" % str(err))
for element in repo.index.diff(None): for element in repo.index.diff(None):
unstaged["%s%s%s" % (repo.working_dir, os.sep, "%s"%os.sep.join(element.b_path.split('/')))] = element.change_type unstaged["%s%s%s" % (repo.working_dir, os.sep, "%s"%os.sep.join(element.b_path.split('/')))] = element.change_type
else: else:
@ -2729,8 +2737,8 @@ def get_html():
html = Template(fptr.read()) html = Template(fptr.read())
return html return html
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
print("Delivering embedded HTML") LOG.warn("Delivering embedded HTML")
return INDEX return INDEX
def check_access(clientip): def check_access(clientip):
@ -2747,6 +2755,10 @@ def check_access(clientip):
return False return False
class RequestHandler(BaseHTTPRequestHandler): class RequestHandler(BaseHTTPRequestHandler):
def log_message(self, format, *args):
LOG.info("%s - %s" % (self.client_address[0], format%args))
return
def do_BLOCK(self): def do_BLOCK(self):
self.send_response(420) self.send_response(420)
self.end_headers() self.end_headers()
@ -2773,7 +2785,7 @@ class RequestHandler(BaseHTTPRequestHandler):
else: else:
content = "File not found" content = "File not found"
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
content = str(err) content = str(err)
self.wfile.write(bytes(content, "utf8")) self.wfile.write(bytes(content, "utf8"))
return return
@ -2783,7 +2795,7 @@ class RequestHandler(BaseHTTPRequestHandler):
try: try:
if filename: if filename:
filename = unquote(filename[0]).encode('utf-8') filename = unquote(filename[0]).encode('utf-8')
print(filename) LOG.info(filename)
if os.path.isfile(os.path.join(BASEDIR.encode('utf-8'), filename)): if os.path.isfile(os.path.join(BASEDIR.encode('utf-8'), filename)):
with open(os.path.join(BASEDIR.encode('utf-8'), filename), 'rb') as fptr: with open(os.path.join(BASEDIR.encode('utf-8'), filename), 'rb') as fptr:
filecontent = fptr.read() filecontent = fptr.read()
@ -2794,7 +2806,7 @@ class RequestHandler(BaseHTTPRequestHandler):
else: else:
content = "File not found" content = "File not found"
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
content = str(err) content = str(err)
self.send_header('Content-type', 'text/text') self.send_header('Content-type', 'text/text')
self.wfile.write(bytes(content, "utf8")) self.wfile.write(bytes(content, "utf8"))
@ -2820,7 +2832,7 @@ class RequestHandler(BaseHTTPRequestHandler):
for branch in repo.branches: for branch in repo.branches:
branches.append(branch.name) branches.append(branch.name)
except Exception as err: except Exception as err:
print("Exception (no repo): %s" % str(err)) LOG.debug("Exception (no repo): %s" % str(err))
dircontent = get_dircontent(dirpath.decode('utf-8'), repo) dircontent = get_dircontent(dirpath.decode('utf-8'), repo)
filedata = {'content': dircontent, filedata = {'content': dircontent,
'abspath': os.path.abspath(dirpath).decode('utf-8'), 'abspath': os.path.abspath(dirpath).decode('utf-8'),
@ -2831,7 +2843,7 @@ class RequestHandler(BaseHTTPRequestHandler):
} }
self.wfile.write(bytes(json.dumps(filedata), "utf8")) self.wfile.write(bytes(json.dumps(filedata), "utf8"))
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
content = str(err) content = str(err)
self.wfile.write(bytes(content, "utf8")) self.wfile.write(bytes(content, "utf8"))
return return
@ -2842,9 +2854,9 @@ class RequestHandler(BaseHTTPRequestHandler):
dirpath = query.get('path', None) dirpath = query.get('path', None)
if dirpath: if dirpath:
dirpath = unquote(dirpath[0]).encode('utf-8') dirpath = unquote(dirpath[0]).encode('utf-8')
print(dirpath) LOG.debug(dirpath)
absp = os.path.abspath(dirpath) absp = os.path.abspath(dirpath)
print(absp) LOG.debug(absp)
if os.path.isdir(dirpath): if os.path.isdir(dirpath):
self.wfile.write(os.path.abspath(dirpath)) self.wfile.write(os.path.abspath(dirpath))
return return
@ -2855,14 +2867,14 @@ class RequestHandler(BaseHTTPRequestHandler):
dirpath = query.get('path', None) dirpath = query.get('path', None)
if dirpath: if dirpath:
dirpath = unquote(dirpath[0]).encode('utf-8') dirpath = unquote(dirpath[0]).encode('utf-8')
print(dirpath) LOG.debug(dirpath)
absp = os.path.abspath(dirpath) absp = os.path.abspath(dirpath)
print(absp) LOG.debug(absp)
if os.path.isdir(dirpath): if os.path.isdir(dirpath):
self.wfile.write(os.path.abspath(os.path.dirname(dirpath))) self.wfile.write(os.path.abspath(os.path.dirname(dirpath)))
return return
elif req.path == '/api/restart': elif req.path == '/api/restart':
print("/api/restart") LOG.info("/api/restart")
self.send_header('Content-type', 'text/json') self.send_header('Content-type', 'text/json')
self.end_headers() self.end_headers()
res = {"restart": False} res = {"restart": False}
@ -2875,14 +2887,14 @@ class RequestHandler(BaseHTTPRequestHandler):
req = urllib.request.Request("%sservices/homeassistant/restart" % HASS_API, headers=headers, method='POST') req = urllib.request.Request("%sservices/homeassistant/restart" % HASS_API, headers=headers, method='POST')
with urllib.request.urlopen(req) as response: with urllib.request.urlopen(req) as response:
res = json.loads(response.read().decode('utf-8')) res = json.loads(response.read().decode('utf-8'))
print(res) LOG.debug(res)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
res['restart'] = str(err) res['restart'] = str(err)
self.wfile.write(bytes(json.dumps(res), "utf8")) self.wfile.write(bytes(json.dumps(res), "utf8"))
return return
elif req.path == '/api/check_config': elif req.path == '/api/check_config':
print("/api/check_config") LOG.info("/api/check_config")
self.send_header('Content-type', 'text/json') self.send_header('Content-type', 'text/json')
self.end_headers() self.end_headers()
res = {"check_config": False} res = {"check_config": False}
@ -2893,16 +2905,16 @@ class RequestHandler(BaseHTTPRequestHandler):
if HASS_API_PASSWORD: if HASS_API_PASSWORD:
headers["x-ha-access"] = HASS_API_PASSWORD headers["x-ha-access"] = HASS_API_PASSWORD
req = urllib.request.Request("%sservices/homeassistant/check_config" % HASS_API, headers=headers, method='POST') req = urllib.request.Request("%sservices/homeassistant/check_config" % HASS_API, headers=headers, method='POST')
with urllib.request.urlopen(req) as response: # with urllib.request.urlopen(req) as response:
res = json.loads(response.read().decode('utf-8')) # print(json.loads(response.read().decode('utf-8')))
print(res) # res['service'] = "called successfully"
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
res['restart'] = str(err) res['restart'] = str(err)
self.wfile.write(bytes(json.dumps(res), "utf8")) self.wfile.write(bytes(json.dumps(res), "utf8"))
return return
elif req.path == '/api/reload_automations': elif req.path == '/api/reload_automations':
print("/api/reload_automations") LOG.info("/api/reload_automations")
self.send_header('Content-type', 'text/json') self.send_header('Content-type', 'text/json')
self.end_headers() self.end_headers()
res = {"reload_automations": False} res = {"reload_automations": False}
@ -2914,15 +2926,15 @@ class RequestHandler(BaseHTTPRequestHandler):
headers["x-ha-access"] = HASS_API_PASSWORD headers["x-ha-access"] = HASS_API_PASSWORD
req = urllib.request.Request("%sservices/automation/reload" % HASS_API, headers=headers, method='POST') req = urllib.request.Request("%sservices/automation/reload" % HASS_API, headers=headers, method='POST')
with urllib.request.urlopen(req) as response: with urllib.request.urlopen(req) as response:
res = json.loads(response.read().decode('utf-8')) LOG.debug(json.loads(response.read().decode('utf-8')))
print(res) res['service'] = "called successfully"
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
res['restart'] = str(err) res['restart'] = str(err)
self.wfile.write(bytes(json.dumps(res), "utf8")) self.wfile.write(bytes(json.dumps(res), "utf8"))
return return
elif req.path == '/api/reload_groups': elif req.path == '/api/reload_groups':
print("/api/reload_groups") LOG.info("/api/reload_groups")
self.send_header('Content-type', 'text/json') self.send_header('Content-type', 'text/json')
self.end_headers() self.end_headers()
res = {"reload_groups": False} res = {"reload_groups": False}
@ -2934,10 +2946,10 @@ class RequestHandler(BaseHTTPRequestHandler):
headers["x-ha-access"] = HASS_API_PASSWORD headers["x-ha-access"] = HASS_API_PASSWORD
req = urllib.request.Request("%sservices/group/reload" % HASS_API, headers=headers, method='POST') req = urllib.request.Request("%sservices/group/reload" % HASS_API, headers=headers, method='POST')
with urllib.request.urlopen(req) as response: with urllib.request.urlopen(req) as response:
res = json.loads(response.read().decode('utf-8')) LOG.debug(json.loads(response.read().decode('utf-8')))
print(res) res['service'] = "called successfully"
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
res['restart'] = str(err) res['restart'] = str(err)
self.wfile.write(bytes(json.dumps(res), "utf8")) self.wfile.write(bytes(json.dumps(res), "utf8"))
return return
@ -2957,8 +2969,8 @@ class RequestHandler(BaseHTTPRequestHandler):
boot = response.read().decode('utf-8') boot = response.read().decode('utf-8')
except Exception as err: except Exception as err:
print("Exception getting bootstrap") LOG.warn("Exception getting bootstrap")
print(err) LOG.warn(err)
color = "green" color = "green"
try: try:
@ -2967,8 +2979,8 @@ class RequestHandler(BaseHTTPRequestHandler):
if VERSION != latest: if VERSION != latest:
color = "red" color = "red"
except Exception as err: except Exception as err:
print("Exception getting release") LOG.warn("Exception getting release")
print(err) LOG.warn(err)
html = get_html().safe_substitute(bootstrap=boot, html = get_html().safe_substitute(bootstrap=boot,
current=VERSION, current=VERSION,
versionclass=color, versionclass=color,
@ -2996,7 +3008,7 @@ class RequestHandler(BaseHTTPRequestHandler):
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'filename' in postvars.keys() and 'text' in postvars.keys(): if 'filename' in postvars.keys() and 'text' in postvars.keys():
@ -3015,7 +3027,7 @@ class RequestHandler(BaseHTTPRequestHandler):
return return
except Exception as err: except Exception as err:
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
print(err) LOG.warn(err)
else: else:
response['message'] = "Missing filename or text" response['message'] = "Missing filename or text"
elif req.path == '/api/upload': elif req.path == '/api/upload':
@ -3052,7 +3064,7 @@ class RequestHandler(BaseHTTPRequestHandler):
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'path' in postvars.keys(): if 'path' in postvars.keys():
@ -3073,20 +3085,20 @@ class RequestHandler(BaseHTTPRequestHandler):
self.wfile.write(bytes(json.dumps(response), "utf8")) self.wfile.write(bytes(json.dumps(response), "utf8"))
return return
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
except Exception as err: except Exception as err:
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
print(err) LOG.warn(err)
else: else:
response['message'] = "Missing filename or text" response['message'] = "Missing filename or text"
elif req.path == '/api/exec_command': elif req.path == '/api/exec_command':
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'command' in postvars.keys(): if 'command' in postvars.keys():
@ -3110,30 +3122,30 @@ class RequestHandler(BaseHTTPRequestHandler):
try: try:
response['stdout'] = stdout.decode(sys.getdefaultencoding()) response['stdout'] = stdout.decode(sys.getdefaultencoding())
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['stdout'] = stdout.decode("utf-8", errors="replace") response['stdout'] = stdout.decode("utf-8", errors="replace")
try: try:
response['stderr'] = stderr.decode(sys.getdefaultencoding()) response['stderr'] = stderr.decode(sys.getdefaultencoding())
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['stderr'] = stderr.decode("utf-8", errors="replace") response['stderr'] = stderr.decode("utf-8", errors="replace")
self.wfile.write(bytes(json.dumps(response), "utf8")) self.wfile.write(bytes(json.dumps(response), "utf8"))
return return
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
except Exception as err: except Exception as err:
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
print(err) LOG.warn(err)
else: else:
response['message'] = "Missing command" response['message'] = "Missing command"
elif req.path == '/api/gitadd': elif req.path == '/api/gitadd':
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'path' in postvars.keys(): if 'path' in postvars.keys():
@ -3153,20 +3165,20 @@ class RequestHandler(BaseHTTPRequestHandler):
self.wfile.write(bytes(json.dumps(response), "utf8")) self.wfile.write(bytes(json.dumps(response), "utf8"))
return return
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
except Exception as err: except Exception as err:
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
print(err) LOG.warn(err)
else: else:
response['message'] = "Missing filename" response['message'] = "Missing filename"
elif req.path == '/api/commit': elif req.path == '/api/commit':
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'path' in postvars.keys() and 'message' in postvars.keys(): if 'path' in postvars.keys() and 'message' in postvars.keys():
@ -3188,18 +3200,18 @@ class RequestHandler(BaseHTTPRequestHandler):
except Exception as err: except Exception as err:
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
print(response) LOG.debug(response)
except Exception as err: except Exception as err:
response['message'] = "Not a git repository: %s" % (str(err)) response['message'] = "Not a git repository: %s" % (str(err))
print("Exception (no repo): %s" % str(err)) LOG.warn("Exception (no repo): %s" % str(err))
else: else:
response['message'] = "Missing path" response['message'] = "Missing path"
elif req.path == '/api/checkout': elif req.path == '/api/checkout':
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'path' in postvars.keys() and 'branch' in postvars.keys(): if 'path' in postvars.keys() and 'branch' in postvars.keys():
@ -3222,18 +3234,18 @@ class RequestHandler(BaseHTTPRequestHandler):
except Exception as err: except Exception as err:
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
print(response) LOG.warn(response)
except Exception as err: except Exception as err:
response['message'] = "Not a git repository: %s" % (str(err)) response['message'] = "Not a git repository: %s" % (str(err))
print("Exception (no repo): %s" % str(err)) LOG.warn("Exception (no repo): %s" % str(err))
else: else:
response['message'] = "Missing path or branch" response['message'] = "Missing path or branch"
elif req.path == '/api/newbranch': elif req.path == '/api/newbranch':
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'path' in postvars.keys() and 'branch' in postvars.keys(): if 'path' in postvars.keys() and 'branch' in postvars.keys():
@ -3255,18 +3267,18 @@ class RequestHandler(BaseHTTPRequestHandler):
except Exception as err: except Exception as err:
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
print(response) LOG.warn(response)
except Exception as err: except Exception as err:
response['message'] = "Not a git repository: %s" % (str(err)) response['message'] = "Not a git repository: %s" % (str(err))
print("Exception (no repo): %s" % str(err)) LOG.warn("Exception (no repo): %s" % str(err))
else: else:
response['message'] = "Missing path or branch" response['message'] = "Missing path or branch"
elif req.path == '/api/init': elif req.path == '/api/init':
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'path' in postvars.keys(): if 'path' in postvars.keys():
@ -3286,18 +3298,18 @@ class RequestHandler(BaseHTTPRequestHandler):
except Exception as err: except Exception as err:
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
print(response) LOG.warn(response)
except Exception as err: except Exception as err:
response['message'] = "Not a git repository: %s" % (str(err)) response['message'] = "Not a git repository: %s" % (str(err))
print("Exception (no repo): %s" % str(err)) LOG.warn("Exception (no repo): %s" % str(err))
else: else:
response['message'] = "Missing path or branch" response['message'] = "Missing path or branch"
elif req.path == '/api/newfolder': elif req.path == '/api/newfolder':
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'path' in postvars.keys() and 'name' in postvars.keys(): if 'path' in postvars.keys() and 'name' in postvars.keys():
@ -3316,17 +3328,17 @@ class RequestHandler(BaseHTTPRequestHandler):
self.wfile.write(bytes(json.dumps(response), "utf8")) self.wfile.write(bytes(json.dumps(response), "utf8"))
return return
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
except Exception as err: except Exception as err:
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
print(err) LOG.warn(err)
elif req.path == '/api/newfile': elif req.path == '/api/newfile':
try: try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length).decode('utf-8'), keep_blank_values=1)
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
postvars = {} postvars = {}
if 'path' in postvars.keys() and 'name' in postvars.keys(): if 'path' in postvars.keys() and 'name' in postvars.keys():
@ -3346,12 +3358,12 @@ class RequestHandler(BaseHTTPRequestHandler):
self.wfile.write(bytes(json.dumps(response), "utf8")) self.wfile.write(bytes(json.dumps(response), "utf8"))
return return
except Exception as err: except Exception as err:
print(err) LOG.warn(err)
response['error'] = True response['error'] = True
response['message'] = str(err) response['message'] = str(err)
except Exception as err: except Exception as err:
response['message'] = "%s" % (str(err)) response['message'] = "%s" % (str(err))
print(err) LOG.warn(err)
else: else:
response['message'] = "Missing filename or text" response['message'] = "Missing filename or text"
else: else:
@ -3364,7 +3376,7 @@ class RequestHandler(BaseHTTPRequestHandler):
class AuthHandler(RequestHandler): class AuthHandler(RequestHandler):
def do_AUTHHEAD(self): def do_AUTHHEAD(self):
print("Requesting authorization") LOG.info("Requesting authorization")
self.send_response(401) self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm=\"HASS-PoC-Configurator\"') self.send_header('WWW-Authenticate', 'Basic realm=\"HASS-PoC-Configurator\"')
self.send_header('Content-type', 'text/html') self.send_header('Content-type', 'text/html')
@ -3386,7 +3398,7 @@ class AuthHandler(RequestHandler):
if BANLIMIT: if BANLIMIT:
bancounter = FAIL2BAN_IPS.get(self.client_address[0], 1) bancounter = FAIL2BAN_IPS.get(self.client_address[0], 1)
if bancounter >= BANLIMIT: if bancounter >= BANLIMIT:
print("Blocking access from %s" % self.client_address[0]) LOG.warn("Blocking access from %s" % self.client_address[0])
self.do_BLOCK() self.do_BLOCK()
return return
else: else:
@ -3411,7 +3423,7 @@ class AuthHandler(RequestHandler):
if BANLIMIT: if BANLIMIT:
bancounter = FAIL2BAN_IPS.get(self.client_address[0], 1) bancounter = FAIL2BAN_IPS.get(self.client_address[0], 1)
if bancounter >= BANLIMIT: if bancounter >= BANLIMIT:
print("Blocking access from %s" % self.client_address[0]) LOG.warn("Blocking access from %s" % self.client_address[0])
self.do_BLOCK() self.do_BLOCK()
return return
else: else:
@ -3424,7 +3436,7 @@ def main(args):
global HTTPD, CREDENTIALS global HTTPD, CREDENTIALS
if args: if args:
load_settings(args[0]) load_settings(args[0])
print("Starting server") LOG.info("Starting server")
server_address = (LISTENIP, LISTENPORT) server_address = (LISTENIP, LISTENPORT)
if CREDENTIALS: if CREDENTIALS:
CREDENTIALS = base64.b64encode(bytes(CREDENTIALS, "utf-8")) CREDENTIALS = base64.b64encode(bytes(CREDENTIALS, "utf-8"))
@ -3439,7 +3451,7 @@ def main(args):
certfile=SSL_CERTIFICATE, certfile=SSL_CERTIFICATE,
keyfile=SSL_KEY, keyfile=SSL_KEY,
server_side=True) server_side=True)
print('Listening on: %s://%s:%i' % ('https' if SSL_CERTIFICATE else 'http', LOG.info('Listening on: %s://%s:%i' % ('https' if SSL_CERTIFICATE else 'http',
LISTENIP, LISTENIP,
LISTENPORT)) LISTENPORT))
if BASEPATH: if BASEPATH:

View file

@ -521,7 +521,7 @@
<li><a href="#" data-activates="ace_settings" class="ace_settings-collapse">Editor Settings</a></li> <li><a href="#" data-activates="ace_settings" class="ace_settings-collapse">Editor Settings</a></li>
<li><a href="#modal_about">About HASS-Configurator</a></li> <li><a href="#modal_about">About HASS-Configurator</a></li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="#modal_check_config">Check HASS Configuration</a></li> <!--<li><a href="#modal_check_config">Check HASS Configuration</a></li>-->
<li><a href="#modal_reload_automations">Reload automations</a></li> <li><a href="#modal_reload_automations">Reload automations</a></li>
<li><a href="#modal_reload_groups">Reload groups</a></li> <li><a href="#modal_reload_groups">Reload groups</a></li>
<li><a href="#modal_restart">Restart HASS</a></li> <li><a href="#modal_restart">Restart HASS</a></li>
@ -535,7 +535,7 @@
<li><a href="#" data-activates="ace_settings" class="ace_settings-collapse">Editor Settings</a></li> <li><a href="#" data-activates="ace_settings" class="ace_settings-collapse">Editor Settings</a></li>
<li><a href="#modal_about">About HASS-Configurator</a></li> <li><a href="#modal_about">About HASS-Configurator</a></li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="#modal_check_config">Check HASS Configuration</a></li> <!--<li><a href="#modal_check_config">Check HASS Configuration</a></li>-->
<li><a href="#modal_reload_automations">Reload automations</a></li> <li><a href="#modal_reload_automations">Reload automations</a></li>
<li><a href="#modal_reload_groups">Reload groups</a></li> <li><a href="#modal_reload_groups">Reload groups</a></li>
<li><a href="#modal_restart">Restart HASS</a></li> <li><a href="#modal_restart">Restart HASS</a></li>
@ -2170,34 +2170,22 @@
} }
else { else {
var $toastContent = $("<div><pre>" + resp[0].state + "</pre></div>"); var $toastContent = $("<div><pre>" + resp[0].state + "</pre></div>");
Materialize.toast($toastContent, 5000); Materialize.toast($toastContent, 2000);
} }
}); });
} }
function reload_automations() { function reload_automations() {
$.get("api/reload_automations", function (resp) { $.get("api/reload_automations", function (resp) {
if (resp.length == 0) { var $toastContent = $("<div>Automations reloaded</div>");
var $toastContent = $("<div><pre>Automations reloaded.</pre></div>"); Materialize.toast($toastContent, 2000);
Materialize.toast($toastContent, 2000);
}
else {
var $toastContent = $("<div><pre>" + resp[0].state + "</pre></div>");
Materialize.toast($toastContent, 5000);
}
}); });
} }
function reload_groups() { function reload_groups() {
$.get("api/reload_groups", function (resp) { $.get("api/reload_groups", function (resp) {
if (resp.length == 0) { var $toastContent = $("<div><pre>Groups reloaded</pre></div>");
var $toastContent = $("<div><pre>Groups reloaded.</pre></div>"); Materialize.toast($toastContent, 2000);
Materialize.toast($toastContent, 2000);
}
else {
var $toastContent = $("<div><pre>" + resp[0].state + "</pre></div>");
Materialize.toast($toastContent, 5000);
}
}); });
} }