import os import logging from flask import Flask, send_file, request, jsonify from requests import HTTPError from zammad_py import ZammadAPI from zammad_py.api import Object as ZamObject logger = logging.getLogger(__name__) ZAMMAD_TOKEN = os.getenv("ZAMMAD_TOKEN") ZAMMAD_URL = os.getenv("ZAMMAD_URL") if not ZAMMAD_TOKEN or not ZAMMAD_URL: logger.error('Missing conf env var(s)') app = Flask(__name__, static_folder=os.path.join("..","frontend","dist")) zammad = ZammadAPI(url=ZAMMAD_URL, http_token=ZAMMAD_TOKEN) @app.route("/") def main(): index_path = os.path.join(app.static_folder, "index.html") return send_file(index_path) @app.route('/api/hello') def start(): return "Hallo, Welt!" @app.route('/api/buildings') def api_buildings(): #return ["Theater Dortmund", "Schauspiel Dortmund", "Probebühnen Alte Straße", "Lager Alte Straße", # "Probebühne KJT","Schreinerei","Schlosserei", "Lager Niedersachsenweg" ] zob = ZamObject(zammad) for z in zob.all(): if "gebaeude" == z['name']: return z['data_option']['options'] return jsonify([]) @app.route("/api/groups") def api_groups(): #return [{"text":'Hausmeister', "value":"5"}, {"text":"Haustechnik", "value":"4"}, {"text":"Leitung-HBT", "value":"2"}, {"text":"IT", "value":"4"}] arr = [] for x in zammad.group.all(): if "Users" != x['name']: arr.append(x['name']) return jsonify(arr) @app.route("/api/submit", methods=['POST']) def api_submit(): data = request.json print(data) if data['firstname'] != "" and data['lastname'] != "" and data['email'] != "": try: zammad.user.create({"firstname":data['firstname'],"lastname":data['lastname'],"email":data['email'],"roles":["Customer"]}) except HTTPError as e: print("User creation failed: {}".format(e)) if "Invalid email" in str(e): return jsonify(error='Invalid Email'), 500 try: zammad.on_behalf_of = data['email'] title = (data['description'][:25] + '..') if len(data['description']) > 25 else data['description'] zammad.ticket.create({"title":"Web-Form: {}".format(title),"customer":data['email'], "group":data['group'], "gebaeude":data['building'], "raumnummer":data['room'], "article": { "subject": "", "body": data['description'], "type": "note", "internal": "false" }}) except HTTPError as e: print("Ticket creation failed: {}".format(e)) return jsonify(error=str(e)), 500 return "ok" # Everything not declared before (not a Flask route / API endpoint)... @app.route("/") def route_frontend(path): # ...could be a static file needed by the front end that # doesn't use the `static` path (like in `