diff --git a/app/app.py b/app/app.py new file mode 100644 index 0000000..f64a804 --- /dev/null +++ b/app/app.py @@ -0,0 +1,129 @@ +from flask import Flask, flash, request, redirect, send_from_directory, get_flashed_messages +from werkzeug.utils import secure_filename +import os +import glob +import securecad_parser +import datetime +from hooks import webhook, alarminator_api, cups_print +from pathlib import Path + +app = Flask(__name__) +app.secret_key = 'super secret key' +app.config['SESSION_TYPE'] = 'filesystem' + +def wrapHtml(innerHtml): + return ''' + + + + Bootstrap demo + + +
+ ''' + flashMessages() +''' + ''' + innerHtml + ''' +
+ + +''' + +def flashMessages(): + messages = get_flashed_messages(with_categories=True) + html = "" + if messages: + for category, message in messages: + html = html + category + ": "+message+"
" + return html + +def alarmsPath(): + dir_path = os.path.dirname(os.path.realpath(__file__)) + return dir_path + "/alarms" + os.sep + +def getAlarmFiles(): + a_list = glob.glob(alarmsPath()+"*.html") + a_list.sort() + return [os.path.basename(f) for f in a_list] + +def parseAlarm(f): + f = alarmsPath() + os.sep + f + with open(f, "r") as o: + _r: str = o.read() + now = datetime.datetime.now() + _r = _r.replace('%DATUM%',now.strftime("%d.%m.%Y")) + _r = _r.replace('%UHRZEIT%',now.strftime("%H:%M")) + if _r != '': + return [securecad_parser.parse_securecad_message(_r),_r] + +def allowed_file(filename:str): + print(filename.rsplit('.', 1)[1].lower()) + return '.' in filename and \ + filename.rsplit('.', 1)[1].lower() in ["html"] + + + +@app.route("/") +def root(): + html = "" + file = request.args.get('sendalarm') + if file is not None: + parsed_body, raw = parseAlarm(file) + if parsed_body != None: + if 'ALARMDEPESCHE' in parsed_body: + webhook(parsed_body) + alarminator_api(parsed_body) + cups_print(parsed_body,raw) + flash("Alarm gesendet!") + return redirect('/') + + html = html + '
' + i: str + files = getAlarmFiles() + for f in files: + html = html + "
" + f + "
" + html = html + "
" + return wrapHtml(html) + +@app.route('/files', methods=['POST']) +def upload_file(): + # check if the post request has the file part + print(request.files) + if 'file' not in request.files: + flash('No file part') + return redirect(request.url) + file = request.files['file'] + # If the user does not select a file, the browser submits an + # empty file without a filename. + print(file.filename) + if file.filename == '': + flash('No selected file') + return redirect(request.url) + if file and allowed_file(file.filename): + file.save(os.path.join(alarmsPath(), file.filename)) + return redirect('/files') + +@app.route('/files/', methods=['GET']) +def download(filename): + uploads = alarmsPath() + return send_from_directory(uploads, filename, as_attachment=True) + +@app.route("/files", methods=['GET']) +def files(): + Path(alarmsPath()).mkdir(parents=True, exist_ok=True) + file = request.args.get('del') + if file is not None: + try: + os.remove(alarmsPath()+os.sep+file) + except: + pass + flash("Datei gelöscht!") + return redirect('/files') + + files = getAlarmFiles() + html = '
' + return html + +if __name__ == "__main__": + app.run(port=5000) diff --git a/app/http.py b/app/http.py deleted file mode 100644 index 200d6c5..0000000 --- a/app/http.py +++ /dev/null @@ -1,65 +0,0 @@ -from flask import Flask, request -import os -import glob -import securecad_parser -import datetime -from hooks import webhook, alarminator_api, cups_print - -app = Flask(__name__) - -def wrapHtml(innerHtml): - return ''' - - - - Bootstrap demo - - -
- ''' + innerHtml + ''' -
- - -''' - -def getAlarmFiles(): - dir_path = os.path.dirname(os.path.realpath(__file__)) - dir_path = dir_path + "/alarms" + os.sep - a_list = glob.glob(dir_path+"*.html") - a_list.sort() - return a_list - -def parseAlarm(f): - dir_path = os.path.dirname(os.path.realpath(__file__)) - f = dir_path + "/alarms" + os.sep + f - with open(f, "r") as o: - _r: str = o.read() - now = datetime.datetime.now() - _r = _r.replace('%DATUM%',now.strftime("%d.%m.%Y")) - _r = _r.replace('%UHRZEIT%',now.strftime("%H:%M")) - if _r != '': - return [securecad_parser.parse_securecad_message(_r),_r] - - - -@app.route("/") -def root(): - - file = request.args.get('sendalarm') - if file is not None: - parsed_body, raw = parseAlarm(file) - if parsed_body != None: - if 'ALARMDEPESCHE' in parsed_body: - webhook(parsed_body) - alarminator_api(parsed_body) - cups_print(parsed_body,raw) - - html = '
' - i: str - files = getAlarmFiles() - for f in files: - html = html + "" - html = html + "
" - return wrapHtml(html) - -app.run(port=5000) \ No newline at end of file