"""登录认证。""" import os from functools import wraps from flask import Blueprint, request, session, redirect, url_for bp = Blueprint("auth", __name__) def _get_admin_creds(): import os _ENV = "/root/socks-manager/.env" pwd = os.environ.get("SM_ADMIN_PASSWORD") user = os.environ.get("SM_ADMIN_USER", "admin") if not pwd and os.path.exists(_ENV): try: for line in open(_ENV): line = line.strip() if line and not line.startswith("#"): k, _, v = line.partition("=") if k.strip() == "SM_ADMIN_PASSWORD": pwd = v.strip() elif k.strip() == "SM_ADMIN_USER": user = v.strip() except Exception: pass return (user, pwd or "") def login_required(f): @wraps(f) def decorated(*args, **kwargs): if not session.get("logged_in"): if request.path.startswith("/api/"): return {"error": "unauthorized"}, 401 return redirect(url_for("auth.login", next=request.url)) return f(*args, **kwargs) return decorated @bp.route("/login", methods=["GET", "POST"]) def login(): if session.get("logged_in"): return redirect(url_for("web.index")) if request.method == "POST": u, p = _get_admin_creds() form_user = request.form.get("username", "") form_pwd = request.form.get("password", "") if form_user == u and form_pwd == p: session["logged_in"] = True session.permanent = True return redirect(request.args.get("next") or url_for("web.index")) return {"error": "用户名或密码错误"}, 401 return _render_login() @bp.route("/logout") def logout(): session.clear() return redirect(url_for("auth.login")) def _render_login(): return """
SOCKS5 代理管理平台