Spaces:
Paused
Paused
| from flask import Flask, request, jsonify, render_template | |
| from pymongo.mongo_client import MongoClient | |
| from pymongo.server_api import ServerApi | |
| from werkzeug.security import generate_password_hash | |
| import os | |
| import hmac | |
| from functools import wraps | |
| app = Flask(__name__, template_folder='/app/sudo/templates') | |
| app.secret_key = os.getenv("FLASK_SECRET") | |
| # MongoDB connection | |
| uri = os.getenv("MONGO_URI") | |
| client = MongoClient(uri, server_api=ServerApi('1')) | |
| db = client['librechat'] | |
| ADMIN_SECRET = os.getenv("ADMIN_SECRET") | |
| # Authentication decorator | |
| def require_auth(f): | |
| def wrapper(*args, **kwargs): | |
| auth_token = request.headers.get('X-Auth-Token') | |
| if not auth_token or not hmac.compare_digest(auth_token, ADMIN_SECRET): | |
| return jsonify({"error": "Unauthorized"}), 403 | |
| return f(*args, **kwargs) | |
| return wrapper | |
| # Routes | |
| def admin_panel(): | |
| return render_template('index.html') | |
| def login(): | |
| if not hmac.compare_digest(request.json.get('password') or '', ADMIN_SECRET): | |
| return jsonify({"error": "Invalid credentials"}), 401 | |
| return jsonify({"token": ADMIN_SECRET}) | |
| def list_users(): | |
| users = list(db.users.find({}, {"_id": 0, "username": 1})) | |
| return jsonify(users) | |
| def add_user(): | |
| user_data = { | |
| "username": request.json["username"], | |
| "password": generate_password_hash(request.json["password"]), | |
| "role": "user" | |
| } | |
| db.users.insert_one(user_data) | |
| return jsonify({"status": "User added"}) | |
| def delete_user(username): | |
| result = db.users.delete_one({"username": username}) | |
| if result.deleted_count == 0: | |
| return jsonify({"error": "User not found"}), 404 | |
| return jsonify({"status": "User deleted"}) | |
| def debug(): | |
| return jsonify({ | |
| "expected_password": os.getenv("ADMIN_SECRET", "NOT_SET!"), | |
| "flask_secret_set": bool(os.getenv("FLASK_SECRET")), | |
| "mongo_connected": bool(client) | |
| }) | |
| if __name__ == "__main__": | |
| app.run(host='0.0.0.0', port=5000) |