Atualizar app/app.py

This commit is contained in:
2026-08-19 21:20:18 -03:00
parent 1b741ec8fd
commit 773373fbf6
+49
View File
@@ -129,10 +129,59 @@ def require_capability(cap):
# AUTH
# ================
import pyotp, base64, os
@app.route("/auth/enable_2fa", methods=["POST"])
@login_required
def enable_2fa():
db = SessionLocal()
if app.config["AUTH_MODE"] == "oauth":
email = session["user"]["email"]
else:
email = session["db_user"]["email"]
u = db.query(User).filter_by(email=email).first()
secret = base64.b32encode(os.urandom(10)).decode("utf-8")
u.totp_secret = secret
u.twofa_enabled = True
db.commit()
db.close()
# Você mostra esse secret como QR code no frontend (otpauth:// URI)
return jsonify({"secret": secret})
@app.route("/auth_mode")
def auth_mode():
return jsonify({"mode": app.config["AUTH_MODE"]})
@app.route("/auth/login", methods=["GET", "POST"])
def db_login():
if request.method == "GET":
return send_file("/srv/auth/login.html")
email = request.form.get("email")
password = request.form.get("password")
token = request.form.get("token") # código 2FA
db = SessionLocal()
user = db.query(User).filter_by(email=email).first()
if not user or user.password != password:
db.close()
return jsonify({"error": "Invalid credentials"}), 401
if user.twofa_enabled:
totp = pyotp.TOTP(user.totp_secret)
if not totp.verify(token):
db.close()
return jsonify({"error": "Invalid 2FA token"}), 401
db.close()
session["db_user"] = {"email": user.email, "name": user.name, "role": user.role}
return redirect("/")
oauth = OAuth(app)
google = oauth.register(