from geruecht import app, LOGGER from geruecht.decorator import login_required from geruecht.exceptions import PermissionDenied import geruecht.controller.accesTokenController as ac import geruecht.controller.userController as uc from geruecht.model import MONEY, BAR, USER, GASTRO, VORSTAND, EXTERN from flask import request, jsonify accesTokenController = ac.AccesTokenController() userController = uc.UserController() def login(user, password): return user.login(password) @app.route("/valid") def _valid(): token = request.headers.get("Token") accToken = accesTokenController.validateAccessToken(token, [MONEY]) if accToken: return jsonify(accToken.user.toJSON()) accToken = accesTokenController.validateAccessToken(token, [BAR]) if accToken: return jsonify(accToken.user.toJSON()) accToken = accesTokenController.validateAccessToken(token, [GASTRO]) if accToken: return jsonify(accToken.user.toJSON()) accToken = accesTokenController.validateAccessToken(token, [USER]) if accToken: return jsonify(accToken.user.toJSON()) return jsonify({"error": "permission denied"}), 401 @app.route("/pricelist", methods=['GET']) def _getPricelist(): try: retVal = userController.getPricelist() print(retVal) return jsonify(retVal) except Exception as err: return jsonify({"error": str(err)}) @app.route('/drinkTypes', methods=['GET']) def getTypes(): try: retVal = userController.getAllDrinkTypes() return jsonify(retVal) except Exception as err: return jsonify({"error": str(err)}), 500 @app.route('/getAllStatus', methods=['GET']) @login_required(groups=[USER, MONEY, GASTRO, BAR, VORSTAND]) def _getAllStatus(**kwargs): try: retVal = userController.getAllStatus() return jsonify(retVal) except Exception as err: return jsonify({"error": str(err)}), 500 @app.route('/getStatus', methods=['POST']) @login_required(groups=[USER, MONEY, GASTRO, BAR, VORSTAND]) def _getStatus(**kwargs): try: data = request.get_json() name = data['name'] retVal = userController.getStatus(name) return jsonify(retVal) except Exception as err: return jsonify({"error": str(err)}), 500 @app.route('/getUsers', methods=['GET']) @login_required(groups=[MONEY, GASTRO, VORSTAND]) def _getUsers(**kwargs): try: users = userController.getAllUsersfromDB() retVal = [user.toJSON() for user in users] return jsonify(retVal) except Exception as err: return jsonify({"error": str(err)}), 500 @app.route("/getLifeTime", methods=['GET']) @login_required(groups=[MONEY, GASTRO, VORSTAND, EXTERN, USER]) def _getLifeTime(**kwargs): try: if 'accToken' in kwargs: accToken = kwargs['accToken'] return jsonify({"value": accToken.lifetime}) except Exception as err: return jsonify({"error": str(err)}), 500 @app.route("/saveLifeTime", methods=['POST']) @login_required(groups=[MONEY, GASTRO, VORSTAND, EXTERN, USER]) def _saveLifeTime(**kwargs): try: if 'accToken' in kwargs: accToken = kwargs['accToken'] data = request.get_json() lifetime = data['value'] accToken.lifetime = lifetime accToken.updateTimestamp() return jsonify({"value": accToken.lifetime}) except Exception as err: return jsonify({"error": str(err)}), 500 @app.route("/logout", methods=['GET']) @login_required(groups=[MONEY, GASTRO, VORSTAND, EXTERN, USER]) def _logout(**kwargs): try: if 'accToken' in kwargs: accToken = kwargs['accToken'] accesTokenController.deleteAccessToken(accToken) return jsonify({"ok": "ok"}) except Exception as err: return jsonify({"error": str(err)}), 500 @app.route("/login", methods=['POST']) def _login(): """ Login User Nothing to say. Login in User and create an AccessToken for the User. Returns: A JSON-File with createt Token or Errors """ LOGGER.info("Start log in.") data = request.get_json() print(data) LOGGER.debug("JSON from request: {}".format(data)) username = data['username'] password = data['password'] LOGGER.info("search {} in database".format(username)) try: user, ldap_conn = userController.loginUser(username, password) user.password = password token = accesTokenController.createAccesToken(user, ldap_conn) dic = accesTokenController.validateAccessToken(token, [USER, EXTERN]).user.toJSON() dic["token"] = token dic["accessToken"] = token LOGGER.info("User {} success login.".format(username)) return jsonify(dic) except PermissionDenied as err: return jsonify({"error": str(err)}), 401 except Exception as err: return jsonify({"error": "permission denied"}), 401 LOGGER.info("User {} does not exist.".format(username)) return jsonify({"error": "wrong username"}), 401