import os import sys from datetime import datetime, timedelta import json import traceback # third-party from flask import ( redirect, render_template, Response, request, jsonify, send_from_directory, ) from flask_login import login_user, logout_user, current_user, login_required # sjva 공용 from framework import ( app, db, version, USERS, login_manager, logger, path_data, check_api, ) import system @app.route("/login", methods=["GET", "POST"]) def login(): if request.method == "POST": username = request.form["username"] password = request.form["password"] remember = request.form["remember"] == "True" if username not in USERS: return jsonify("no_id") elif not USERS[username].can_login(password): return jsonify("wrong_password") else: USERS[username].authenticated = True login_user(USERS[username], remember=remember) return jsonify("redirect") else: if ( db.session.query(system.ModelSetting) .filter_by(key="use_login") .first() .value == "False" ): username = ( db.session.query(system.ModelSetting) .filter_by(key="id") .first() .value ) logger.debug(f"username:: {username}") logger.debug(f"USERS:: {USERS}") USERS[username].authenticated = True login_user(USERS[username], remember=True) # current_user = USERS[username] return redirect(request.args.get("next")) return render_template("login.html", next=request.args.get("next")) @app.errorhandler(401) def custom_401(error): # return Response('', 401, {'WWW-Authenticate':'Basic realm="Login Required"'}) return "login_required" # important!! @login_manager.user_loader def user_loader(user_id): return USERS[user_id] # ============================================================================ # API # ============================================================================ @app.route("/") @app.route("/None") @app.route("/home") def home(): logger.warning(request.host_url) return redirect("/system/home") @app.route("/version") def get_version(): # return jsonify(version) return version