add admin panel

This commit is contained in:
Mathias DUPEUX 2025-04-17 23:27:25 +02:00
parent ea3c737c04
commit a5d02f3efd
5 changed files with 49 additions and 3 deletions

View file

@ -4,6 +4,9 @@ db_password=""
db_host=postgres.hackclub.app
db_port=5432
BASIC_AUTH_USERNAME="admin"
BASIC_AUTH_PASSWORD="veryverylongpasswordthatshouldbesafe"
SYNC_SERVER_URL="sync.example.com"
HOST="0.0.0.0"
PORT=80

12
main.py
View file

@ -1,4 +1,5 @@
from flask import Flask, request, make_response, render_template
from flask_basicauth import BasicAuth
from dotenv import load_dotenv
from flask_sock import Sock
from glob import glob
@ -9,6 +10,10 @@ import os
load_dotenv()
app = Flask(__name__)
sock = Sock(app)
basic_auth = BasicAuth(app)
app.config['BASIC_AUTH_USERNAME'] = os.getenv("AUTH_USERNAME")
app.config['BASIC_AUTH_PASSWORD'] = os.getenv("AUTH_PASSWORD")
def make_resp(data=''):
response = make_response(data)
@ -136,6 +141,13 @@ def websocket(ws):
if operation == "usernames": # TODO
ws.send(json.dumps({"1": "Mathias"}))
@app.route("/admin")
@basic_auth.required
def admin_panel():
users = database.db.execute_query("SELECT name, email FROM users;")
vaults = database.db.execute_query("SELECT name, (SELECT name FROM users WHERE uid=owner) FROM vaults;")
return render_template("admin.html", users=users, vaults=vaults)
@app.route("/")
def index_page():
return render_template("index.html")

View file

@ -1,4 +1,5 @@
psycopg2
python-dotenv
flask
flask-sock
Flask
flask-sock
Flask-BasicAuth

30
templates/admin.html Normal file
View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Obsidian Sync server</title>
<link rel="icon" href="https://obsidian.md/favicon.ico" sizes="32x32">
<link rel="icon" href="https://obsidian.md/favicon.svg" sizes="any" type="image/svg+xml">
<link rel="apple-touch-icon" href="https://obsidian.md/apple-touch-icon.png">
<style>
body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<!-- Copy of nginx homepage -->
<h1>Obsidian Sync / Admin Panel</h1>
Users:
<ul>
{% for user in users %}
<li>{{ user[0] }} ({{ user[1] }})</li>
{% endfor %}
</ul>
Vaults:
<ul>
{% for vault in vaults %}
<li>{{ vault[0] }} ({{ vault[1] }})</li>
{% endfor %}
</ul>
</body>
</html>

View file

@ -13,7 +13,7 @@
</head>
<body>
<!-- Copy of nginx homepage -->
<h1>Obsidian Sync server</h1>
<h1>Obsidian Sync</h1>
<p>If you see this page, your Obsidian Sync server server is successfully installed and working.</p>
<p>Available at <a href="https://git.hackclub.app/mathias/obsidian_freesync">mathias/obsidian_freesync</a></p>
</body>