Spaces:
Sleeping
Sleeping
File size: 3,127 Bytes
eb796ce 0d2208a 8e8453e 0d2208a 0a96fb2 0d2208a d9fbe52 5f00f06 0d2208a d9fbe52 0d2208a 5f00f06 ab04db2 d9fbe52 0d2208a ab04db2 0d2208a d9fbe52 91bc074 0d2208a d9fbe52 0d2208a d9fbe52 ab04db2 0d2208a ab04db2 239b62a 0d2208a 91bc074 0d2208a 91bc074 0d2208a ab04db2 0d2208a 239b62a 0d2208a d9fbe52 0d2208a d9fbe52 91bc074 0d2208a d9fbe52 0d2208a 91bc074 0d2208a 8e8453e 0d2208a 91bc074 0d2208a d9fbe52 0d2208a 91bc074 d9fbe52 91bc074 ab04db2 d9fbe52 0d2208a d9fbe52 0d2208a 33cfdd9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | import os
import secrets
from datetime import datetime, timedelta
from flask import Flask, render_template, request, redirect, url_for, session, flash
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
from dotenv import load_dotenv
import pandas as pd
from huggingface_hub import HfApi, HfFolder
from datasets import Dataset as HFDataset
# Load environment variables
load_dotenv()
# --- Config ---
ADMIN_USER = os.getenv("ADMIN_USER", "admin")
ADMIN_PASS = os.getenv("ADMIN_PASS", "Welcome123")
HF_TOKEN = os.getenv("HF_TOKEN")
REPO_ID = "0vergeared/otp-logs"
OTP_EXPIRY_MINUTES = 5
# --- Flask App ---
app = Flask(__name__)
app.secret_key = os.getenv("FLASK_SECRET", "changeme123")
limiter = Limiter(get_remote_address, app=app)
# --- Memory store for OTPs
otp_store = {}
# ---------------- ROUTES ---------------- #
@app.route("/")
def index():
return redirect(url_for("admin"))
@app.route("/admin", methods=["GET", "POST"])
def admin():
if request.method == "POST":
user = request.form.get("username")
pwd = request.form.get("password")
if user == ADMIN_USER and pwd == ADMIN_PASS:
session["logged_in"] = True
return redirect(url_for("dashboard"))
flash("Invalid credentials", "error")
return render_template("login.html")
@app.route("/dashboard")
def dashboard():
if not session.get("logged_in"):
return redirect(url_for("admin"))
return render_template("dashboard.html")
@app.route("/generate_otp")
def generate_otp():
if not session.get("logged_in"):
return redirect(url_for("admin"))
otp = secrets.token_urlsafe(6)[:6].upper()
expiry = datetime.utcnow() + timedelta(minutes=OTP_EXPIRY_MINUTES)
otp_store[otp] = {"expiry": expiry, "used": False}
save_otp_to_dataset(otp, expiry.strftime("%Y-%m-%d %H:%M:%S UTC"))
return render_template("otp_result.html", otp=otp, expiry=expiry.strftime("%Y-%m-%d %H:%M UTC"))
@app.route("/logout")
def logout():
session.clear()
return redirect(url_for("admin"))
# ---------------- HELPERS ---------------- #
def save_otp_to_dataset(otp: str, expiry: str):
try:
if not HF_TOKEN:
print("❌ HF_TOKEN not set.")
return
HfFolder.save_token(HF_TOKEN)
api = HfApi()
local_file = "otp_temp.csv"
if not os.path.exists(local_file):
pd.DataFrame(columns=["otp", "expiry"]).to_csv(local_file, index=False)
df = pd.read_csv(local_file)
df = pd.concat([df, pd.DataFrame([{"otp": otp, "expiry": expiry}])], ignore_index=True)
df.to_csv(local_file, index=False)
dataset = HFDataset.from_pandas(df)
dataset.push_to_hub(REPO_ID, token=HF_TOKEN)
print(f"✅ OTP {otp} pushed to dataset.")
except Exception as e:
print("❌ Dataset push failed:", e)
@app.after_request
def allow_iframe(response):
response.headers["X-Frame-Options"] = "SAMEORIGIN"
return response
# ---------------- MAIN ---------------- #
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)
|